goca-spree-frontend 3.1.14.rails.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +6 -0
  3. data/LICENSE +26 -0
  4. data/README.md +50 -0
  5. data/Rakefile +15 -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/flags/ad.png +0 -0
  30. data/app/assets/images/flags/ae.png +0 -0
  31. data/app/assets/images/flags/af.png +0 -0
  32. data/app/assets/images/flags/ag.png +0 -0
  33. data/app/assets/images/flags/ai.png +0 -0
  34. data/app/assets/images/flags/al.png +0 -0
  35. data/app/assets/images/flags/am.png +0 -0
  36. data/app/assets/images/flags/an.png +0 -0
  37. data/app/assets/images/flags/ao.png +0 -0
  38. data/app/assets/images/flags/ar.png +0 -0
  39. data/app/assets/images/flags/as.png +0 -0
  40. data/app/assets/images/flags/at.png +0 -0
  41. data/app/assets/images/flags/au.png +0 -0
  42. data/app/assets/images/flags/aw.png +0 -0
  43. data/app/assets/images/flags/ax.png +0 -0
  44. data/app/assets/images/flags/az.png +0 -0
  45. data/app/assets/images/flags/ba.png +0 -0
  46. data/app/assets/images/flags/bb.png +0 -0
  47. data/app/assets/images/flags/bd.png +0 -0
  48. data/app/assets/images/flags/be.png +0 -0
  49. data/app/assets/images/flags/bf.png +0 -0
  50. data/app/assets/images/flags/bg.png +0 -0
  51. data/app/assets/images/flags/bh.png +0 -0
  52. data/app/assets/images/flags/bi.png +0 -0
  53. data/app/assets/images/flags/bj.png +0 -0
  54. data/app/assets/images/flags/bm.png +0 -0
  55. data/app/assets/images/flags/bn.png +0 -0
  56. data/app/assets/images/flags/bo.png +0 -0
  57. data/app/assets/images/flags/br.png +0 -0
  58. data/app/assets/images/flags/bs.png +0 -0
  59. data/app/assets/images/flags/bt.png +0 -0
  60. data/app/assets/images/flags/bv.png +0 -0
  61. data/app/assets/images/flags/bw.png +0 -0
  62. data/app/assets/images/flags/by.png +0 -0
  63. data/app/assets/images/flags/bz.png +0 -0
  64. data/app/assets/images/flags/ca.png +0 -0
  65. data/app/assets/images/flags/catalonia.png +0 -0
  66. data/app/assets/images/flags/cc.png +0 -0
  67. data/app/assets/images/flags/cd.png +0 -0
  68. data/app/assets/images/flags/cf.png +0 -0
  69. data/app/assets/images/flags/cg.png +0 -0
  70. data/app/assets/images/flags/ch.png +0 -0
  71. data/app/assets/images/flags/ci.png +0 -0
  72. data/app/assets/images/flags/ck.png +0 -0
  73. data/app/assets/images/flags/cl.png +0 -0
  74. data/app/assets/images/flags/cm.png +0 -0
  75. data/app/assets/images/flags/cn.png +0 -0
  76. data/app/assets/images/flags/co.png +0 -0
  77. data/app/assets/images/flags/cr.png +0 -0
  78. data/app/assets/images/flags/cs.png +0 -0
  79. data/app/assets/images/flags/cu.png +0 -0
  80. data/app/assets/images/flags/cv.png +0 -0
  81. data/app/assets/images/flags/cx.png +0 -0
  82. data/app/assets/images/flags/cy.png +0 -0
  83. data/app/assets/images/flags/cz.png +0 -0
  84. data/app/assets/images/flags/de.png +0 -0
  85. data/app/assets/images/flags/dj.png +0 -0
  86. data/app/assets/images/flags/dk.png +0 -0
  87. data/app/assets/images/flags/dm.png +0 -0
  88. data/app/assets/images/flags/do.png +0 -0
  89. data/app/assets/images/flags/dz.png +0 -0
  90. data/app/assets/images/flags/ec.png +0 -0
  91. data/app/assets/images/flags/ee.png +0 -0
  92. data/app/assets/images/flags/eg.png +0 -0
  93. data/app/assets/images/flags/eh.png +0 -0
  94. data/app/assets/images/flags/england.png +0 -0
  95. data/app/assets/images/flags/er.png +0 -0
  96. data/app/assets/images/flags/es.png +0 -0
  97. data/app/assets/images/flags/et.png +0 -0
  98. data/app/assets/images/flags/europeanunion.png +0 -0
  99. data/app/assets/images/flags/fam.png +0 -0
  100. data/app/assets/images/flags/fi.png +0 -0
  101. data/app/assets/images/flags/fj.png +0 -0
  102. data/app/assets/images/flags/fk.png +0 -0
  103. data/app/assets/images/flags/fm.png +0 -0
  104. data/app/assets/images/flags/fo.png +0 -0
  105. data/app/assets/images/flags/fr.png +0 -0
  106. data/app/assets/images/flags/ga.png +0 -0
  107. data/app/assets/images/flags/gb.png +0 -0
  108. data/app/assets/images/flags/gd.png +0 -0
  109. data/app/assets/images/flags/ge.png +0 -0
  110. data/app/assets/images/flags/gf.png +0 -0
  111. data/app/assets/images/flags/gh.png +0 -0
  112. data/app/assets/images/flags/gi.png +0 -0
  113. data/app/assets/images/flags/gl.png +0 -0
  114. data/app/assets/images/flags/gm.png +0 -0
  115. data/app/assets/images/flags/gn.png +0 -0
  116. data/app/assets/images/flags/gp.png +0 -0
  117. data/app/assets/images/flags/gq.png +0 -0
  118. data/app/assets/images/flags/gr.png +0 -0
  119. data/app/assets/images/flags/gs.png +0 -0
  120. data/app/assets/images/flags/gt.png +0 -0
  121. data/app/assets/images/flags/gu.png +0 -0
  122. data/app/assets/images/flags/gw.png +0 -0
  123. data/app/assets/images/flags/gy.png +0 -0
  124. data/app/assets/images/flags/hk.png +0 -0
  125. data/app/assets/images/flags/hm.png +0 -0
  126. data/app/assets/images/flags/hn.png +0 -0
  127. data/app/assets/images/flags/hr.png +0 -0
  128. data/app/assets/images/flags/ht.png +0 -0
  129. data/app/assets/images/flags/hu.png +0 -0
  130. data/app/assets/images/flags/id.png +0 -0
  131. data/app/assets/images/flags/ie.png +0 -0
  132. data/app/assets/images/flags/il.png +0 -0
  133. data/app/assets/images/flags/in.png +0 -0
  134. data/app/assets/images/flags/io.png +0 -0
  135. data/app/assets/images/flags/iq.png +0 -0
  136. data/app/assets/images/flags/ir.png +0 -0
  137. data/app/assets/images/flags/is.png +0 -0
  138. data/app/assets/images/flags/it.png +0 -0
  139. data/app/assets/images/flags/ja.png +0 -0
  140. data/app/assets/images/flags/jm.png +0 -0
  141. data/app/assets/images/flags/jo.png +0 -0
  142. data/app/assets/images/flags/ke.png +0 -0
  143. data/app/assets/images/flags/kg.png +0 -0
  144. data/app/assets/images/flags/kh.png +0 -0
  145. data/app/assets/images/flags/ki.png +0 -0
  146. data/app/assets/images/flags/km.png +0 -0
  147. data/app/assets/images/flags/kn.png +0 -0
  148. data/app/assets/images/flags/kp.png +0 -0
  149. data/app/assets/images/flags/kr.png +0 -0
  150. data/app/assets/images/flags/kw.png +0 -0
  151. data/app/assets/images/flags/ky.png +0 -0
  152. data/app/assets/images/flags/kz.png +0 -0
  153. data/app/assets/images/flags/la.png +0 -0
  154. data/app/assets/images/flags/lb.png +0 -0
  155. data/app/assets/images/flags/lc.png +0 -0
  156. data/app/assets/images/flags/li.png +0 -0
  157. data/app/assets/images/flags/lk.png +0 -0
  158. data/app/assets/images/flags/lr.png +0 -0
  159. data/app/assets/images/flags/ls.png +0 -0
  160. data/app/assets/images/flags/lt.png +0 -0
  161. data/app/assets/images/flags/lu.png +0 -0
  162. data/app/assets/images/flags/lv.png +0 -0
  163. data/app/assets/images/flags/ly.png +0 -0
  164. data/app/assets/images/flags/ma.png +0 -0
  165. data/app/assets/images/flags/mc.png +0 -0
  166. data/app/assets/images/flags/md.png +0 -0
  167. data/app/assets/images/flags/me.png +0 -0
  168. data/app/assets/images/flags/mg.png +0 -0
  169. data/app/assets/images/flags/mh.png +0 -0
  170. data/app/assets/images/flags/mk.png +0 -0
  171. data/app/assets/images/flags/ml.png +0 -0
  172. data/app/assets/images/flags/mm.png +0 -0
  173. data/app/assets/images/flags/mn.png +0 -0
  174. data/app/assets/images/flags/mo.png +0 -0
  175. data/app/assets/images/flags/mp.png +0 -0
  176. data/app/assets/images/flags/mq.png +0 -0
  177. data/app/assets/images/flags/mr.png +0 -0
  178. data/app/assets/images/flags/ms.png +0 -0
  179. data/app/assets/images/flags/mt.png +0 -0
  180. data/app/assets/images/flags/mu.png +0 -0
  181. data/app/assets/images/flags/mv.png +0 -0
  182. data/app/assets/images/flags/mw.png +0 -0
  183. data/app/assets/images/flags/mx.png +0 -0
  184. data/app/assets/images/flags/my.png +0 -0
  185. data/app/assets/images/flags/mz.png +0 -0
  186. data/app/assets/images/flags/na.png +0 -0
  187. data/app/assets/images/flags/nc.png +0 -0
  188. data/app/assets/images/flags/ne.png +0 -0
  189. data/app/assets/images/flags/nf.png +0 -0
  190. data/app/assets/images/flags/ng.png +0 -0
  191. data/app/assets/images/flags/ni.png +0 -0
  192. data/app/assets/images/flags/nl.png +0 -0
  193. data/app/assets/images/flags/no.png +0 -0
  194. data/app/assets/images/flags/np.png +0 -0
  195. data/app/assets/images/flags/nr.png +0 -0
  196. data/app/assets/images/flags/nu.png +0 -0
  197. data/app/assets/images/flags/nz.png +0 -0
  198. data/app/assets/images/flags/om.png +0 -0
  199. data/app/assets/images/flags/pa.png +0 -0
  200. data/app/assets/images/flags/pe.png +0 -0
  201. data/app/assets/images/flags/pf.png +0 -0
  202. data/app/assets/images/flags/pg.png +0 -0
  203. data/app/assets/images/flags/ph.png +0 -0
  204. data/app/assets/images/flags/pk.png +0 -0
  205. data/app/assets/images/flags/pl.png +0 -0
  206. data/app/assets/images/flags/pm.png +0 -0
  207. data/app/assets/images/flags/pn.png +0 -0
  208. data/app/assets/images/flags/pr.png +0 -0
  209. data/app/assets/images/flags/ps.png +0 -0
  210. data/app/assets/images/flags/pt.png +0 -0
  211. data/app/assets/images/flags/pw.png +0 -0
  212. data/app/assets/images/flags/py.png +0 -0
  213. data/app/assets/images/flags/qa.png +0 -0
  214. data/app/assets/images/flags/re.png +0 -0
  215. data/app/assets/images/flags/ro.png +0 -0
  216. data/app/assets/images/flags/rs.png +0 -0
  217. data/app/assets/images/flags/ru.png +0 -0
  218. data/app/assets/images/flags/rw.png +0 -0
  219. data/app/assets/images/flags/sa.png +0 -0
  220. data/app/assets/images/flags/sb.png +0 -0
  221. data/app/assets/images/flags/sc.png +0 -0
  222. data/app/assets/images/flags/scotland.png +0 -0
  223. data/app/assets/images/flags/sd.png +0 -0
  224. data/app/assets/images/flags/se.png +0 -0
  225. data/app/assets/images/flags/sg.png +0 -0
  226. data/app/assets/images/flags/sh.png +0 -0
  227. data/app/assets/images/flags/si.png +0 -0
  228. data/app/assets/images/flags/sj.png +0 -0
  229. data/app/assets/images/flags/sk.png +0 -0
  230. data/app/assets/images/flags/sl.png +0 -0
  231. data/app/assets/images/flags/sm.png +0 -0
  232. data/app/assets/images/flags/sn.png +0 -0
  233. data/app/assets/images/flags/so.png +0 -0
  234. data/app/assets/images/flags/sr.png +0 -0
  235. data/app/assets/images/flags/st.png +0 -0
  236. data/app/assets/images/flags/sv.png +0 -0
  237. data/app/assets/images/flags/sy.png +0 -0
  238. data/app/assets/images/flags/sz.png +0 -0
  239. data/app/assets/images/flags/tc.png +0 -0
  240. data/app/assets/images/flags/td.png +0 -0
  241. data/app/assets/images/flags/tf.png +0 -0
  242. data/app/assets/images/flags/tg.png +0 -0
  243. data/app/assets/images/flags/th.png +0 -0
  244. data/app/assets/images/flags/tj.png +0 -0
  245. data/app/assets/images/flags/tk.png +0 -0
  246. data/app/assets/images/flags/tl.png +0 -0
  247. data/app/assets/images/flags/tm.png +0 -0
  248. data/app/assets/images/flags/tn.png +0 -0
  249. data/app/assets/images/flags/to.png +0 -0
  250. data/app/assets/images/flags/tr.png +0 -0
  251. data/app/assets/images/flags/tt.png +0 -0
  252. data/app/assets/images/flags/tv.png +0 -0
  253. data/app/assets/images/flags/tw.png +0 -0
  254. data/app/assets/images/flags/tz.png +0 -0
  255. data/app/assets/images/flags/ua.png +0 -0
  256. data/app/assets/images/flags/ug.png +0 -0
  257. data/app/assets/images/flags/um.png +0 -0
  258. data/app/assets/images/flags/us.png +0 -0
  259. data/app/assets/images/flags/uy.png +0 -0
  260. data/app/assets/images/flags/uz.png +0 -0
  261. data/app/assets/images/flags/va.png +0 -0
  262. data/app/assets/images/flags/vc.png +0 -0
  263. data/app/assets/images/flags/ve.png +0 -0
  264. data/app/assets/images/flags/vg.png +0 -0
  265. data/app/assets/images/flags/vi.png +0 -0
  266. data/app/assets/images/flags/vn.png +0 -0
  267. data/app/assets/images/flags/vu.png +0 -0
  268. data/app/assets/images/flags/wales.png +0 -0
  269. data/app/assets/images/flags/wf.png +0 -0
  270. data/app/assets/images/flags/ws.png +0 -0
  271. data/app/assets/images/flags/ye.png +0 -0
  272. data/app/assets/images/flags/yt.png +0 -0
  273. data/app/assets/images/flags/za.png +0 -0
  274. data/app/assets/images/flags/zm.png +0 -0
  275. data/app/assets/images/flags/zw.png +0 -0
  276. data/app/assets/images/logo/spree_50.png +0 -0
  277. data/app/assets/images/spree_header.jpg +0 -0
  278. data/app/assets/javascripts/spree/frontend/cart.js.coffee +15 -0
  279. data/app/assets/javascripts/spree/frontend/checkout/address.js.coffee +83 -0
  280. data/app/assets/javascripts/spree/frontend/checkout/payment.js.coffee +81 -0
  281. data/app/assets/javascripts/spree/frontend/checkout.js.coffee +16 -0
  282. data/app/assets/javascripts/spree/frontend/product.js.coffee +54 -0
  283. data/app/assets/javascripts/spree/frontend.js +9 -0
  284. data/app/assets/stylesheets/spree/frontend/_variables.scss +4 -0
  285. data/app/assets/stylesheets/spree/frontend/frontend_bootstrap.css.scss +102 -0
  286. data/app/assets/stylesheets/spree/frontend.css +5 -0
  287. data/app/controllers/spree/checkout_controller.rb +205 -0
  288. data/app/controllers/spree/content_controller.rb +23 -0
  289. data/app/controllers/spree/home_controller.rb +13 -0
  290. data/app/controllers/spree/locale_controller.rb +16 -0
  291. data/app/controllers/spree/orders_controller.rb +113 -0
  292. data/app/controllers/spree/products_controller.rb +60 -0
  293. data/app/controllers/spree/store_controller.rb +44 -0
  294. data/app/controllers/spree/taxons_controller.rb +23 -0
  295. data/app/helpers/spree/frontend_helper.rb +95 -0
  296. data/app/helpers/spree/orders_helper.rb +16 -0
  297. data/app/helpers/spree/store_helper.rb +10 -0
  298. data/app/helpers/spree/taxons_helper.rb +20 -0
  299. data/app/models/spree/frontend_configuration.rb +5 -0
  300. data/app/views/kaminari/twitter-bootstrap-3/_first_page.html.erb +13 -0
  301. data/app/views/kaminari/twitter-bootstrap-3/_gap.html.erb +8 -0
  302. data/app/views/kaminari/twitter-bootstrap-3/_last_page.html.erb +13 -0
  303. data/app/views/kaminari/twitter-bootstrap-3/_next_page.html.erb +13 -0
  304. data/app/views/kaminari/twitter-bootstrap-3/_page.html.erb +12 -0
  305. data/app/views/kaminari/twitter-bootstrap-3/_paginator.html.erb +25 -0
  306. data/app/views/kaminari/twitter-bootstrap-3/_prev_page.html.erb +13 -0
  307. data/app/views/spree/address/_form.html.erb +89 -0
  308. data/app/views/spree/checkout/_address.html.erb +44 -0
  309. data/app/views/spree/checkout/_confirm.html.erb +13 -0
  310. data/app/views/spree/checkout/_delivery.html.erb +101 -0
  311. data/app/views/spree/checkout/_payment.html.erb +71 -0
  312. data/app/views/spree/checkout/_summary.html.erb +72 -0
  313. data/app/views/spree/checkout/edit.html.erb +49 -0
  314. data/app/views/spree/checkout/payment/_check.html.erb +0 -0
  315. data/app/views/spree/checkout/payment/_gateway.html.erb +42 -0
  316. data/app/views/spree/checkout/payment/_storecredit.html.erb +16 -0
  317. data/app/views/spree/content/cvv.html.erb +13 -0
  318. data/app/views/spree/content/test.html.erb +1 -0
  319. data/app/views/spree/home/index.html.erb +12 -0
  320. data/app/views/spree/layouts/spree_application.html.erb +29 -0
  321. data/app/views/spree/orders/_adjustment_row.html.erb +8 -0
  322. data/app/views/spree/orders/_adjustments.html.erb +29 -0
  323. data/app/views/spree/orders/_form.html.erb +28 -0
  324. data/app/views/spree/orders/_line_item.html.erb +37 -0
  325. data/app/views/spree/orders/edit.html.erb +43 -0
  326. data/app/views/spree/orders/show.html.erb +28 -0
  327. data/app/views/spree/payments/_payment.html.erb +18 -0
  328. data/app/views/spree/products/_cart_form.html.erb +76 -0
  329. data/app/views/spree/products/_image.html.erb +5 -0
  330. data/app/views/spree/products/_promotions.html.erb +20 -0
  331. data/app/views/spree/products/_properties.html.erb +15 -0
  332. data/app/views/spree/products/_taxons.html.erb +8 -0
  333. data/app/views/spree/products/_thumbnails.html.erb +19 -0
  334. data/app/views/spree/products/index.html.erb +27 -0
  335. data/app/views/spree/products/show.html.erb +48 -0
  336. data/app/views/spree/shared/_address.html.erb +38 -0
  337. data/app/views/spree/shared/_error_messages.html.erb +12 -0
  338. data/app/views/spree/shared/_filters.html.erb +28 -0
  339. data/app/views/spree/shared/_google_add_items.js.erb +11 -0
  340. data/app/views/spree/shared/_google_analytics.js.erb +18 -0
  341. data/app/views/spree/shared/_google_checkout.js.erb +10 -0
  342. data/app/views/spree/shared/_google_purchase.js.erb +13 -0
  343. data/app/views/spree/shared/_head.html.erb +14 -0
  344. data/app/views/spree/shared/_header.html.erb +15 -0
  345. data/app/views/spree/shared/_link_to_cart.html.erb +1 -0
  346. data/app/views/spree/shared/_login.html.erb +19 -0
  347. data/app/views/spree/shared/_login_bar.html.erb +6 -0
  348. data/app/views/spree/shared/_main_nav_bar.html.erb +16 -0
  349. data/app/views/spree/shared/_nav_bar.html.erb +7 -0
  350. data/app/views/spree/shared/_order_details.html.erb +136 -0
  351. data/app/views/spree/shared/_products.html.erb +48 -0
  352. data/app/views/spree/shared/_search.html.erb +16 -0
  353. data/app/views/spree/shared/_shipment_tracking.html.erb +10 -0
  354. data/app/views/spree/shared/_sidebar.html.erb +3 -0
  355. data/app/views/spree/shared/_taxonomies.html.erb +12 -0
  356. data/app/views/spree/shared/forbidden.html.erb +0 -0
  357. data/app/views/spree/shared/unauthorized.html.erb +0 -0
  358. data/app/views/spree/store/cart_link.html.erb +1 -0
  359. data/app/views/spree/taxons/_taxon.html.erb +4 -0
  360. data/app/views/spree/taxons/show.html.erb +20 -0
  361. data/config/initializers/assets.rb +1 -0
  362. data/config/initializers/canonical_rails.rb +15 -0
  363. data/config/initializers/spree.rb +2 -0
  364. data/config/routes.rb +32 -0
  365. data/lib/spree/frontend/engine.rb +19 -0
  366. data/lib/spree/frontend/middleware/seo_assist.rb +51 -0
  367. data/lib/spree/frontend.rb +11 -0
  368. data/lib/spree_frontend.rb +1 -0
  369. data/lib/tasks/rake_util.rb +19 -0
  370. data/lib/tasks/taxon.rake +14 -0
  371. data/script/rails +9 -0
  372. data/spec/fixtures/thinking-cat.jpg +0 -0
  373. data/spree_frontend.gemspec +28 -0
  374. data/vendor/assets/javascripts/jquery.validate/additional-methods.min.js +12 -0
  375. data/vendor/assets/javascripts/jquery.validate/jquery.validate.min.js +12 -0
  376. data/vendor/assets/javascripts/jquery.validate/localization/messages_ar.js +25 -0
  377. data/vendor/assets/javascripts/jquery.validate/localization/messages_bg.js +25 -0
  378. data/vendor/assets/javascripts/jquery.validate/localization/messages_ca.js +25 -0
  379. data/vendor/assets/javascripts/jquery.validate/localization/messages_cs.js +25 -0
  380. data/vendor/assets/javascripts/jquery.validate/localization/messages_da.js +22 -0
  381. data/vendor/assets/javascripts/jquery.validate/localization/messages_de.js +22 -0
  382. data/vendor/assets/javascripts/jquery.validate/localization/messages_el.js +25 -0
  383. data/vendor/assets/javascripts/jquery.validate/localization/messages_es.js +25 -0
  384. data/vendor/assets/javascripts/jquery.validate/localization/messages_et.js +23 -0
  385. data/vendor/assets/javascripts/jquery.validate/localization/messages_eu.js +25 -0
  386. data/vendor/assets/javascripts/jquery.validate/localization/messages_fa.js +25 -0
  387. data/vendor/assets/javascripts/jquery.validate/localization/messages_fi.js +23 -0
  388. data/vendor/assets/javascripts/jquery.validate/localization/messages_fr.js +47 -0
  389. data/vendor/assets/javascripts/jquery.validate/localization/messages_ge.js +23 -0
  390. data/vendor/assets/javascripts/jquery.validate/localization/messages_he.js +25 -0
  391. data/vendor/assets/javascripts/jquery.validate/localization/messages_hr.js +25 -0
  392. data/vendor/assets/javascripts/jquery.validate/localization/messages_hu.js +24 -0
  393. data/vendor/assets/javascripts/jquery.validate/localization/messages_it.js +25 -0
  394. data/vendor/assets/javascripts/jquery.validate/localization/messages_ja.js +25 -0
  395. data/vendor/assets/javascripts/jquery.validate/localization/messages_ka.js +25 -0
  396. data/vendor/assets/javascripts/jquery.validate/localization/messages_kk.js +25 -0
  397. data/vendor/assets/javascripts/jquery.validate/localization/messages_ko.js +25 -0
  398. data/vendor/assets/javascripts/jquery.validate/localization/messages_lt.js +25 -0
  399. data/vendor/assets/javascripts/jquery.validate/localization/messages_lv.js +25 -0
  400. data/vendor/assets/javascripts/jquery.validate/localization/messages_ms.js +25 -0
  401. data/vendor/assets/javascripts/jquery.validate/localization/messages_nl.js +35 -0
  402. data/vendor/assets/javascripts/jquery.validate/localization/messages_no.js +25 -0
  403. data/vendor/assets/javascripts/jquery.validate/localization/messages_pl.js +25 -0
  404. data/vendor/assets/javascripts/jquery.validate/localization/messages_ptbr.js +24 -0
  405. data/vendor/assets/javascripts/jquery.validate/localization/messages_ptpt.js +24 -0
  406. data/vendor/assets/javascripts/jquery.validate/localization/messages_ro.js +25 -0
  407. data/vendor/assets/javascripts/jquery.validate/localization/messages_ru.js +25 -0
  408. data/vendor/assets/javascripts/jquery.validate/localization/messages_se.js +23 -0
  409. data/vendor/assets/javascripts/jquery.validate/localization/messages_si.js +25 -0
  410. data/vendor/assets/javascripts/jquery.validate/localization/messages_sk.js +22 -0
  411. data/vendor/assets/javascripts/jquery.validate/localization/messages_sl.js +25 -0
  412. data/vendor/assets/javascripts/jquery.validate/localization/messages_sr.js +25 -0
  413. data/vendor/assets/javascripts/jquery.validate/localization/messages_sv.js +23 -0
  414. data/vendor/assets/javascripts/jquery.validate/localization/messages_th.js +25 -0
  415. data/vendor/assets/javascripts/jquery.validate/localization/messages_tr.js +25 -0
  416. data/vendor/assets/javascripts/jquery.validate/localization/messages_tw.js +24 -0
  417. data/vendor/assets/javascripts/jquery.validate/localization/messages_uk.js +25 -0
  418. data/vendor/assets/javascripts/jquery.validate/localization/messages_vi.js +25 -0
  419. data/vendor/assets/javascripts/jquery.validate/localization/messages_zh.js +25 -0
  420. data/vendor/assets/javascripts/jquery.validate/localization/messages_zhtw.js +26 -0
  421. data/vendor/assets/javascripts/jquery.validate/localization/methods_de.js +12 -0
  422. data/vendor/assets/javascripts/jquery.validate/localization/methods_nl.js +9 -0
  423. data/vendor/assets/javascripts/jquery.validate/localization/methods_pt.js +9 -0
  424. metadata +556 -0
@@ -0,0 +1,19 @@
1
+ <%= form_for Spree::User.new, :as => :spree_user, :url => spree.create_new_session_path do |f| %>
2
+ <fieldset id="password-credentials">
3
+ <div class="form-group">
4
+ <%= f.email_field :email, :class => 'form-control', :tabindex => 1, :placeholder => Spree.t(:email) %>
5
+ </div>
6
+ <div class="form-group">
7
+ <%= f.password_field :password, :class => 'form-control', :tabindex => 2, :placeholder => Spree.t(:password) %>
8
+ </div>
9
+ <div class="checkbox">
10
+ <label>
11
+ <%= f.check_box :remember_me %>
12
+ <%= f.label :remember_me, Spree.t(:remember_me) %>
13
+ </label>
14
+ </div>
15
+ <div class="form-group">
16
+ <%= f.submit Spree.t(:login), :class => 'btn btn-lg btn-success btn-block', :tabindex => 3 %>
17
+ </div>
18
+ </fieldset>
19
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <% if spree_current_user %>
2
+ <li><%= link_to Spree.t(:my_account), spree.account_path %></li>
3
+ <li><%= link_to Spree.t(:logout), spree.logout_path %></li>
4
+ <% else %>
5
+ <li id="link-to-login"><%= link_to Spree.t(:login), spree.login_path %></li>
6
+ <% end %>
@@ -0,0 +1,16 @@
1
+ <nav class="col-md-12">
2
+ <div id="main-nav-bar" class="navbar">
3
+ <ul class="nav navbar-nav" data-hook>
4
+ <li id="home-link" data-hook><%= link_to Spree.t(:home), spree.root_path %></li>
5
+ </ul>
6
+ <ul class="nav navbar-nav navbar-right" data-hook>
7
+ <li id="link-to-cart" data-hook>
8
+ <noscript>
9
+ <%= link_to Spree.t(:cart), '/cart' %>
10
+ </noscript>
11
+ &nbsp;
12
+ </li>
13
+ <script>Spree.fetch_cart()</script>
14
+ </ul>
15
+ </div>
16
+ </nav>
@@ -0,0 +1,7 @@
1
+ <nav class="navbar col-md-8 col-sm-9" id="top-nav-bar">
2
+ <ul id="nav-bar" class="nav navbar-nav navbar-right" data-hook>
3
+ <li id="search-bar" data-hook>
4
+ <%= render :partial => 'spree/shared/search' %>
5
+ </li>
6
+ </ul>
7
+ </nav>
@@ -0,0 +1,136 @@
1
+ <div class="row steps-data">
2
+ <% if order.has_step?("address") %>
3
+ <div class="col-md-3 col-sm-3 col-xs-6" data-hook="order-bill-address">
4
+ <h4><%= Spree.t(:billing_address) %> <%= link_to "(#{Spree.t(:edit)})", checkout_state_path(:address) unless order.completed? %></h4>
5
+ <%= render 'spree/shared/address', address: order.bill_address %>
6
+ </div>
7
+
8
+ <% if order.has_step?("delivery") %>
9
+ <div class="col-md-3 col-sm-3 col-xs-6" data-hook="order-ship-address">
10
+ <h4><%= Spree.t(:shipping_address) %> <%= link_to "(#{Spree.t(:edit)})", checkout_state_path(:address) unless order.completed? %></h4>
11
+ <%= render 'spree/shared/address', address: order.ship_address %>
12
+ </div>
13
+
14
+ <div class="col-md-3 col-sm-3 col-xs-6" data-hook="order-shipment">
15
+ <h4><%= Spree.t(:shipments) %> <%= link_to "(#{Spree.t(:edit)})", checkout_state_path(:delivery) unless order.completed? %></h4>
16
+ <div class="delivery">
17
+ <% order.shipments.each do |shipment| %>
18
+ <div>
19
+ <i class='fa fa-truck'></i>
20
+ <%= Spree.t(:shipment_details, stock_location: shipment.stock_location.name, shipping_method: shipment.selected_shipping_rate.name) %>
21
+ </div>
22
+ <% end %>
23
+ </div>
24
+ <%= render 'spree/shared/shipment_tracking', order: order if order.shipped? %>
25
+ </div>
26
+ <% end %>
27
+ <% end %>
28
+
29
+ <% if order.has_step?("payment") %>
30
+ <div class="col-md-3 col-sm-3 col-xs-6" data-hook="order-payment">
31
+ <h4><%= Spree.t(:payment_information) %> <%= link_to "(#{Spree.t(:edit)})", checkout_state_path(:payment) unless order.completed? %></h4>
32
+ <div class="payment-info">
33
+ <% order.payments.valid.each do |payment| %>
34
+ <%= render payment %><br/>
35
+ <% end %>
36
+ </div>
37
+ </div>
38
+ <% end %>
39
+ </div>
40
+
41
+ <hr />
42
+
43
+ <table id='line-items' class="table" data-hook="order_details">
44
+ <col width="15%" valign="middle" halign="center">
45
+ <col width="70%" valign="middle">
46
+ <col width="5%" valign="middle" halign="center">
47
+ <col width="5%" valign="middle" halign="center">
48
+ <col width="5%" valign="middle" halign="center">
49
+
50
+ <thead data-hook>
51
+ <tr class="active" data-hook="order_details_line_items_headers">
52
+ <th colspan="2"><%= Spree.t(:item) %></th>
53
+ <th class="price"><%= Spree.t(:price) %></th>
54
+ <th class="qty"><%= Spree.t(:qty) %></th>
55
+ <th class="total"><span><%= Spree.t(:total) %></span></th>
56
+ </tr>
57
+ </thead>
58
+
59
+ <tbody data-hook>
60
+ <% order.line_items.each do |item| %>
61
+ <tr data-hook="order_details_line_item_row">
62
+ <td data-hook="order_item_image">
63
+ <% if item.variant.images.length == 0 %>
64
+ <%= link_to small_image(item.variant.product), item.variant.product %>
65
+ <% else %>
66
+ <%= link_to image_tag(item.variant.images.first.attachment.url(:small)), item.variant.product %>
67
+ <% end %>
68
+ </td>
69
+ <td data-hook="order_item_description">
70
+ <h4><%= item.variant.product.name %></h4>
71
+ <%= truncated_product_description(item.variant.product) %>
72
+ <%= "(" + item.variant.options_text + ")" unless item.variant.option_values.empty? %>
73
+ </td>
74
+ <td data-hook="order_item_price" class="lead text-primary price"><span><%= item.single_money.to_html %></span></td>
75
+ <td data-hook="order_item_qty" class="order-qty"><%= item.quantity %></td>
76
+ <td data-hook="order_item_total" class="lead text-primary total"><span><%= item.display_amount.to_html %></span></td>
77
+ </tr>
78
+ <% end %>
79
+ </tbody>
80
+ <tfoot id="order-total" data-hook="order_details_total">
81
+ <tr class="warning total">
82
+ <td colspan="4" align="right"><b><%= Spree.t(:order_total) %>:</b></td>
83
+ <td class="total"><span id="order_total" class="lead text-primary"><%= order.display_total.to_html %></span></td>
84
+ </tr>
85
+ </tfoot>
86
+
87
+ <tfoot id="subtotal" data-hook="order_details_subtotal">
88
+ <tr class="total" id="subtotal-row">
89
+ <td colspan="4"><b><%= Spree.t(:subtotal) %>:</b></td>
90
+ <td class="total"><span><%= order.display_item_total.to_html %></span></td>
91
+ </tr>
92
+ </tfoot>
93
+
94
+ <% if order.line_item_adjustments.exists? %>
95
+ <% if order.line_item_adjustments.promotion.eligible.exists? %>
96
+ <tfoot id="price-adjustments" data-hook="order_details_price_adjustments">
97
+ <% order.line_item_adjustments.promotion.eligible.group_by(&:label).each do |label, adjustments| %>
98
+ <tr class="total">
99
+ <td colspan="4"><%= Spree.t(:promotion) %>: <strong><%= label %></strong></td>
100
+ <td class="total"><span><%= Spree::Money.new(adjustments.sum(&:amount), currency: order.currency) %></span></td>
101
+ </tr>
102
+ <% end %>
103
+ </tfoot>
104
+ <% end %>
105
+ <% end %>
106
+
107
+ <tfoot id='shipment-total'>
108
+ <% order.shipments.group_by { |s| s.selected_shipping_rate.name }.each do |name, shipments| %>
109
+ <tr class="total" data-hook='shipment-row'>
110
+ <td colspan="4" align="right" class="text-muted"><%= Spree.t(:shipping) %>: <strong><%= name %></strong></td>
111
+ <td class="total"><span><%= Spree::Money.new(shipments.sum(&:discounted_cost), currency: order.currency).to_html %></span></td>
112
+ </tr>
113
+ <% end %>
114
+ </tfoot>
115
+
116
+ <% if order.all_adjustments.tax.exists? %>
117
+ <tfoot id="tax-adjustments" data-hook="order_details_tax_adjustments">
118
+ <% order.all_adjustments.tax.group_by(&:label).each do |label, adjustments| %>
119
+ <tr class="total">
120
+ <td colspan="4" align="right" class="text-muted"><%= Spree.t(:tax) %>: <strong><%= label %></strong></td>
121
+ <td class="total"><span><%= Spree::Money.new(adjustments.sum(&:amount), currency: order.currency) %></span></td>
122
+ </tr>
123
+ <% end %>
124
+ </tfoot>
125
+ <% end %>
126
+
127
+ <tfoot id="order-charges" data-hook="order_details_adjustments">
128
+ <% order.adjustments.eligible.each do |adjustment| %>
129
+ <% next if (adjustment.source_type == 'Spree::TaxRate') and (adjustment.amount == 0) %>
130
+ <tr class="total">
131
+ <td colspan="4" align="right"><strong><%= adjustment.label %></strong></td>
132
+ <td class="total"><span><%= adjustment.display_amount.to_html %></span></td>
133
+ </tr>
134
+ <% end %>
135
+ </tfoot>
136
+ </table>
@@ -0,0 +1,48 @@
1
+ <% content_for :head do %>
2
+ <% if products.respond_to?(:total_pages) %>
3
+ <%= rel_next_prev_link_tags products %>
4
+ <% end %>
5
+ <% end %>
6
+
7
+ <div data-hook="products_search_results_heading">
8
+ <% if products.empty? %>
9
+ <div data-hook="products_search_results_heading_no_results_found">
10
+ <%= Spree.t(:no_products_found) %>
11
+ </div>
12
+ <% elsif params.key?(:keywords) %>
13
+ <div data-hook="products_search_results_heading_results_found">
14
+ <h6 class="search-results-title"><%= Spree.t(:search_results, keywords: h(params[:keywords])) %></h6>
15
+ </div>
16
+ <% end %>
17
+ </div>
18
+
19
+ <% if products.any? %>
20
+ <div id="products" class="row" data-hook>
21
+ <% products.each do |product| %>
22
+ <% url = spree.product_path(product, taxon_id: @taxon.try(:id)) %>
23
+ <div id="product_<%= product.id %>" class="col-md-3 col-sm-6 col-xs-6 product-list-item" data-hook="products_list_item" itemscope itemtype="https://schema.org/Product">
24
+ <div class="panel panel-default">
25
+ <% cache(@taxon.present? ? [I18n.locale, current_currency, @taxon, product] : cache_key_for_product(product)) do %>
26
+ <div class="panel-body text-center product-body">
27
+ <%= link_to url, itemprop: "url" do %>
28
+ <%= small_image(product, itemprop: "image") %><br/>
29
+ <%= content_tag(:span, truncate(product.name, length: 50), class: 'info', itemprop: "name", title: product.name) %>
30
+ <% end %>
31
+ <br/>
32
+ </div>
33
+ <div class="panel-footer text-center">
34
+ <span itemprop="offers" itemscope itemtype="https://schema.org/Offer">
35
+ <span class="price selling lead" itemprop="price"><%= display_price(product) %></span>
36
+ </span>
37
+ </div>
38
+ <% end %>
39
+ </div>
40
+ </div>
41
+ <% end %>
42
+ <% reset_cycle("classes") %>
43
+ </div>
44
+ <% end %>
45
+
46
+ <% if products.respond_to?(:total_pages) %>
47
+ <%= paginate products, theme: 'twitter-bootstrap-3' %>
48
+ <% end %>
@@ -0,0 +1,16 @@
1
+ <% @taxons = @taxon && @taxon.parent ? @taxon.parent.children : Spree::Taxon.roots %>
2
+
3
+ <%= form_tag spree.products_path, :method => :get, class: "navbar-form" do %>
4
+ <div class="form-group">
5
+ <% cache(cache_key_for_taxons) do %>
6
+ <%= select_tag :taxon,
7
+ options_for_select([[Spree.t(:all_departments), '']] +
8
+ @taxons.map {|t| [t.name, t.id]},
9
+ @taxon ? @taxon.id : params[:taxon]), 'aria-label' => 'Taxon', class: "form-control" %>
10
+ <% end %>
11
+ </div>
12
+ <div class="form-group">
13
+ <%= search_field_tag :keywords, params[:keywords], :placeholder => Spree.t(:search), class: "form-control" %>
14
+ </div>
15
+ <%= submit_tag Spree.t(:search), :name => nil, class: "btn btn-success" %>
16
+ <% end %>
@@ -0,0 +1,10 @@
1
+ <% shipments = order.shipments.trackable %>
2
+
3
+ <% if shipments.any? %>
4
+ <h6><%= Spree.t(:tracking) %></h6>
5
+ <div class="tracking">
6
+ <% shipments.each do |shipment| %>
7
+ <%= link_to_tracking(shipment) %>
8
+ <% end %>
9
+ </div>
10
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <aside id="sidebar" class="col-sm-4 col-md-3" data-hook>
2
+ <%= yield :sidebar %>
3
+ </aside>
@@ -0,0 +1,12 @@
1
+ <% max_level = Spree::Config[:max_level_in_taxons_menu] || 1 %>
2
+
3
+ <nav id="taxonomies" class="sidebar-item" data-hook>
4
+ <% @taxonomies.each do |taxonomy| %>
5
+ <% cache [I18n.locale, taxonomy, max_level, @taxon] do %>
6
+ <% if taxonomy.root.children.any? %>
7
+ <h4 class='taxonomy-root'><%= Spree.t(:shop_by_taxonomy, taxonomy: taxonomy.name) %></h4>
8
+ <%= taxons_tree(taxonomy.root, @taxon, max_level) %>
9
+ <% end %>
10
+ <% end %>
11
+ <% end %>
12
+ </nav>
File without changes
File without changes
@@ -0,0 +1 @@
1
+ <%= link_to_cart %>
@@ -0,0 +1,4 @@
1
+ <div class="taxon" data-hook="taxon">
2
+ <h5 class="subtaxon-title"><%= link_to taxon.name, seo_url(taxon), class: 'breadcrumbs' %></h5>
3
+ <%= render partial: 'spree/shared/products', locals: { products: taxon_preview(taxon), taxon: taxon } %>
4
+ </div>
@@ -0,0 +1,20 @@
1
+ <h1 class="taxon-title"><%= @taxon.name %></h1>
2
+
3
+ <% content_for :sidebar do %>
4
+ <div data-hook="taxon_sidebar_navigation">
5
+ <%= render partial: 'spree/shared/taxonomies' %>
6
+ <%= render partial: 'spree/shared/filters' if @taxon.leaf? %>
7
+ </div>
8
+ <% end %>
9
+
10
+ <div data-hook="taxon_products">
11
+ <%= render partial: 'spree/shared/products', locals: { products: @products, taxon: @taxon } %>
12
+ </div>
13
+
14
+ <% unless params[:keywords].present? %>
15
+ <div data-hook="taxon_children">
16
+ <% cache [I18n.locale, @taxon] do %>
17
+ <%= render partial: 'taxon', collection: @taxon.children %>
18
+ <% end %>
19
+ </div>
20
+ <% end %>
@@ -0,0 +1 @@
1
+ Rails.application.config.assets.precompile += %w( favicon.ico credit_cards/* flags/* )
@@ -0,0 +1,15 @@
1
+ CanonicalRails.setup do |config|
2
+ # http://en.wikipedia.org/wiki/URL_normalization
3
+ # Trailing slash represents semantics of a directory, ie a collection view - implying an :index get route;
4
+ # otherwise we have to assume semantics of an instance of a resource type, a member view - implying a :show get route
5
+ #
6
+ # Acts as a whitelist for routes to have trailing slashes
7
+
8
+ config.collection_actions# = [:index]
9
+
10
+ # Parameter spamming can cause index dilution by creating seemingly different URLs with identical or near-identical content.
11
+ # Unless whitelisted, these parameters will be omitted
12
+
13
+ config.whitelisted_parameters = [:keywords, :page, :search, :taxon]
14
+
15
+ end
@@ -0,0 +1,2 @@
1
+ # Spree Configuration
2
+ SESSION_KEY = '_spree_session_id'
data/config/routes.rb ADDED
@@ -0,0 +1,32 @@
1
+ Spree::Core::Engine.add_routes do
2
+
3
+ get '/locale/set', to: 'locale#set'
4
+
5
+ # non-restful checkout stuff
6
+ patch '/checkout/update/:state', to: 'checkout#update', as: :update_checkout
7
+ get '/checkout/:state', to: 'checkout#edit', as: :checkout_state
8
+ get '/checkout', to: 'checkout#edit', as: :checkout
9
+
10
+ populate_redirect = redirect do |params, request|
11
+ request.flash[:error] = Spree.t(:populate_get_error)
12
+ request.referer || '/cart'
13
+ end
14
+
15
+ get '/orders/populate', to: populate_redirect
16
+
17
+ resources :orders, except: [:index, :new, :create, :destroy] do
18
+ post :populate, on: :collection
19
+ end
20
+
21
+ get '/cart', to: 'orders#edit', as: :cart
22
+ patch '/cart', to: 'orders#update', as: :update_cart
23
+ put '/cart/empty', to: 'orders#empty', as: :empty_cart
24
+
25
+ # route globbing for pretty nested taxon and product paths
26
+ get '/t/*id', to: 'taxons#show', as: :nested_taxons
27
+
28
+ get '/unauthorized', to: 'home#unauthorized', as: :unauthorized
29
+ get '/content/cvv', to: 'content#cvv', as: :cvv
30
+ get '/content/*path', to: 'content#show', as: :content
31
+ get '/cart_link', to: 'store#cart_link', as: :cart_link
32
+ end
@@ -0,0 +1,19 @@
1
+ module Spree
2
+ module Frontend
3
+ class Engine < ::Rails::Engine
4
+ config.middleware.use "Spree::Frontend::Middleware::SeoAssist"
5
+
6
+ # sets the manifests / assets to be precompiled, even when initialize_on_precompile is false
7
+ initializer "spree.assets.precompile", group: :all do |app|
8
+ app.config.assets.precompile += %w[
9
+ spree/frontend/all*
10
+ jquery.validate/localization/messages_*
11
+ ]
12
+ end
13
+
14
+ initializer "spree.frontend.environment", before: :load_config_initializers do |app|
15
+ Spree::Frontend::Config = Spree::FrontendConfiguration.new
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,51 @@
1
+ # Make redirects for SEO needs
2
+ module Spree
3
+ module Frontend
4
+ module Middleware
5
+ class SeoAssist
6
+ def initialize(app)
7
+ @app = app
8
+ end
9
+
10
+ def call(env)
11
+ request = Rack::Request.new(env)
12
+ params = request.params
13
+
14
+ taxon_id = params['taxon']
15
+
16
+ #redirect requests using taxon id's to their permalinks
17
+ if !taxon_id.blank? && !taxon_id.is_a?(Hash) && taxon = Taxon.find(taxon_id)
18
+ params.delete('taxon')
19
+
20
+ return build_response(params, "#{request.script_name}t/#{taxon.permalink}" )
21
+ elsif env["PATH_INFO"] =~ /^\/(t|products)(\/\S+)?\/$/
22
+ #ensures no trailing / for taxon and product urls
23
+
24
+ return build_response(params, env["PATH_INFO"][0...-1])
25
+ end
26
+
27
+ @app.call(env)
28
+ end
29
+
30
+ private
31
+
32
+ def build_response(params, location)
33
+ query = build_query(params)
34
+ location += '?' + query unless query.blank?
35
+ [301, { 'Location'=> location }, []]
36
+ end
37
+
38
+ def build_query(params)
39
+ params.map { |k, v|
40
+ if v.class == Array
41
+ build_query(v.map { |x| ["#{k}[]", x] })
42
+ else
43
+ k + "=" + Rack::Utils.escape(v)
44
+ end
45
+ }.join("&")
46
+ end
47
+
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,11 @@
1
+ require 'rails/all'
2
+ require 'sprockets/rails'
3
+
4
+ require 'bootstrap-sass'
5
+ require 'canonical-rails'
6
+ require 'deface'
7
+ require 'jquery-rails'
8
+ require 'spree/core'
9
+ require 'spree/frontend/middleware/seo_assist'
10
+ require 'spree/frontend/engine'
11
+ require 'spree/responder'
@@ -0,0 +1 @@
1
+ require 'spree/frontend'
@@ -0,0 +1,19 @@
1
+ class RakeUtil
2
+
3
+ def self.add_marker(msg)
4
+ puts "#"*30 + " #{msg} " + '#'*30
5
+ end
6
+
7
+ def self.warning(msg)
8
+ puts "#"*50
9
+ puts msg
10
+ puts "#"*50
11
+ end
12
+
13
+ def self.execute(cmd)
14
+ puts cmd
15
+ system cmd
16
+ end
17
+
18
+ end
19
+
@@ -0,0 +1,14 @@
1
+ namespace :spree do
2
+ desc "Resets all taxon permalinks"
3
+ task :reset_taxon_permalinks => :environment do
4
+ Spree::Taxon.where(:parent_id => nil).each {|taxon| redo_permalinks(taxon) }
5
+ end
6
+
7
+ def redo_permalinks(taxon)
8
+ taxon.permalink = nil
9
+ puts "#{taxon.permalink} => #{taxon.set_permalink}"
10
+ taxon.save
11
+
12
+ taxon.children.each { |t| redo_permalinks(t) }
13
+ end
14
+ end
data/script/rails ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ ENGINE_ROOT = File.expand_path('../..', __FILE__)
5
+ ENGINE_PATH = File.expand_path('../../lib/spree/frontend/engine', __FILE__)
6
+
7
+ require 'rails/all'
8
+ require 'rails/engine/commands'
9
+
Binary file
@@ -0,0 +1,28 @@
1
+ # encoding: UTF-8
2
+ require_relative '../core/lib/spree/core/version.rb'
3
+
4
+ Gem::Specification.new do |s|
5
+ s.platform = Gem::Platform::RUBY
6
+ s.name = 'goca-spree-frontend'
7
+ s.version = Spree.version
8
+ s.summary = 'Frontend e-commerce functionality for the Spree project.'
9
+ s.description = s.summary
10
+
11
+ s.author = 'Sean Schofield'
12
+ s.email = 'sean@spreecommerce.com'
13
+ s.homepage = 'https://spreecommerce.com'
14
+ s.license = 'BSD-3'
15
+
16
+ s.files = `git ls-files`.split("\n").reject { |f| f.match(/^spec/) && !f.match(/^spec\/fixtures/) }
17
+ s.require_path = 'lib'
18
+ s.requirements << 'none'
19
+
20
+ s.add_dependency 'goca-spree-api', s.version
21
+ s.add_dependency 'goca-spree-core', s.version
22
+
23
+ s.add_dependency 'bootstrap-sass', '>= 3.3.5.1', '< 3.4'
24
+ s.add_dependency 'canonical-rails', '~> 0.2.0'
25
+ s.add_dependency 'jquery-rails', '~> 4.1'
26
+
27
+ s.add_development_dependency 'capybara-accessible'
28
+ end
@@ -0,0 +1,12 @@
1
+ /*!
2
+ * jQuery Validation Plugin 1.11.1
3
+ *
4
+ * http://bassistance.de/jquery-plugins/jquery-plugin-validation/
5
+ * http://docs.jquery.com/Plugins/Validation
6
+ *
7
+ * Copyright 2013 Jörn Zaefferer
8
+ * Released under the MIT license:
9
+ * http://www.opensource.org/licenses/mit-license.php
10
+ */
11
+
12
+ !function(){function stripHtml(value){return value.replace(/<.[^<>]*?>/g," ").replace(/&nbsp;|&#160;/gi," ").replace(/[.(),;:!?%#$'"_+=\/\-]*/g,"")}jQuery.validator.addMethod("maxWords",function(value,element,params){return this.optional(element)||stripHtml(value).match(/\b\w+\b/g).length<=params},jQuery.validator.format("Please enter {0} words or less."));jQuery.validator.addMethod("minWords",function(value,element,params){return this.optional(element)||stripHtml(value).match(/\b\w+\b/g).length>=params},jQuery.validator.format("Please enter at least {0} words."));jQuery.validator.addMethod("rangeWords",function(value,element,params){var valueStripped=stripHtml(value);var regex=/\b\w+\b/g;return this.optional(element)||valueStripped.match(regex).length>=params[0]&&valueStripped.match(regex).length<=params[1]},jQuery.validator.format("Please enter between {0} and {1} words."))}();jQuery.validator.addMethod("letterswithbasicpunc",function(value,element){return this.optional(element)||/^[a-z\-.,()'"\s]+$/i.test(value)},"Letters or punctuation only please");jQuery.validator.addMethod("alphanumeric",function(value,element){return this.optional(element)||/^\w+$/i.test(value)},"Letters, numbers, and underscores only please");jQuery.validator.addMethod("lettersonly",function(value,element){return this.optional(element)||/^[a-z]+$/i.test(value)},"Letters only please");jQuery.validator.addMethod("nowhitespace",function(value,element){return this.optional(element)||/^\S+$/i.test(value)},"No white space please");jQuery.validator.addMethod("ziprange",function(value,element){return this.optional(element)||/^90[2-5]\d\{2\}-\d{4}$/.test(value)},"Your ZIP-code must be in the range 902xx-xxxx to 905-xx-xxxx");jQuery.validator.addMethod("zipcodeUS",function(value,element){return this.optional(element)||/\d{5}-\d{4}$|^\d{5}$/.test(value)},"The specified US ZIP Code is invalid");jQuery.validator.addMethod("integer",function(value,element){return this.optional(element)||/^-?\d+$/.test(value)},"A positive or negative non-decimal number please");jQuery.validator.addMethod("vinUS",function(v){if(v.length!==17){return false}var i,n,d,f,cd,cdv;var LL=["A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z"];var VL=[1,2,3,4,5,6,7,8,1,2,3,4,5,7,9,2,3,4,5,6,7,8,9];var FL=[8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2];var rs=0;for(i=0;i<17;i++){f=FL[i];d=v.slice(i,i+1);if(i===8){cdv=d}if(!isNaN(d)){d*=f}else{for(n=0;n<LL.length;n++){if(d.toUpperCase()===LL[n]){d=VL[n];d*=f;if(isNaN(cdv)&&n===8){cdv=LL[n]}break}}}rs+=d}cd=rs%11;if(cd===10){cd="X"}if(cd===cdv){return true}return false},"The specified vehicle identification number (VIN) is invalid.");jQuery.validator.addMethod("dateITA",function(value,element){var check=false;var re=/^\d{1,2}\/\d{1,2}\/\d{4}$/;if(re.test(value)){var adata=value.split("/");var gg=parseInt(adata[0],10);var mm=parseInt(adata[1],10);var aaaa=parseInt(adata[2],10);var xdata=new Date(aaaa,mm-1,gg);if(xdata.getFullYear()===aaaa&&xdata.getMonth()===mm-1&&xdata.getDate()===gg){check=true}else{check=false}}else{check=false}return this.optional(element)||check},"Please enter a correct date");jQuery.validator.addMethod("iban",function(value,element){if(this.optional(element)){return true}if(!/^([a-zA-Z0-9]{4} ){2,8}[a-zA-Z0-9]{1,4}|[a-zA-Z0-9]{12,34}$/.test(value)){return false}var iban=value.replace(/ /g,"").toUpperCase();var countrycode=iban.substring(0,2);var bbancountrypatterns={AL:"\\d{8}[\\dA-Z]{16}",AD:"\\d{8}[\\dA-Z]{12}",AT:"\\d{16}",AZ:"[\\dA-Z]{4}\\d{20}",BE:"\\d{12}",BH:"[A-Z]{4}[\\dA-Z]{14}",BA:"\\d{16}",BR:"\\d{23}[A-Z][\\dA-Z]",BG:"[A-Z]{4}\\d{6}[\\dA-Z]{8}",CR:"\\d{17}",HR:"\\d{17}",CY:"\\d{8}[\\dA-Z]{16}",CZ:"\\d{20}",DK:"\\d{14}",DO:"[A-Z]{4}\\d{20}",EE:"\\d{16}",FO:"\\d{14}",FI:"\\d{14}",FR:"\\d{10}[\\dA-Z]{11}\\d{2}",GE:"[\\dA-Z]{2}\\d{16}",DE:"\\d{18}",GI:"[A-Z]{4}[\\dA-Z]{15}",GR:"\\d{7}[\\dA-Z]{16}",GL:"\\d{14}",GT:"[\\dA-Z]{4}[\\dA-Z]{20}",HU:"\\d{24}",IS:"\\d{22}",IE:"[\\dA-Z]{4}\\d{14}",IL:"\\d{19}",IT:"[A-Z]\\d{10}[\\dA-Z]{12}",KZ:"\\d{3}[\\dA-Z]{13}",KW:"[A-Z]{4}[\\dA-Z]{22}",LV:"[A-Z]{4}[\\dA-Z]{13}",LB:"\\d{4}[\\dA-Z]{20}",LI:"\\d{5}[\\dA-Z]{12}",LT:"\\d{16}",LU:"\\d{3}[\\dA-Z]{13}",MK:"\\d{3}[\\dA-Z]{10}\\d{2}",MT:"[A-Z]{4}\\d{5}[\\dA-Z]{18}",MR:"\\d{23}",MU:"[A-Z]{4}\\d{19}[A-Z]{3}",MC:"\\d{10}[\\dA-Z]{11}\\d{2}",MD:"[\\dA-Z]{2}\\d{18}",ME:"\\d{18}",NL:"[A-Z]{4}\\d{10}",NO:"\\d{11}",PK:"[\\dA-Z]{4}\\d{16}",PS:"[\\dA-Z]{4}\\d{21}",PL:"\\d{24}",PT:"\\d{21}",RO:"[A-Z]{4}[\\dA-Z]{16}",SM:"[A-Z]\\d{10}[\\dA-Z]{12}",SA:"\\d{2}[\\dA-Z]{18}",RS:"\\d{18}",SK:"\\d{20}",SI:"\\d{15}",ES:"\\d{20}",SE:"\\d{20}",CH:"\\d{5}[\\dA-Z]{12}",TN:"\\d{20}",TR:"\\d{5}[\\dA-Z]{17}",AE:"\\d{3}\\d{16}",GB:"[A-Z]{4}\\d{14}",VG:"[\\dA-Z]{4}\\d{16}"};var bbanpattern=bbancountrypatterns[countrycode];if(typeof bbanpattern!=="undefined"){var ibanregexp=new RegExp("^[A-Z]{2}\\d{2}"+bbanpattern+"$","");if(!ibanregexp.test(iban)){return false}}var ibancheck=iban.substring(4,iban.length)+iban.substring(0,4);var ibancheckdigits="";var leadingZeroes=true;var charAt;for(var i=0;i<ibancheck.length;i++){charAt=ibancheck.charAt(i);if(charAt!=="0"){leadingZeroes=false}if(!leadingZeroes){ibancheckdigits+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(charAt)}}var cRest="";var cOperator="";for(var p=0;p<ibancheckdigits.length;p++){var cChar=ibancheckdigits.charAt(p);cOperator=""+cRest+""+cChar;cRest=cOperator%97}return cRest===1},"Please specify a valid IBAN");jQuery.validator.addMethod("dateNL",function(value,element){return this.optional(element)||/^(0?[1-9]|[12]\d|3[01])[\.\/\-](0?[1-9]|1[012])[\.\/\-]([12]\d)?(\d\d)$/.test(value)},"Please enter a correct date");jQuery.validator.addMethod("phoneNL",function(value,element){return this.optional(element)||/^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)[1-9]((\s|\s?\-\s?)?[0-9]){8}$/.test(value)},"Please specify a valid phone number.");jQuery.validator.addMethod("mobileNL",function(value,element){return this.optional(element)||/^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)6((\s|\s?\-\s?)?[0-9]){8}$/.test(value)},"Please specify a valid mobile number");jQuery.validator.addMethod("postalcodeNL",function(value,element){return this.optional(element)||/^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/.test(value)},"Please specify a valid postal code");jQuery.validator.addMethod("bankaccountNL",function(value,element){if(this.optional(element)){return true}if(!/^[0-9]{9}|([0-9]{2} ){3}[0-9]{3}$/.test(value)){return false}var account=value.replace(/ /g,"");var sum=0;var len=account.length;for(var pos=0;pos<len;pos++){var factor=len-pos;var digit=account.substring(pos,pos+1);sum=sum+factor*digit}return sum%11===0},"Please specify a valid bank account number");jQuery.validator.addMethod("giroaccountNL",function(value,element){return this.optional(element)||/^[0-9]{1,7}$/.test(value)},"Please specify a valid giro account number");jQuery.validator.addMethod("bankorgiroaccountNL",function(value,element){return this.optional(element)||$.validator.methods["bankaccountNL"].call(this,value,element)||$.validator.methods["giroaccountNL"].call(this,value,element)},"Please specify a valid bank or giro account number");jQuery.validator.addMethod("time",function(value,element){return this.optional(element)||/^([01]\d|2[0-3])(:[0-5]\d){1,2}$/.test(value)},"Please enter a valid time, between 00:00 and 23:59");jQuery.validator.addMethod("time12h",function(value,element){return this.optional(element)||/^((0?[1-9]|1[012])(:[0-5]\d){1,2}(\ ?[AP]M))$/i.test(value)},"Please enter a valid time in 12-hour am/pm format");jQuery.validator.addMethod("phoneUS",function(phone_number,element){phone_number=phone_number.replace(/\s+/g,"");return this.optional(element)||phone_number.length>9&&phone_number.match(/^(\+?1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/)},"Please specify a valid phone number");jQuery.validator.addMethod("phoneUK",function(phone_number,element){phone_number=phone_number.replace(/\(|\)|\s+|-/g,"");return this.optional(element)||phone_number.length>9&&phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?)|(?:\(?0))(?:\d{2}\)?\s?\d{4}\s?\d{4}|\d{3}\)?\s?\d{3}\s?\d{3,4}|\d{4}\)?\s?(?:\d{5}|\d{3}\s?\d{3})|\d{5}\)?\s?\d{4,5})$/)},"Please specify a valid phone number");jQuery.validator.addMethod("mobileUK",function(phone_number,element){phone_number=phone_number.replace(/\(|\)|\s+|-/g,"");return this.optional(element)||phone_number.length>9&&phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?|0)7(?:[45789]\d{2}|624)\s?\d{3}\s?\d{3})$/)},"Please specify a valid mobile number");jQuery.validator.addMethod("phonesUK",function(phone_number,element){phone_number=phone_number.replace(/\(|\)|\s+|-/g,"");return this.optional(element)||phone_number.length>9&&phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[45789]\d{8}|624\d{6})))$/)},"Please specify a valid uk phone number");jQuery.validator.addMethod("postcodeUK",function(value,element){return this.optional(element)||/^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\s?([0-9][ABD-HJLNP-UW-Z]{2})|(GIR)\s?(0AA))$/i.test(value)},"Please specify a valid UK postcode");jQuery.validator.addMethod("strippedminlength",function(value,element,param){return jQuery(value).text().length>=param},jQuery.validator.format("Please enter at least {0} characters"));jQuery.validator.addMethod("email2",function(value,element,param){return this.optional(element)||/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value)},jQuery.validator.messages.email);jQuery.validator.addMethod("url2",function(value,element,param){return this.optional(element)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value)},jQuery.validator.messages.url);jQuery.validator.addMethod("creditcardtypes",function(value,element,param){if(/[^0-9\-]+/.test(value)){return false}value=value.replace(/\D/g,"");var validTypes=0;if(param.mastercard){validTypes|=1}if(param.visa){validTypes|=2}if(param.amex){validTypes|=4}if(param.dinersclub){validTypes|=8}if(param.enroute){validTypes|=16}if(param.discover){validTypes|=32}if(param.jcb){validTypes|=64}if(param.unknown){validTypes|=128}if(param.all){validTypes=1|2|4|8|16|32|64|128}if(validTypes&1&&/^(5[12345])/.test(value)){return value.length===16}if(validTypes&2&&/^(4)/.test(value)){return value.length===16}if(validTypes&4&&/^(3[47])/.test(value)){return value.length===15}if(validTypes&8&&/^(3(0[012345]|[68]))/.test(value)){return value.length===14}if(validTypes&16&&/^(2(014|149))/.test(value)){return value.length===15}if(validTypes&32&&/^(6011)/.test(value)){return value.length===16}if(validTypes&64&&/^(3)/.test(value)){return value.length===16}if(validTypes&64&&/^(2131|1800)/.test(value)){return value.length===15}if(validTypes&128){return true}return false},"Please enter a valid credit card number.");jQuery.validator.addMethod("ipv4",function(value,element,param){return this.optional(element)||/^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/i.test(value)},"Please enter a valid IP v4 address.");jQuery.validator.addMethod("ipv6",function(value,element,param){return this.optional(element)||/^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(value)},"Please enter a valid IP v6 address.");jQuery.validator.addMethod("pattern",function(value,element,param){if(this.optional(element)){return true}if(typeof param==="string"){param=new RegExp("^(?:"+param+")$")}return param.test(value)},"Invalid format.");jQuery.validator.addMethod("require_from_group",function(value,element,options){var validator=this;var selector=options[1];var validOrNot=$(selector,element.form).filter(function(){return validator.elementValue(this)}).length>=options[0];if(!$(element).data("being_validated")){var fields=$(selector,element.form);fields.data("being_validated",true);fields.valid();fields.data("being_validated",false)}return validOrNot},jQuery.format("Please fill at least {0} of these fields."));jQuery.validator.addMethod("skip_or_fill_minimum",function(value,element,options){var validator=this,numberRequired=options[0],selector=options[1];var numberFilled=$(selector,element.form).filter(function(){return validator.elementValue(this)}).length;var valid=numberFilled>=numberRequired||numberFilled===0;if(!$(element).data("being_validated")){var fields=$(selector,element.form);fields.data("being_validated",true);fields.valid();fields.data("being_validated",false)}return valid},jQuery.format("Please either skip these fields or fill at least {0} of them."));jQuery.validator.addMethod("accept",function(value,element,param){var typeParam=typeof param==="string"?param.replace(/\s/g,"").replace(/,/g,"|"):"image/*",optionalValue=this.optional(element),i,file;if(optionalValue){return optionalValue}if($(element).attr("type")==="file"){typeParam=typeParam.replace(/\*/g,".*");if(element.files&&element.files.length){for(i=0;i<element.files.length;i++){file=element.files[i];if(!file.type.match(new RegExp(".?("+typeParam+")$","i"))){return false}}}}return true},jQuery.format("Please enter a value with a valid mimetype."));jQuery.validator.addMethod("extension",function(value,element,param){param=typeof param==="string"?param.replace(/,/g,"|"):"png|jpe?g|gif";return this.optional(element)||value.match(new RegExp(".("+param+")$","i"))},jQuery.format("Please enter a value with a valid extension."));