tr8n 3.0.5 → 3.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (690) hide show
  1. data/.gitignore +17 -0
  2. data/.rvmrc +1 -0
  3. data/Gemfile +12 -6
  4. data/Gemfile.lock +143 -60
  5. data/MIT-LICENSE +20 -0
  6. data/Rakefile +39 -22
  7. data/{lib/tasks → app/assets/images/tr8n}/.gitkeep +0 -0
  8. data/{public/tr8n/images → app/assets/images/tr8n}/accept.png +0 -0
  9. data/{public/tr8n/images → app/assets/images/tr8n}/action_tab_bkgd.gif +0 -0
  10. data/{public/tr8n/images → app/assets/images/tr8n}/action_tab_white_bkgd.gif +0 -0
  11. data/{public/tr8n/images → app/assets/images/tr8n}/add.png +0 -0
  12. data/{public/tr8n/images → app/assets/images/tr8n}/arrow_down.gif +0 -0
  13. data/{public/tr8n/images → app/assets/images/tr8n}/arrow_down.png +0 -0
  14. data/{public/tr8n/images → app/assets/images/tr8n}/arrow_down_grey.png +0 -0
  15. data/{public/tr8n/images → app/assets/images/tr8n}/arrow_right.gif +0 -0
  16. data/{public/tr8n/images → app/assets/images/tr8n}/arrow_up.png +0 -0
  17. data/{public/tr8n/images → app/assets/images/tr8n}/arrow_up_grey.png +0 -0
  18. data/{public/tr8n/images → app/assets/images/tr8n}/bullet_go.png +0 -0
  19. data/{public/tr8n/images → app/assets/images/tr8n}/buttons.png +0 -0
  20. data/{public/tr8n/images → app/assets/images/tr8n}/cancel.png +0 -0
  21. data/app/assets/images/tr8n/checkmark.png +0 -0
  22. data/{public/tr8n/images → app/assets/images/tr8n}/close.gif +0 -0
  23. data/{public/tr8n/images → app/assets/images/tr8n}/cross.png +0 -0
  24. data/{public/tr8n/images → app/assets/images/tr8n}/delete.png +0 -0
  25. data/{public/tr8n/images → app/assets/images/tr8n}/disk.png +0 -0
  26. data/app/assets/images/tr8n/error.png +0 -0
  27. data/{public/tr8n/images → app/assets/images/tr8n}/examples/context_rules_1.png +0 -0
  28. data/{public/tr8n/images → app/assets/images/tr8n}/examples/context_rules_2.png +0 -0
  29. data/{public/tr8n/images → app/assets/images/tr8n}/examples/date_rules_1.png +0 -0
  30. data/{public/tr8n/images → app/assets/images/tr8n}/examples/date_rules_2.png +0 -0
  31. data/{public/tr8n/images → app/assets/images/tr8n}/examples/date_rules_3.png +0 -0
  32. data/{public/tr8n/images → app/assets/images/tr8n}/examples/gender_rules_1.png +0 -0
  33. data/{public/tr8n/images → app/assets/images/tr8n}/examples/gender_rules_2.png +0 -0
  34. data/{public/tr8n/images → app/assets/images/tr8n}/examples/gender_rules_3.png +0 -0
  35. data/{public/tr8n/images → app/assets/images/tr8n}/examples/language_manager_1.png +0 -0
  36. data/{public/tr8n/images → app/assets/images/tr8n}/examples/list_rules_1.png +0 -0
  37. data/{public/tr8n/images → app/assets/images/tr8n}/examples/list_rules_2.png +0 -0
  38. data/{public/tr8n/images → app/assets/images/tr8n}/examples/list_rules_3.png +0 -0
  39. data/{public/tr8n/images → app/assets/images/tr8n}/examples/numeric_rules_1.png +0 -0
  40. data/{public/tr8n/images → app/assets/images/tr8n}/examples/numeric_rules_2.png +0 -0
  41. data/{public/tr8n/images → app/assets/images/tr8n}/examples/numeric_rules_3.png +0 -0
  42. data/{public/tr8n/images → app/assets/images/tr8n}/examples/numeric_rules_4.png +0 -0
  43. data/{public/tr8n/images → app/assets/images/tr8n}/exclamation.png +0 -0
  44. data/{public/tr8n/images → app/assets/images/tr8n}/eye.png +0 -0
  45. data/{public/tr8n/images → app/assets/images/tr8n}/eye_not.png +0 -0
  46. data/{public/tr8n/images → app/assets/images/tr8n}/facebook/connect_light_medium_long.gif +0 -0
  47. data/{public/tr8n/images → app/assets/images/tr8n}/field_sprite.gif +0 -0
  48. data/{public/tr8n/images → app/assets/images/tr8n}/find.png +0 -0
  49. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ab.png +0 -0
  50. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ach.png +0 -0
  51. data/{public/tr8n/images → app/assets/images/tr8n}/flags/af.png +0 -0
  52. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ak.png +0 -0
  53. data/{public/tr8n/images → app/assets/images/tr8n}/flags/am.png +0 -0
  54. data/{public/tr8n/images → app/assets/images/tr8n}/flags/an.png +0 -0
  55. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-AE.png +0 -0
  56. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-BH.png +0 -0
  57. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-DZ.png +0 -0
  58. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-EG.png +0 -0
  59. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-IQ.png +0 -0
  60. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-JO.png +0 -0
  61. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-KW.png +0 -0
  62. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-LB.png +0 -0
  63. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-LY.png +0 -0
  64. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-MA.png +0 -0
  65. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-OM.png +0 -0
  66. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-QA.png +0 -0
  67. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-SA.png +0 -0
  68. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-SY.png +0 -0
  69. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-TN.png +0 -0
  70. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-YE.png +0 -0
  71. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar.png +0 -0
  72. data/{public/tr8n/images → app/assets/images/tr8n}/flags/as.png +0 -0
  73. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ast.png +0 -0
  74. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ay.png +0 -0
  75. data/{public/tr8n/images → app/assets/images/tr8n}/flags/az.png +0 -0
  76. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ba.png +0 -0
  77. data/{public/tr8n/images → app/assets/images/tr8n}/flags/be.png +0 -0
  78. data/{public/tr8n/images → app/assets/images/tr8n}/flags/bg.png +0 -0
  79. data/{public/tr8n/images → app/assets/images/tr8n}/flags/bh.png +0 -0
  80. data/{public/tr8n/images → app/assets/images/tr8n}/flags/bn.png +0 -0
  81. data/{public/tr8n/images → app/assets/images/tr8n}/flags/bo.png +0 -0
  82. data/{public/tr8n/images → app/assets/images/tr8n}/flags/br.png +0 -0
  83. data/{public/tr8n/images → app/assets/images/tr8n}/flags/bs.png +0 -0
  84. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ca.png +0 -0
  85. data/{public/tr8n/images → app/assets/images/tr8n}/flags/cb.png +0 -0
  86. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ce.png +0 -0
  87. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ch.png +0 -0
  88. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ck-US.png +0 -0
  89. data/{public/tr8n/images → app/assets/images/tr8n}/flags/co.png +0 -0
  90. data/{public/tr8n/images → app/assets/images/tr8n}/flags/cr.png +0 -0
  91. data/{public/tr8n/images → app/assets/images/tr8n}/flags/cs.png +0 -0
  92. data/{public/tr8n/images → app/assets/images/tr8n}/flags/cv.png +0 -0
  93. data/{public/tr8n/images → app/assets/images/tr8n}/flags/cy.png +0 -0
  94. data/{public/tr8n/images → app/assets/images/tr8n}/flags/da.png +0 -0
  95. data/{public/tr8n/images → app/assets/images/tr8n}/flags/de-AT.png +0 -0
  96. data/{public/tr8n/images → app/assets/images/tr8n}/flags/de-CH.png +0 -0
  97. data/{public/tr8n/images → app/assets/images/tr8n}/flags/de-DE.png +0 -0
  98. data/{public/tr8n/images → app/assets/images/tr8n}/flags/de-LI.png +0 -0
  99. data/{public/tr8n/images → app/assets/images/tr8n}/flags/de-LU.png +0 -0
  100. data/{public/tr8n/images → app/assets/images/tr8n}/flags/de.png +0 -0
  101. data/{public/tr8n/images → app/assets/images/tr8n}/flags/el.png +0 -0
  102. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-AU.png +0 -0
  103. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-BZ.png +0 -0
  104. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-CA.png +0 -0
  105. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-IE.png +0 -0
  106. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-JM.png +0 -0
  107. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-NZ.png +0 -0
  108. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-PH.png +0 -0
  109. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-PI.png +0 -0
  110. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-SC.png +0 -0
  111. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-UK.png +0 -0
  112. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-US.png +0 -0
  113. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-ZA.png +0 -0
  114. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-ZW.png +0 -0
  115. data/{public/tr8n/images → app/assets/images/tr8n}/flags/en.png +0 -0
  116. data/{public/tr8n/images → app/assets/images/tr8n}/flags/eo.png +0 -0
  117. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-AR.png +0 -0
  118. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-BO.png +0 -0
  119. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-CL.png +0 -0
  120. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-CO.png +0 -0
  121. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-CR.png +0 -0
  122. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-DO.png +0 -0
  123. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-EC.png +0 -0
  124. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-ES.png +0 -0
  125. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-GT.png +0 -0
  126. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-HN.png +0 -0
  127. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-MX.png +0 -0
  128. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-NI.png +0 -0
  129. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-PA.png +0 -0
  130. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-PE.png +0 -0
  131. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-PR.png +0 -0
  132. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-PY.png +0 -0
  133. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-SV.png +0 -0
  134. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-UY.png +0 -0
  135. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-VE.png +0 -0
  136. data/{public/tr8n/images → app/assets/images/tr8n}/flags/es.png +0 -0
  137. data/{public/tr8n/images → app/assets/images/tr8n}/flags/et.png +0 -0
  138. data/{public/tr8n/images → app/assets/images/tr8n}/flags/eu.png +0 -0
  139. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fa-IR.png +0 -0
  140. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fa.png +0 -0
  141. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fb-LT.png +0 -0
  142. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fi.png +0 -0
  143. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fj.png +0 -0
  144. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fo.png +0 -0
  145. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fr-BE.png +0 -0
  146. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fr-CA.png +0 -0
  147. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fr-CH.png +0 -0
  148. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fr-FR.png +0 -0
  149. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fr-LU.png +0 -0
  150. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fr-MC.png +0 -0
  151. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fr.png +0 -0
  152. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fur.png +0 -0
  153. data/{public/tr8n/images → app/assets/images/tr8n}/flags/fy.png +0 -0
  154. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ga.png +0 -0
  155. data/{public/tr8n/images → app/assets/images/tr8n}/flags/gd.png +0 -0
  156. data/{public/tr8n/images → app/assets/images/tr8n}/flags/gl.png +0 -0
  157. data/{public/tr8n/images → app/assets/images/tr8n}/flags/gn.png +0 -0
  158. data/{public/tr8n/images → app/assets/images/tr8n}/flags/gu.png +0 -0
  159. data/{public/tr8n/images → app/assets/images/tr8n}/flags/gv.png +0 -0
  160. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ha.png +0 -0
  161. data/{public/tr8n/images → app/assets/images/tr8n}/flags/haw.png +0 -0
  162. data/{public/tr8n/images → app/assets/images/tr8n}/flags/he.png +0 -0
  163. data/{public/tr8n/images → app/assets/images/tr8n}/flags/hi.png +0 -0
  164. data/{public/tr8n/images → app/assets/images/tr8n}/flags/hr.png +0 -0
  165. data/{public/tr8n/images → app/assets/images/tr8n}/flags/hsb.png +0 -0
  166. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ht.png +0 -0
  167. data/{public/tr8n/images → app/assets/images/tr8n}/flags/hu.png +0 -0
  168. data/{public/tr8n/images → app/assets/images/tr8n}/flags/hy.png +0 -0
  169. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ia.png +0 -0
  170. data/{public/tr8n/images → app/assets/images/tr8n}/flags/id.png +0 -0
  171. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ie.png +0 -0
  172. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ig.png +0 -0
  173. data/{public/tr8n/images → app/assets/images/tr8n}/flags/is.png +0 -0
  174. data/{public/tr8n/images → app/assets/images/tr8n}/flags/it-CH.png +0 -0
  175. data/{public/tr8n/images → app/assets/images/tr8n}/flags/it.png +0 -0
  176. data/{public/tr8n/images → app/assets/images/tr8n}/flags/iu.png +0 -0
  177. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ja.png +0 -0
  178. data/{public/tr8n/images → app/assets/images/tr8n}/flags/jw.png +0 -0
  179. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ka.png +0 -0
  180. data/{public/tr8n/images → app/assets/images/tr8n}/flags/kk.png +0 -0
  181. data/{public/tr8n/images → app/assets/images/tr8n}/flags/kl.png +0 -0
  182. data/{public/tr8n/images → app/assets/images/tr8n}/flags/km.png +0 -0
  183. data/{public/tr8n/images → app/assets/images/tr8n}/flags/kn.png +0 -0
  184. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ko-KP.png +0 -0
  185. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ko-KR.png +0 -0
  186. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ko.png +0 -0
  187. data/{public/tr8n/images → app/assets/images/tr8n}/flags/kok.png +0 -0
  188. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ks.png +0 -0
  189. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ku.png +0 -0
  190. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ky.png +0 -0
  191. data/{public/tr8n/images → app/assets/images/tr8n}/flags/la.png +0 -0
  192. data/{public/tr8n/images → app/assets/images/tr8n}/flags/lb.png +0 -0
  193. data/{public/tr8n/images → app/assets/images/tr8n}/flags/lg.png +0 -0
  194. data/{public/tr8n/images → app/assets/images/tr8n}/flags/li-NL.png +0 -0
  195. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ln.png +0 -0
  196. data/{public/tr8n/images → app/assets/images/tr8n}/flags/lo.png +0 -0
  197. data/{public/tr8n/images → app/assets/images/tr8n}/flags/lt.png +0 -0
  198. data/{public/tr8n/images → app/assets/images/tr8n}/flags/lv.png +0 -0
  199. data/{public/tr8n/images → app/assets/images/tr8n}/flags/md.png +0 -0
  200. data/{public/tr8n/images → app/assets/images/tr8n}/flags/mfe.png +0 -0
  201. data/{public/tr8n/images → app/assets/images/tr8n}/flags/mg.png +0 -0
  202. data/{public/tr8n/images → app/assets/images/tr8n}/flags/mh.png +0 -0
  203. data/{public/tr8n/images → app/assets/images/tr8n}/flags/mi.png +0 -0
  204. data/{public/tr8n/images → app/assets/images/tr8n}/flags/mk.png +0 -0
  205. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ml.png +0 -0
  206. data/{public/tr8n/images → app/assets/images/tr8n}/flags/mn.png +0 -0
  207. data/{public/tr8n/images → app/assets/images/tr8n}/flags/mo.png +0 -0
  208. data/{public/tr8n/images → app/assets/images/tr8n}/flags/mr.png +0 -0
  209. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ms.png +0 -0
  210. data/{public/tr8n/images → app/assets/images/tr8n}/flags/mt.png +0 -0
  211. data/{public/tr8n/images → app/assets/images/tr8n}/flags/my.png +0 -0
  212. data/{public/tr8n/images → app/assets/images/tr8n}/flags/na.png +0 -0
  213. data/{public/tr8n/images → app/assets/images/tr8n}/flags/nb.png +0 -0
  214. data/{public/tr8n/images → app/assets/images/tr8n}/flags/nd.png +0 -0
  215. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ne.png +0 -0
  216. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ng.png +0 -0
  217. data/{public/tr8n/images → app/assets/images/tr8n}/flags/nl-NE.png +0 -0
  218. data/{public/tr8n/images → app/assets/images/tr8n}/flags/nl.png +0 -0
  219. data/{public/tr8n/images → app/assets/images/tr8n}/flags/nn.png +0 -0
  220. data/{public/tr8n/images → app/assets/images/tr8n}/flags/no.png +0 -0
  221. data/{public/tr8n/images → app/assets/images/tr8n}/flags/nr.png +0 -0
  222. data/{public/tr8n/images → app/assets/images/tr8n}/flags/nso.png +0 -0
  223. data/{public/tr8n/images → app/assets/images/tr8n}/flags/nv.png +0 -0
  224. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ny.png +0 -0
  225. data/{public/tr8n/images → app/assets/images/tr8n}/flags/nyn.png +0 -0
  226. data/{public/tr8n/images → app/assets/images/tr8n}/flags/oc.png +0 -0
  227. data/{public/tr8n/images → app/assets/images/tr8n}/flags/om.png +0 -0
  228. data/{public/tr8n/images → app/assets/images/tr8n}/flags/or.png +0 -0
  229. data/{public/tr8n/images → app/assets/images/tr8n}/flags/pa-IN.png +0 -0
  230. data/{public/tr8n/images → app/assets/images/tr8n}/flags/pa-PK.png +0 -0
  231. data/{public/tr8n/images → app/assets/images/tr8n}/flags/pa.png +0 -0
  232. data/{public/tr8n/images → app/assets/images/tr8n}/flags/pf.png +0 -0
  233. data/{public/tr8n/images → app/assets/images/tr8n}/flags/pl.png +0 -0
  234. data/{public/tr8n/images → app/assets/images/tr8n}/flags/pp.png +0 -0
  235. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ps.png +0 -0
  236. data/{public/tr8n/images → app/assets/images/tr8n}/flags/pt-BZ.png +0 -0
  237. data/{public/tr8n/images → app/assets/images/tr8n}/flags/pt.png +0 -0
  238. data/{public/tr8n/images → app/assets/images/tr8n}/flags/qu-PE.png +0 -0
  239. data/{public/tr8n/images → app/assets/images/tr8n}/flags/qu.png +0 -0
  240. data/{public/tr8n/images → app/assets/images/tr8n}/flags/rj.png +0 -0
  241. data/{public/tr8n/images → app/assets/images/tr8n}/flags/rm.png +0 -0
  242. data/{public/tr8n/images → app/assets/images/tr8n}/flags/rn.png +0 -0
  243. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ro-MD.png +0 -0
  244. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ro-RO.png +0 -0
  245. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ro.png +0 -0
  246. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ru.png +0 -0
  247. data/{public/tr8n/images → app/assets/images/tr8n}/flags/rw.png +0 -0
  248. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sa.png +0 -0
  249. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sc.png +0 -0
  250. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sd.png +0 -0
  251. data/{public/tr8n/images → app/assets/images/tr8n}/flags/se-NO.png +0 -0
  252. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sg.png +0 -0
  253. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sh.png +0 -0
  254. data/{public/tr8n/images → app/assets/images/tr8n}/flags/si.png +0 -0
  255. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sk.png +0 -0
  256. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sl.png +0 -0
  257. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sm.png +0 -0
  258. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sn.png +0 -0
  259. data/{public/tr8n/images → app/assets/images/tr8n}/flags/so.png +0 -0
  260. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sq.png +0 -0
  261. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sr-me.png +0 -0
  262. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sr.png +0 -0
  263. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ss.png +0 -0
  264. data/{public/tr8n/images → app/assets/images/tr8n}/flags/st.png +0 -0
  265. data/{public/tr8n/images → app/assets/images/tr8n}/flags/su.png +0 -0
  266. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sv-FI.png +0 -0
  267. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sv-SE.png +0 -0
  268. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sv.png +0 -0
  269. data/{public/tr8n/images → app/assets/images/tr8n}/flags/sw.png +0 -0
  270. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ta.png +0 -0
  271. data/{public/tr8n/images → app/assets/images/tr8n}/flags/te.png +0 -0
  272. data/{public/tr8n/images → app/assets/images/tr8n}/flags/tg.png +0 -0
  273. data/{public/tr8n/images → app/assets/images/tr8n}/flags/th.png +0 -0
  274. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ti.png +0 -0
  275. data/{public/tr8n/images → app/assets/images/tr8n}/flags/tig.png +0 -0
  276. data/{public/tr8n/images → app/assets/images/tr8n}/flags/tk.png +0 -0
  277. data/{public/tr8n/images → app/assets/images/tr8n}/flags/tl.png +0 -0
  278. data/{public/tr8n/images → app/assets/images/tr8n}/flags/tlh.png +0 -0
  279. data/{public/tr8n/images → app/assets/images/tr8n}/flags/tn.png +0 -0
  280. data/{public/tr8n/images → app/assets/images/tr8n}/flags/to.png +0 -0
  281. data/{public/tr8n/images → app/assets/images/tr8n}/flags/tr.png +0 -0
  282. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ts.png +0 -0
  283. data/{public/tr8n/images → app/assets/images/tr8n}/flags/tt.png +0 -0
  284. data/{public/tr8n/images → app/assets/images/tr8n}/flags/tw.png +0 -0
  285. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ug.png +0 -0
  286. data/{public/tr8n/images → app/assets/images/tr8n}/flags/uk.png +0 -0
  287. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ur.png +0 -0
  288. data/{public/tr8n/images → app/assets/images/tr8n}/flags/uz.png +0 -0
  289. data/{public/tr8n/images → app/assets/images/tr8n}/flags/ve.png +0 -0
  290. data/{public/tr8n/images → app/assets/images/tr8n}/flags/vi.png +0 -0
  291. data/{public/tr8n/images → app/assets/images/tr8n}/flags/vo.png +0 -0
  292. data/{public/tr8n/images → app/assets/images/tr8n}/flags/wa.png +0 -0
  293. data/{public/tr8n/images → app/assets/images/tr8n}/flags/wo.png +0 -0
  294. data/{public/tr8n/images → app/assets/images/tr8n}/flags/xh.png +0 -0
  295. data/{public/tr8n/images → app/assets/images/tr8n}/flags/yi.png +0 -0
  296. data/{public/tr8n/images → app/assets/images/tr8n}/flags/yo.png +0 -0
  297. data/{public/tr8n/images → app/assets/images/tr8n}/flags/zh-CN.png +0 -0
  298. data/{public/tr8n/images → app/assets/images/tr8n}/flags/zh-HK.png +0 -0
  299. data/{public/tr8n/images → app/assets/images/tr8n}/flags/zh-SG.png +0 -0
  300. data/{public/tr8n/images → app/assets/images/tr8n}/flags/zh-TW.png +0 -0
  301. data/{public/tr8n/images → app/assets/images/tr8n}/flags/zh.png +0 -0
  302. data/{public/tr8n/images → app/assets/images/tr8n}/flags/zu.png +0 -0
  303. data/{public/tr8n/images → app/assets/images/tr8n}/globe.gif +0 -0
  304. data/{public/tr8n/images → app/assets/images/tr8n}/help.png +0 -0
  305. data/{public/tr8n/images → app/assets/images/tr8n}/help/color_coding.png +0 -0
  306. data/app/assets/images/tr8n/help/cousin.png +0 -0
  307. data/app/assets/images/tr8n/help/half-cousin.png +0 -0
  308. data/app/assets/images/tr8n/help/hindu_family_tree.jpg +0 -0
  309. data/{public/tr8n/images → app/assets/images/tr8n}/help/language_selector.png +0 -0
  310. data/{public/tr8n/images → app/assets/images/tr8n}/help/language_selector_default.png +0 -0
  311. data/app/assets/images/tr8n/help/language_selector_v2.png +0 -0
  312. data/{public/tr8n/images → app/assets/images/tr8n}/help/languages_disabled.png +0 -0
  313. data/app/assets/images/tr8n/help/path.png +0 -0
  314. data/{public/tr8n/images → app/assets/images/tr8n}/help/translator.png +0 -0
  315. data/{public/tr8n/images → app/assets/images/tr8n}/help2.png +0 -0
  316. data/{public/tr8n/images → app/assets/images/tr8n}/information.png +0 -0
  317. data/{public/tr8n/images → app/assets/images/tr8n}/keyboard.png +0 -0
  318. data/{public/tr8n/images → app/assets/images/tr8n}/language_selector_arrow.gif +0 -0
  319. data/{public/tr8n/images → app/assets/images/tr8n}/left_quote.png +0 -0
  320. data/{public/tr8n/images → app/assets/images/tr8n}/lightning.png +0 -0
  321. data/{public/tr8n/images → app/assets/images/tr8n}/loading.gif +0 -0
  322. data/{public/tr8n/images → app/assets/images/tr8n}/loading2.gif +0 -0
  323. data/{public/tr8n/images → app/assets/images/tr8n}/loading3.gif +0 -0
  324. data/{public/tr8n/images → app/assets/images/tr8n}/loading_large.gif +0 -0
  325. data/{public/tr8n/images → app/assets/images/tr8n}/lock.png +0 -0
  326. data/{public/tr8n/images → app/assets/images/tr8n}/lock_add.png +0 -0
  327. data/{public/tr8n/images → app/assets/images/tr8n}/lock_delete.png +0 -0
  328. data/{public/tr8n/images → app/assets/images/tr8n}/lock_open.png +0 -0
  329. data/{public/tr8n/images → app/assets/images/tr8n}/medals/bronze.png +0 -0
  330. data/{public/tr8n/images → app/assets/images/tr8n}/medals/gold.png +0 -0
  331. data/{public/tr8n/images → app/assets/images/tr8n}/medals/runner.png +0 -0
  332. data/{public/tr8n/images → app/assets/images/tr8n}/medals/silver.png +0 -0
  333. data/{public/tr8n/images → app/assets/images/tr8n}/pencil.png +0 -0
  334. data/{public/tr8n/images → app/assets/images/tr8n}/photo_silhouette.gif +0 -0
  335. data/{public/tr8n/images → app/assets/images/tr8n}/plus.png +0 -0
  336. data/{public/tr8n/images → app/assets/images/tr8n}/random.png +0 -0
  337. data/{public/tr8n/images → app/assets/images/tr8n}/random2.png +0 -0
  338. data/{public/tr8n/images → app/assets/images/tr8n}/rating_star0.png +0 -0
  339. data/{public/tr8n/images → app/assets/images/tr8n}/rating_star05.png +0 -0
  340. data/{public/tr8n/images → app/assets/images/tr8n}/rating_star1.png +0 -0
  341. data/{public/tr8n/images → app/assets/images/tr8n}/rating_stars.gif +0 -0
  342. data/{public/tr8n/images → app/assets/images/tr8n}/rating_stars.psd +0 -0
  343. data/{public/tr8n/images → app/assets/images/tr8n}/reply.png +0 -0
  344. data/{public/tr8n/images → app/assets/images/tr8n}/right_quote.png +0 -0
  345. data/{public/tr8n/images → app/assets/images/tr8n}/rotating_world.gif +0 -0
  346. data/{public/tr8n/images → app/assets/images/tr8n}/script.png +0 -0
  347. data/{public/tr8n/images → app/assets/images/tr8n}/script_edit.png +0 -0
  348. data/{public/tr8n/images → app/assets/images/tr8n}/script_gear.png +0 -0
  349. data/{public/tr8n/images → app/assets/images/tr8n}/site_sprite.gif +0 -0
  350. data/{public/tr8n/images → app/assets/images/tr8n}/spinner.gif +0 -0
  351. data/{public/tr8n/images → app/assets/images/tr8n}/star.png +0 -0
  352. data/{public/tr8n/images → app/assets/images/tr8n}/table_edit.png +0 -0
  353. data/{public/tr8n/images → app/assets/images/tr8n}/table_gear.png +0 -0
  354. data/{public/tr8n/images → app/assets/images/tr8n}/table_multiple.png +0 -0
  355. data/{public/tr8n/images → app/assets/images/tr8n}/thumb_down.png +0 -0
  356. data/{public/tr8n/images → app/assets/images/tr8n}/thumb_up.png +0 -0
  357. data/{public/tr8n/images → app/assets/images/tr8n}/toolbar_bg.gif +0 -0
  358. data/{public/tr8n/images → app/assets/images/tr8n}/top_left_stem.png +0 -0
  359. data/{public/tr8n/images → app/assets/images/tr8n}/top_right_stem.png +0 -0
  360. data/{public/tr8n/images → app/assets/images/tr8n}/tr8n_loading.gif +0 -0
  361. data/{public/tr8n/images → app/assets/images/tr8n}/tr8n_logo.jpg +0 -0
  362. data/{public/tr8n/images → app/assets/images/tr8n}/tr8n_logo.png +0 -0
  363. data/{public/tr8n/images → app/assets/images/tr8n}/tr8n_logo2.gif +0 -0
  364. data/{public/tr8n/images → app/assets/images/tr8n}/tr8n_logo2.png +0 -0
  365. data/{public/tr8n/images → app/assets/images/tr8n}/tr8n_logo_wiki.png +0 -0
  366. data/{public/tr8n/images → app/assets/images/tr8n}/tr8n_logo_wiki2.png +0 -0
  367. data/{public/tr8n/images → app/assets/images/tr8n}/translate_icn.gif +0 -0
  368. data/app/assets/images/tr8n/warning.png +0 -0
  369. data/{public/tr8n/images → app/assets/images/tr8n}/wizard.png +0 -0
  370. data/app/assets/javascripts/tr8n/application.js +7 -0
  371. data/{public/tr8n/javascripts → app/assets/javascripts/tr8n}/jsDraw2D.js +0 -0
  372. data/{public/tr8n/javascripts → app/assets/javascripts/tr8n}/keyboard_1_36.js +1 -1
  373. data/{public/tr8n/javascripts → app/assets/javascripts/tr8n}/keyboard_1_44.js +0 -0
  374. data/{public/tr8n/javascripts → app/assets/javascripts/tr8n}/shortcut.js +0 -0
  375. data/{public/tr8n/javascripts → app/assets/javascripts/tr8n}/tr8n.js +18 -30
  376. data/{public/tr8n/javascripts → app/assets/javascripts/tr8n}/tr8n_client_sdk.js +0 -0
  377. data/{public/tr8n/javascripts → app/assets/javascripts/tr8n}/tr8n_prototype_effects.js +1 -1
  378. data/app/assets/stylesheets/tr8n/application.css +6 -0
  379. data/{public/tr8n/stylesheets → app/assets/stylesheets/tr8n}/keyboard_1_36.css +0 -0
  380. data/{public/tr8n/stylesheets → app/assets/stylesheets/tr8n}/keyboard_1_44.css +0 -0
  381. data/{public/tr8n/stylesheets/tr8n.css → app/assets/stylesheets/tr8n/tr8n.css.scss} +272 -37
  382. data/app/controllers/{application_controller.rb → tr8n/application_controller.rb} +3 -4
  383. data/app/controllers/tr8n/awards_controller.rb +2 -4
  384. data/app/controllers/tr8n/dashboard_controller.rb +6 -5
  385. data/app/controllers/tr8n/forum_controller.rb +2 -2
  386. data/app/controllers/tr8n/glossary_controller.rb +3 -9
  387. data/app/controllers/tr8n/home_controller.rb +1 -1
  388. data/app/controllers/tr8n/language_controller.rb +276 -270
  389. data/app/controllers/tr8n/phrases_controller.rb +9 -19
  390. data/app/controllers/tr8n/translations_controller.rb +1 -2
  391. data/app/helpers/tr8n/admin/base_helper.rb +1 -1
  392. data/app/helpers/{application_helper.rb → tr8n/application_helper.rb} +3 -2
  393. data/app/helpers/tr8n/base_helper.rb +5 -1
  394. data/app/models/tr8n/language.rb +1 -0
  395. data/app/models/tr8n/language_case_filter.rb +1 -1
  396. data/app/models/tr8n/language_case_rule_filter.rb +1 -1
  397. data/app/models/tr8n/language_case_value_map_filter.rb +4 -0
  398. data/app/models/tr8n/language_forum_abuse_report_filter.rb +4 -0
  399. data/app/models/tr8n/language_forum_message_filter.rb +4 -0
  400. data/app/models/tr8n/language_forum_topic_filter.rb +4 -0
  401. data/app/models/tr8n/language_metric.rb +1 -1
  402. data/app/models/tr8n/language_metric_filter.rb +4 -0
  403. data/app/models/tr8n/language_rule_filter.rb +7 -3
  404. data/app/models/tr8n/language_user_filter.rb +4 -4
  405. data/app/models/tr8n/translation.rb +12 -33
  406. data/app/models/tr8n/translation_filter.rb +4 -4
  407. data/app/models/tr8n/translation_key.rb +32 -55
  408. data/app/models/tr8n/translation_key_comment_filter.rb +1 -1
  409. data/app/models/tr8n/translation_key_lock_filter.rb +1 -1
  410. data/app/models/tr8n/translation_key_source_filter.rb +1 -1
  411. data/app/models/tr8n/translation_source_filter.rb +1 -1
  412. data/app/models/tr8n/translation_vote_filter.rb +4 -4
  413. data/app/models/tr8n/translator_filter.rb +4 -0
  414. data/app/models/tr8n/translator_following_filter.rb +4 -4
  415. data/app/models/tr8n/translator_log_filter.rb +4 -4
  416. data/app/models/tr8n/translator_metric_filter.rb +4 -4
  417. data/app/models/tr8n/translator_report_filter.rb +1 -1
  418. data/app/views/layouts/tr8n/application.html.erb +14 -0
  419. data/app/views/tr8n/admin/clientsdk/lb_samples.html.erb +31 -29
  420. data/app/views/tr8n/admin/common/_lightbox_buttons.html.erb +1 -1
  421. data/app/views/tr8n/admin/domain/index.html.erb +1 -1
  422. data/app/views/tr8n/admin/domain/{key_sources.rhtml → key_sources.html.erb} +1 -1
  423. data/app/views/tr8n/admin/domain/lb_caller.html.erb +39 -35
  424. data/app/views/tr8n/admin/domain/sources.html.erb +1 -1
  425. data/app/views/tr8n/admin/glossary/lb_update.html.erb +33 -26
  426. data/app/views/tr8n/admin/language/index.html.erb +3 -3
  427. data/app/views/tr8n/admin/language/lb_update.html.erb +86 -76
  428. data/app/views/tr8n/admin/language/lb_value_map.html.erb +45 -41
  429. data/app/views/tr8n/admin/language/{metrics.rhtml → metrics.html.erb} +0 -0
  430. data/app/views/tr8n/admin/language/{users.rhtml → users.html.erb} +0 -0
  431. data/app/views/tr8n/admin/translation/{votes.rhtml → votes.html.erb} +0 -0
  432. data/app/views/tr8n/admin/translation_key/comments.html.erb +1 -1
  433. data/app/views/tr8n/admin/translation_key/index.html.erb +1 -1
  434. data/app/views/tr8n/admin/translation_key/lb_merge.html.erb +15 -3
  435. data/app/views/tr8n/admin/translation_key/lb_update.html.erb +54 -44
  436. data/app/views/tr8n/admin/translation_key/locks.html.erb +1 -1
  437. data/app/views/tr8n/admin/translator/lb_register.html.erb +27 -18
  438. data/app/views/tr8n/awards/_list.html.erb +11 -11
  439. data/app/views/tr8n/awards/index.html.erb +1 -1
  440. data/app/views/tr8n/common/_flashes.html.erb +58 -16
  441. data/app/views/tr8n/common/_language_selector.html.erb +10 -6
  442. data/app/views/tr8n/common/_paginator.html.erb +8 -2
  443. data/app/views/tr8n/common/_scripts.html.erb +6 -5
  444. data/app/views/tr8n/common/_splash_screen.html.erb +2 -2
  445. data/app/views/tr8n/common/_translation_votes.html.erb +5 -5
  446. data/app/views/tr8n/dashboard/_forum.html.erb +13 -11
  447. data/app/views/tr8n/dashboard/_language_metric.html.erb +1 -1
  448. data/app/views/tr8n/dashboard/_translations.html.erb +1 -10
  449. data/app/views/tr8n/dashboard/_translator_metric.html.erb +1 -1
  450. data/app/views/tr8n/dashboard/_votes.html.erb +4 -13
  451. data/app/views/tr8n/dashboard/{index.rhtml → index.html.erb} +3 -3
  452. data/app/views/tr8n/forum/_messages.html.erb +2 -9
  453. data/app/views/tr8n/forum/_new_message.html.erb +1 -1
  454. data/app/views/tr8n/forum/_new_topic.html.erb +1 -1
  455. data/app/views/tr8n/forum/index.html.erb +3 -10
  456. data/app/views/tr8n/forum/topic.html.erb +2 -2
  457. data/app/views/tr8n/glossary/index.html.erb +2 -2
  458. data/app/views/tr8n/help/_footer.html.erb +4 -0
  459. data/app/views/tr8n/help/_header.html.erb +106 -0
  460. data/app/views/tr8n/help/_navigation.html.erb +80 -116
  461. data/app/views/tr8n/help/advanced_tools.html.erb +13 -0
  462. data/app/views/tr8n/help/awards.html.erb +8 -8
  463. data/app/views/tr8n/help/creating_translations.html.erb +19 -9
  464. data/app/views/tr8n/help/dashboard.html.erb +34 -7
  465. data/app/views/tr8n/help/discussions.html.erb +8 -8
  466. data/app/views/tr8n/help/help.html.erb +14 -0
  467. data/app/views/tr8n/help/index.html.erb +15 -10
  468. data/app/views/tr8n/help/inline_translator.html.erb +59 -0
  469. data/app/views/tr8n/help/language_selector.html.erb +46 -6
  470. data/app/views/tr8n/help/management.html.erb +42 -0
  471. data/app/views/tr8n/help/phrases.html.erb +12 -13
  472. data/app/views/tr8n/help/{translation_rank.html.erb → ranks.html.erb} +20 -10
  473. data/app/views/tr8n/help/relationships.html.erb +14 -0
  474. data/app/views/tr8n/help/site_map.html.erb +18 -11
  475. data/app/views/tr8n/help/translations.html.erb +8 -8
  476. data/app/views/tr8n/help/voting_on_translations.html.erb +8 -8
  477. data/app/views/tr8n/home/credits.html.erb +1 -2
  478. data/app/views/tr8n/home/index.html.erb +43 -31
  479. data/app/views/tr8n/language/_basic_info.html.erb +1 -1
  480. data/app/views/tr8n/language/_edit_language_case_rules.html.erb +7 -7
  481. data/app/views/tr8n/language/_edit_language_cases.html.erb +2 -2
  482. data/app/views/tr8n/language/_edit_rules.html.erb +2 -2
  483. data/app/views/tr8n/language/_grammar.html.erb +1 -1
  484. data/app/views/tr8n/language/_header.html.erb +3 -3
  485. data/app/views/tr8n/language/_language_cases.html.erb +2 -2
  486. data/app/views/tr8n/language/_lists.html.erb +3 -3
  487. data/app/views/tr8n/language/_prohibited_words.html.erb +1 -1
  488. data/app/views/tr8n/language/_select.html.erb +106 -0
  489. data/app/views/tr8n/language/_translator_header.html.erb +2 -2
  490. data/app/views/tr8n/language/_translator_submit.html.erb +2 -2
  491. data/app/views/tr8n/language/lb_language_case_rule.html.erb +45 -39
  492. data/app/views/tr8n/language/select.html.erb +3 -3
  493. data/app/views/tr8n/language/translator.html.erb +2 -2
  494. data/app/views/tr8n/phrases/_breadcrumb.html.erb +1 -1
  495. data/app/views/tr8n/phrases/_comments_module.html.erb +19 -26
  496. data/app/views/tr8n/phrases/{_dictionary.rhtml → _dictionary.html.erb} +0 -0
  497. data/app/views/tr8n/phrases/_header.html.erb +5 -5
  498. data/app/views/tr8n/phrases/_new_comment.html.erb +1 -1
  499. data/app/views/tr8n/phrases/_permutations_module.html.erb +2 -2
  500. data/app/views/tr8n/phrases/_tokens.html.erb +1 -1
  501. data/app/views/tr8n/phrases/_toolbar.html.erb +10 -10
  502. data/app/views/tr8n/phrases/_translation_module.html.erb +4 -4
  503. data/app/views/tr8n/phrases/_translations_module.html.erb +2 -2
  504. data/app/views/tr8n/phrases/index.html.erb +4 -4
  505. data/app/views/tr8n/phrases/lb_sources.html.erb +8 -12
  506. data/app/views/tr8n/phrases/map.html.erb +1 -1
  507. data/app/views/tr8n/translations/_translation.html.erb +10 -10
  508. data/app/views/tr8n/translations/index.html.erb +2 -2
  509. data/app/views/tr8n/translator/_basic_info.html.erb +1 -1
  510. data/app/views/tr8n/translator/_header.html.erb +3 -3
  511. data/app/views/tr8n/translator/_header_key_report.html.erb +1 -1
  512. data/app/views/tr8n/translator/lb_report.html.erb +82 -73
  513. data/config/routes.rb +8 -8
  514. data/lib/tasks/tr8n_tasks.rake +0 -11
  515. data/lib/tr8n.rb +3 -1
  516. data/lib/tr8n/active_dumper.rb +19 -17
  517. data/lib/tr8n/cache.rb +27 -25
  518. data/lib/tr8n/config.rb +558 -556
  519. data/lib/tr8n/dictionary.rb +21 -19
  520. data/lib/tr8n/engine.rb +24 -25
  521. data/lib/tr8n/exception.rb +4 -2
  522. data/lib/tr8n/extender.rb +11 -9
  523. data/lib/tr8n/extensions/action_controller_extension.rb +158 -0
  524. data/lib/tr8n/extensions/action_view_extension.rb +395 -0
  525. data/lib/{core_ext/array.rb → tr8n/extensions/array_extension.rb} +0 -0
  526. data/lib/{core_ext/date.rb → tr8n/extensions/date_extension.rb} +0 -0
  527. data/lib/{core_ext/fixnum.rb → tr8n/extensions/fixnum_extension.rb} +0 -0
  528. data/lib/{core_ext/hash.rb → tr8n/extensions/hash_extension.rb} +0 -0
  529. data/lib/{core_ext/string.rb → tr8n/extensions/string_extension.rb} +0 -0
  530. data/lib/{core_ext/time.rb → tr8n/extensions/time_extension.rb} +0 -0
  531. data/lib/tr8n/ip_address.rb +26 -24
  532. data/lib/tr8n/key_registration_exception.rb +3 -1
  533. data/lib/tr8n/keyboard_mapping.rb +147 -145
  534. data/lib/tr8n/logger.rb +30 -28
  535. data/lib/{application_controller.rb → tr8n/railtie.rb} +28 -10
  536. data/lib/tr8n/site_map.rb +48 -46
  537. data/lib/tr8n/site_map_section.rb +69 -67
  538. data/lib/tr8n/token.rb +330 -328
  539. data/lib/tr8n/token_exception.rb +3 -2
  540. data/lib/tr8n/tokenized_label.rb +90 -88
  541. data/lib/tr8n/version.rb +3 -0
  542. data/script/rails +3 -3
  543. data/test/dummy/.sass-cache/32be4db30d38349a3a6e662df9bb5599dc8033b9/actions.css.scssc +0 -0
  544. data/test/dummy/.sass-cache/32be4db30d38349a3a6e662df9bb5599dc8033b9/buttons.css.scssc +0 -0
  545. data/test/dummy/.sass-cache/32be4db30d38349a3a6e662df9bb5599dc8033b9/calendar.css.scssc +0 -0
  546. data/test/dummy/.sass-cache/32be4db30d38349a3a6e662df9bb5599dc8033b9/exporter.css.scssc +0 -0
  547. data/test/dummy/.sass-cache/32be4db30d38349a3a6e662df9bb5599dc8033b9/filter.css.scssc +0 -0
  548. data/test/dummy/.sass-cache/32be4db30d38349a3a6e662df9bb5599dc8033b9/results.css.scssc +0 -0
  549. data/test/dummy/.sass-cache/3d45bab40fcae805deb2750a9342f5b355a9f2bf/components.css.scssc +0 -0
  550. data/test/dummy/.sass-cache/3d45bab40fcae805deb2750a9342f5b355a9f2bf/layout.css.scssc +0 -0
  551. data/test/dummy/.sass-cache/50f723c1dd802042d0091035528d53e6d5bc5b50/tr8n.css.scssc +0 -0
  552. data/test/dummy/.sass-cache/bce64928c8e2edcba72a647a44f05af1ff119c5d/actions.css.scssc +0 -0
  553. data/test/dummy/.sass-cache/bce64928c8e2edcba72a647a44f05af1ff119c5d/buttons.css.scssc +0 -0
  554. data/test/dummy/.sass-cache/bce64928c8e2edcba72a647a44f05af1ff119c5d/calendar.css.scssc +0 -0
  555. data/test/dummy/.sass-cache/bce64928c8e2edcba72a647a44f05af1ff119c5d/exporter.css.scssc +0 -0
  556. data/test/dummy/.sass-cache/bce64928c8e2edcba72a647a44f05af1ff119c5d/filter.css.scssc +0 -0
  557. data/test/dummy/.sass-cache/bce64928c8e2edcba72a647a44f05af1ff119c5d/results.css.scssc +0 -0
  558. data/test/dummy/Rakefile +7 -0
  559. data/test/dummy/app/assets/javascripts/application.js +7 -0
  560. data/test/dummy/app/assets/stylesheets/admin.css +200 -0
  561. data/test/dummy/app/assets/stylesheets/application.css +47 -0
  562. data/{public/tr8n/stylesheets/components.css → test/dummy/app/assets/stylesheets/components.css.scss} +5 -2
  563. data/test/dummy/app/assets/stylesheets/keyboard.css +147 -0
  564. data/{public/tr8n/stylesheets/layout.css → test/dummy/app/assets/stylesheets/layout.css.scss} +27 -3
  565. data/test/dummy/app/controllers/admin/admins_controller.rb +7 -0
  566. data/test/dummy/app/controllers/admin/base_controller.rb +12 -0
  567. data/test/dummy/app/controllers/admin/users_controller.rb +19 -0
  568. data/test/dummy/app/controllers/application_controller.rb +26 -0
  569. data/test/dummy/app/controllers/demo_controller.rb +7 -0
  570. data/test/dummy/app/controllers/login_controller.rb +58 -0
  571. data/test/dummy/app/helpers/application_helper.rb +9 -0
  572. data/test/dummy/app/helpers/home_helper.rb +2 -0
  573. data/{public/favicon.ico → test/dummy/app/mailers/.gitkeep} +0 -0
  574. data/test/dummy/app/models/.gitkeep +0 -0
  575. data/test/dummy/app/models/admin.rb +4 -0
  576. data/test/dummy/app/models/admin_filter.rb +9 -0
  577. data/test/dummy/app/models/user.rb +31 -0
  578. data/test/dummy/app/views/admin/admins/index.html.erb +7 -0
  579. data/test/dummy/app/views/admin/users/index.html.erb +10 -0
  580. data/test/dummy/app/views/demo/index.rhtml +108 -0
  581. data/test/dummy/app/views/demo/tokens.rhtml +35 -0
  582. data/test/dummy/app/views/layouts/_flashes.html.erb +86 -0
  583. data/test/dummy/app/views/layouts/_footer.html.erb +17 -0
  584. data/test/dummy/app/views/layouts/_header.html.erb +23 -0
  585. data/test/dummy/app/views/layouts/admin.html.erb +94 -0
  586. data/test/dummy/app/views/layouts/application.html.erb +25 -0
  587. data/test/dummy/app/views/login/index.html.erb +32 -0
  588. data/test/dummy/app/views/login/register.html.erb +61 -0
  589. data/{config.ru → test/dummy/config.ru} +1 -1
  590. data/test/dummy/config/application.rb +47 -0
  591. data/test/dummy/config/boot.rb +10 -0
  592. data/test/dummy/config/database.yml +25 -0
  593. data/test/dummy/config/environment.rb +5 -0
  594. data/{config → test/dummy/config}/environments/development.rb +8 -3
  595. data/test/dummy/config/environments/production.rb +60 -0
  596. data/{config → test/dummy/config}/environments/test.rb +9 -2
  597. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  598. data/test/dummy/config/initializers/inflections.rb +10 -0
  599. data/test/dummy/config/initializers/mime_types.rb +5 -0
  600. data/test/dummy/config/initializers/secret_token.rb +7 -0
  601. data/test/dummy/config/initializers/session_store.rb +8 -0
  602. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  603. data/test/dummy/config/locales/en.yml +5 -0
  604. data/test/dummy/config/routes.rb +16 -0
  605. data/test/dummy/config/tr8n/config.yml +247 -0
  606. data/test/dummy/config/tr8n/data/ip_locations.csv +93460 -0
  607. data/test/dummy/config/tr8n/rules/default_cases.yml +141 -0
  608. data/test/dummy/config/tr8n/rules/default_date_rules.yml +20 -0
  609. data/test/dummy/config/tr8n/rules/default_gender_list_rules.yml +82 -0
  610. data/test/dummy/config/tr8n/rules/default_gender_rules.yml +20 -0
  611. data/test/dummy/config/tr8n/rules/default_list_rules.yml +19 -0
  612. data/test/dummy/config/tr8n/rules/default_numeric_rules.yml +42 -0
  613. data/test/dummy/config/tr8n/rules/default_value_rules.yml +18 -0
  614. data/test/dummy/config/tr8n/site/default_glossary.yml +18 -0
  615. data/test/dummy/config/tr8n/site/default_languages.yml +1591 -0
  616. data/test/dummy/config/tr8n/site/features.yml +111 -0
  617. data/test/dummy/config/tr8n/site/shortcuts.yml +55 -0
  618. data/test/dummy/config/tr8n/site/sitemap.json +42 -0
  619. data/test/dummy/config/tr8n/tokens/data.yml +19 -0
  620. data/test/dummy/config/tr8n/tokens/decorations.yml +16 -0
  621. data/{config → test/dummy/config}/will_filter/config.yml +0 -0
  622. data/test/dummy/db/migrate/20101207014543_create_users.rb +23 -0
  623. data/test/dummy/db/migrate/20110113223509_create_admins.rb +15 -0
  624. data/test/dummy/db/migrate/20110930041143_create_will_filter_filters.rb +15 -0
  625. data/test/dummy/db/migrate/20110930041150_create_tr8n_tables.rb +350 -0
  626. data/test/dummy/db/schema.rb +398 -0
  627. data/test/dummy/lib/assets/.gitkeep +0 -0
  628. data/test/dummy/log/.gitkeep +0 -0
  629. data/{public → test/dummy/public}/404.html +0 -0
  630. data/{public → test/dummy/public}/422.html +0 -0
  631. data/{public → test/dummy/public}/500.html +0 -0
  632. data/test/dummy/public/favicon.ico +0 -0
  633. data/test/dummy/script/rails +6 -0
  634. data/test/dummy/test/functional/home_controller_test.rb +9 -0
  635. data/test/dummy/test/unit/helpers/home_helper_test.rb +4 -0
  636. data/test/integration/navigation_test.rb +10 -0
  637. data/test/test_helper.rb +7 -10
  638. data/test/tr8n_test.rb +7 -0
  639. data/tr8n.gemspec +33 -34
  640. metadata +772 -536
  641. data/.project +0 -18
  642. data/LICENSE +0 -18
  643. data/VERSION +0 -1
  644. data/app/views/tr8n/help/basic_information.html.erb +0 -13
  645. data/app/views/tr8n/help/context_rules.html.erb +0 -13
  646. data/app/views/tr8n/help/direction.html.erb +0 -13
  647. data/app/views/tr8n/help/enter_translation.html.erb +0 -13
  648. data/app/views/tr8n/help/fallback_language.html.erb +0 -13
  649. data/app/views/tr8n/help/generate_context_rules.html.erb +0 -17
  650. data/app/views/tr8n/help/inline_translations.html.erb +0 -28
  651. data/app/views/tr8n/help/language_dashboard.html.erb +0 -21
  652. data/app/views/tr8n/help/language_phrases.html.erb +0 -17
  653. data/app/views/tr8n/help/language_statistics.html.erb +0 -13
  654. data/app/views/tr8n/help/manage.html.erb +0 -13
  655. data/app/views/tr8n/help/manage_language.html.erb +0 -13
  656. data/app/views/tr8n/help/native_name.html.erb +0 -13
  657. data/app/views/tr8n/help/original_phrase.html.erb +0 -13
  658. data/app/views/tr8n/help/other_languages.html.erb +0 -15
  659. data/app/views/tr8n/help/other_translatable_resources.html.erb +0 -13
  660. data/app/views/tr8n/help/phrases_with_translations.html.erb +0 -21
  661. data/app/views/tr8n/help/phrases_without_translations.html.erb +0 -15
  662. data/app/views/tr8n/help/prohibited_words.html.erb +0 -13
  663. data/app/views/tr8n/help/rank.html.erb +0 -13
  664. data/app/views/tr8n/help/recent_discussions.html.erb +0 -13
  665. data/app/views/tr8n/help/recent_translation_votes.html.erb +0 -13
  666. data/app/views/tr8n/help/recent_translations.html.erb +0 -13
  667. data/app/views/tr8n/help/site_sections.html.erb +0 -13
  668. data/app/views/tr8n/help/suggested_translation.html.erb +0 -13
  669. data/app/views/tr8n/help/translating_inline.html.erb +0 -30
  670. data/app/views/tr8n/help/translation_context_rules.html.erb +0 -16
  671. data/app/views/tr8n/help/translation_tokens.html.erb +0 -13
  672. data/app/views/tr8n/help/translation_tools.html.erb +0 -13
  673. data/app/views/tr8n/help/user_rank.html.erb +0 -13
  674. data/app/views/tr8n/help/using_translation_tools.html.erb +0 -13
  675. data/app/views/tr8n/help/your_dashboard.html.erb +0 -17
  676. data/app/views/tr8n/help/your_languages.html.erb +0 -19
  677. data/app/views/tr8n/help/your_translations.html.erb +0 -17
  678. data/config/application.rb +0 -65
  679. data/config/boot.rb +0 -6
  680. data/config/database.yml +0 -13
  681. data/config/environment.rb +0 -46
  682. data/db/extras/20100511185330_create_test_users.rb +0 -43
  683. data/db/migrate/20090730070119_create_will_filter_tables.rb +0 -19
  684. data/db/seeds.rb +0 -7
  685. data/lib/application_helper.rb +0 -390
  686. data/lib/tr8n/controller_methods.rb +0 -156
  687. data/public/robots.txt +0 -5
  688. data/public/tr8n/images/flags/.DS_Store +0 -0
  689. data/rails/init.rb +0 -53
  690. data/test/performance/browsing_test.rb +0 -9
@@ -1,13 +0,0 @@
1
- <%= render :partial => "/tr8n/help/navigation" %>
2
-
3
- <div id="tr8n_help_content">
4
-
5
- <h1><%= @page_title %></h1>
6
-
7
- <p>
8
- Displays the translation suggested by Google when you are translating a language they support. Click on their suggestion if you like it to insert it into the translation window. You can then save the translation or further edit it.
9
- </p>
10
-
11
- </div>
12
-
13
- <%= render :partial => "/tr8n/common/footer" %>
@@ -1,30 +0,0 @@
1
- <%= render :partial => "/tr8n/help/navigation" %>
2
-
3
- <div id="tr8n_help_content">
4
-
5
- <h1><%= @page_title %></h1>
6
-
7
- <p>
8
- Use Inline translations to translate phrases while you are using and browsing the site. Use the Enable inline translations link in the <%= tr8n_help_link("language selector") %> to enable inline translations. The link changes to "Disable inline translations" so you can turn it inline translations off when you are done.
9
- </p>
10
-
11
- <%= image_tag("/tr8n/images/help/color_coding.png") %>
12
-
13
- <ul>
14
- <li>Red - The phrase has not yet been translated for this language</li>
15
- <li>Yellow - The phrase has been translated in a <%= tr8n_help_link("fallback language") %></li>
16
- <li>Green - The phrase has been translated into this language</li>
17
- </ul>
18
-
19
- <p>
20
- Right-click (or Control-click on a Mac) on any underlined word to <%= tr8n_help_link("add a translation", { :filename => "enter_translation" }) %> or to <%= tr8n_help_link("view", { :filename => "phrases_with_translations" }) %> and <%= tr8n_help_link("vote", { :filename => "phrases_with_translations" }) %> on existing translations.
21
- </p>
22
-
23
- <p>
24
- <%= image_tag("/tr8n/images/help.png") %> Click on this icon next to a dropdown menu to translate each item in the menu.
25
- </p>
26
-
27
-
28
- </div>
29
-
30
- <%= render :partial => "/tr8n/common/footer" %>
@@ -1,16 +0,0 @@
1
- <%= render :partial => "/tr8n/help/navigation" %>
2
-
3
- <div id="tr8n_help_content">
4
-
5
- <h1><%= @page_title %></h1>
6
-
7
- <p>
8
- Translations for some phrases can depend on the gender of the user viewing the translation and the gender or numerical value of tokens in the phrase. For example, in some languages "Invite Family & Friends to View Your Tree" has two different translations, one if the viewer is male and one if they are female. Tokens are parts of the phrase that are not translated, such as a profile name or a number. The translation for "{actor} tagged {target} in {count} photos" can depend on the gender of the actor and target as well as the number of photos. Tokens themselves are not translated. Geni will automatically replace them with the actual value.
9
- </p>
10
- <p>
11
- If the translation of the phrase depends on any of these factors, click the generate context rules for this phrase link. Select the gender or number for each token that the translation depends on and click the "Continue... " button. This will show you a list of all possible contexts so you can provide an appropriate translation for each.
12
- </p>
13
-
14
- </div>
15
-
16
- <%= render :partial => "/tr8n/common/footer" %>
@@ -1,13 +0,0 @@
1
- <%= render :partial => "/tr8n/help/navigation" %>
2
-
3
- <div id="tr8n_help_content">
4
-
5
- <h1><%= @page_title %></h1>
6
-
7
- <p>
8
- Tokens are parts of the phrase that are not translated, such as a profile name. Click on a token to add it to your translation. When a user is viewing the phrase, the tokens will automatically be replaced by Geni.
9
- </p>
10
-
11
- </div>
12
-
13
- <%= render :partial => "/tr8n/common/footer" %>
@@ -1,13 +0,0 @@
1
- <%= render :partial => "/tr8n/help/navigation" %>
2
-
3
- <div id="tr8n_help_content">
4
-
5
- <h1><%= @page_title %></h1>
6
-
7
- <p>
8
- Click Translation Tools to access the complete suite of advanced translation tools, including bulk translation tools, awards, and discussions.
9
- </p>
10
-
11
- </div>
12
-
13
- <%= render :partial => "/tr8n/common/footer" %>
@@ -1,13 +0,0 @@
1
- <%= render :partial => "/tr8n/help/navigation" %>
2
-
3
- <div id="tr8n_help_content">
4
-
5
- <h1><%= @page_title %></h1>
6
-
7
- <p>
8
- Each translator has a rank of 1 to 5 stars. Their rank is based on the percentage of the translations they've submitted that have been accepted.
9
- </p>
10
-
11
- </div>
12
-
13
- <%= render :partial => "/tr8n/common/footer" %>
@@ -1,13 +0,0 @@
1
- <%= render :partial => "/tr8n/help/navigation" %>
2
-
3
- <div id="tr8n_help_content">
4
-
5
- <h1><%= @page_title %></h1>
6
-
7
- <p>
8
-
9
- </p>
10
-
11
- </div>
12
-
13
- <%= render :partial => "/tr8n/common/footer" %>
@@ -1,17 +0,0 @@
1
- <%= render :partial => "/tr8n/help/navigation" %>
2
-
3
- <div id="tr8n_help_content">
4
-
5
- <h1><%= @page_title %></h1>
6
-
7
- <p>
8
- Your dashboard focuses on your rankings, translations, and other activity. Your overall rank is based on the percentage of your translations in all languages that have received positive votes. There are three states for each translation you've provided: accepted, pending, and rejected. Accepted means that its rank has meet the necessary threshold to be accepted. Pending means that the translation has not been accepted or rejected. Rejected translations have been voted down by users or reported.
9
- </p>
10
-
11
- <p>
12
- Note that only the translation with the highest overall rank for that phrase will be used. This means that you can have a translation accepted but not used on the site.
13
- </p>
14
-
15
- </div>
16
-
17
- <%= render :partial => "/tr8n/common/footer" %>
@@ -1,19 +0,0 @@
1
- <%= render :partial => "/tr8n/help/navigation" %>
2
-
3
- <div id="tr8n_help_content">
4
-
5
- <h1><%= @page_title %></h1>
6
-
7
- <p>
8
- Your languages gives you quick access to the languages you've previously selected. When you first open the language selector, you will notice that English (US) has been added to Your Languages by default. Select a language from the <%= tr8n_help_link("Other Languages") %> list to add it to your languages.
9
- </p>
10
-
11
- <p>
12
- Your most recently viewed languages will appear at the top of the list. Click on one of your language to select it. The percentage for each language indicates how much of the site has been translated into that language. Use the 'x' icon next to a language to remove it from your list.
13
- </p>
14
-
15
- <%= image_tag("/tr8n/images/help/language_selector.png") %>
16
-
17
- </div>
18
-
19
- <%= render :partial => "/tr8n/common/footer" %>
@@ -1,17 +0,0 @@
1
- <%= render :partial => "/tr8n/help/navigation" %>
2
-
3
- <div id="tr8n_help_content">
4
-
5
- <h1><%= @page_title %></h1>
6
-
7
- <p>
8
- Your translations shows you the status of each translation you've provided for this language. There are three states for each translation you've provided: accepted, pending, and rejected. Accepted means that its rank has meet the necessary threshold to be accepted. Pending means that the translation has not been accepted or rejected. Rejected translations have been voted down by users or reported.
9
- </p>
10
-
11
- <p>
12
- Note that only the translation with the highest overall rank for that phrase will be used. This means that you can have a translation accepted but not used on the site.
13
- </p>
14
-
15
- </div>
16
-
17
- <%= render :partial => "/tr8n/common/footer" %>
@@ -1,65 +0,0 @@
1
- #--
2
- # Copyright (c) 2010-2011 Michael Berkovich
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining
5
- # a copy of this software and associated documentation files (the
6
- # "Software"), to deal in the Software without restriction, including
7
- # without limitation the rights to use, copy, modify, merge, publish,
8
- # distribute, sublicense, and/or sell copies of the Software, and to
9
- # permit persons to whom the Software is furnished to do so, subject to
10
- # the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be
13
- # included in all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
- #++
23
- require File.expand_path('../boot', __FILE__)
24
-
25
- require 'rails/all'
26
-
27
- # If you have a Gemfile, require the gems listed there, including any gems
28
- # you've limited to :test, :development, or :production.
29
- Bundler.require(:default, Rails.env) if defined?(Bundler)
30
-
31
- module Tr8n
32
- class Application < Rails::Application
33
- # Settings in config/environments/* take precedence over those specified here.
34
- # Application configuration should go into files in config/initializers
35
- # -- all .rb files in that directory are automatically loaded.
36
-
37
- # Custom directories with classes and modules you want to be autoloadable.
38
- # config.autoload_paths += %W(#{config.root}/extras)
39
-
40
- # Only load the plugins named here, in the order given (default is alphabetical).
41
- # :all can be used as a placeholder for all plugins not explicitly named.
42
- # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
43
-
44
- # Activate observers that should always be running.
45
- # config.active_record.observers = :cacher, :garbage_collector, :forum_observer
46
-
47
- # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
48
- # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
49
- # config.time_zone = 'Central Time (US & Canada)'
50
-
51
- # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
52
- # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
53
- # config.i18n.default_locale = :de
54
-
55
- # JavaScript files you want as :defaults (application.js is always included).
56
- # config.action_view.javascript_expansions[:defaults] = %w(jquery rails)
57
-
58
- # Configure the default encoding used in templates for Ruby 1.9.
59
- config.encoding = "utf-8"
60
- # Configure sensitive parameters which will be filtered from the log file.
61
- config.filter_parameters += [:password]
62
- config.secret_token = 'd193e5e7394cf6b5900f7d2870f75fe8fb9f0cc167dbc9754b708f906d5c59ee8e3e9e70b82544e474613ea69e046c7834e00d35c7c9e6cb639d1bd79b32cf3b'
63
- config.session_store :cookie_store, :key => '_tr8n_rails3_session'
64
- end
65
- end
data/config/boot.rb DELETED
@@ -1,6 +0,0 @@
1
- require 'rubygems'
2
-
3
- # Set up gems listed in the Gemfile.
4
- ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
5
-
6
- require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
data/config/database.yml DELETED
@@ -1,13 +0,0 @@
1
- # SQLite version 3.x
2
- # gem install sqlite3-ruby (not necessary on OS X Leopard)
3
- development:
4
- adapter: sqlite3
5
- database: db/development.sqlite3
6
- pool: 5
7
- timeout: 5000
8
-
9
- test:
10
- adapter: sqlite3
11
- database: db/test.sqlite3
12
- pool: 5
13
- timeout: 5000
@@ -1,46 +0,0 @@
1
- #--
2
- # Copyright (c) 2010-2011 Michael Berkovich
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining
5
- # a copy of this software and associated documentation files (the
6
- # "Software"), to deal in the Software without restriction, including
7
- # without limitation the rights to use, copy, modify, merge, publish,
8
- # distribute, sublicense, and/or sell copies of the Software, and to
9
- # permit persons to whom the Software is furnished to do so, subject to
10
- # the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be
13
- # included in all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
- #++
23
-
24
- # Load the rails application
25
- require File.expand_path('../application', __FILE__)
26
- require 'pp'
27
- gem 'will_filter'
28
-
29
- Rails.configuration.after_initialize do
30
-
31
- ["../lib/core_ext/**",
32
- "../lib/tr8n",
33
- "../lib/tr8n/tokens",
34
- "../lib",
35
- "../app/models/tr8n"].each do |dir|
36
- Dir[File.expand_path("#{File.dirname(__FILE__)}/#{dir}/*.rb")].sort.each do |file|
37
- require_or_load file
38
- end
39
- end
40
-
41
- Tr8n::Config.models.each do |model|
42
- model.extend(Tr8n::ActiveDumper)
43
- end
44
- end
45
-
46
- Tr8n::Application.initialize!
@@ -1,43 +0,0 @@
1
- #--
2
- # Copyright (c) 2010 Michael Berkovich, Geni Inc
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining
5
- # a copy of this software and associated documentation files (the
6
- # "Software"), to deal in the Software without restriction, including
7
- # without limitation the rights to use, copy, modify, merge, publish,
8
- # distribute, sublicense, and/or sell copies of the Software, and to
9
- # permit persons to whom the Software is furnished to do so, subject to
10
- # the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be
13
- # included in all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
- #++
23
-
24
- # Used for testing only
25
- class CreateTestUsers < ActiveRecord::Migration
26
- def self.up
27
- create_table :users do |t|
28
- t.string :name
29
- t.string :mugshot
30
- t.boolean :admin
31
- t.boolean :guest
32
- t.string :gender
33
- t.string :link
34
- t.string :locale
35
-
36
- t.timestamps
37
- end
38
- end
39
-
40
- def self.down
41
- drop_table :users
42
- end
43
- end
@@ -1,19 +0,0 @@
1
- class CreateWillFilterTables < ActiveRecord::Migration
2
- def self.up
3
- create_table :wf_filters do |t|
4
- t.string :type
5
- t.string :name
6
- t.text :data
7
- t.integer :user_id
8
- t.string :model_class_name
9
-
10
- t.timestamps
11
- end
12
-
13
- add_index :wf_filters, [:user_id]
14
- end
15
-
16
- def self.down
17
- drop_table :wf_filters
18
- end
19
- end
data/db/seeds.rb DELETED
@@ -1,7 +0,0 @@
1
- # This file should contain all the record creation needed to seed the database with its default values.
2
- # The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
3
- #
4
- # Examples:
5
- #
6
- # cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }])
7
- # Mayor.create(:name => 'Daley', :city => cities.first)
@@ -1,390 +0,0 @@
1
- #--
2
- # Copyright (c) 2010-2011 Michael Berkovich
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining
5
- # a copy of this software and associated documentation files (the
6
- # "Software"), to deal in the Software without restriction, including
7
- # without limitation the rights to use, copy, modify, merge, publish,
8
- # distribute, sublicense, and/or sell copies of the Software, and to
9
- # permit persons to whom the Software is furnished to do so, subject to
10
- # the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be
13
- # included in all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
- #++
23
-
24
- module ApplicationHelper
25
-
26
- # generates translations json for client sdk
27
- def tr8n_translations_js_tag(opts = {})
28
- html = []
29
- html << "<script>"
30
-
31
- var_name = opts[:id] || :tr8n_translations
32
-
33
- source_names = opts[:sources] || [opts[:source]]
34
- sources = Tr8n::TranslationSource.find(:all, :conditions => ["source in (?)", source_names])
35
- source_ids = sources.collect{|source| source.id}
36
-
37
- if source_ids.empty?
38
- conditions = ["1=2"]
39
- else
40
- conditions = ["(id in (select distinct(translation_key_id) from tr8n_translation_key_sources where translation_source_id in (?)))"]
41
- conditions << source_ids.uniq
42
- end
43
-
44
- translations = []
45
- Tr8n::TranslationKey.find(:all, :conditions => conditions).each_with_index do |tkey, index|
46
- trn = tkey.translate(Tr8n::Config.current_language, {}, {:api => true})
47
- translations << trn
48
- end
49
-
50
- html << "var #{var_name} = #{translations.to_json};"
51
-
52
- html << "</script>"
53
- html.join('').html_safe
54
- end
55
-
56
- # translation functions
57
- def tr(label, desc = "", tokens = {}, options = {})
58
- if desc.is_a?(Hash)
59
- options = desc
60
- tokens = options[:tokens] || {}
61
- desc = options[:context] || ""
62
- end
63
-
64
- begin
65
- url = request.url
66
- host = request.env['HTTP_HOST']
67
- source = "#{controller.class.name.underscore.gsub("_controller", "")}/#{controller.action_name}"
68
- rescue Exception => ex
69
- source = self.class.name
70
- url = nil
71
- host = 'localhost'
72
- end
73
-
74
- options.merge!(:source => source) unless options[:source]
75
- options.merge!(:caller => caller)
76
- options.merge!(:url => url)
77
- options.merge!(:host => host)
78
-
79
- # pp [source, options[:source], url]
80
-
81
- unless Tr8n::Config.enabled?
82
- return Tr8n::TranslationKey.substitute_tokens(label, tokens, options)
83
- end
84
-
85
- Tr8n::Config.current_language.translate(label, desc, tokens, options)
86
- end
87
-
88
- # for translating labels
89
- def trl(label, desc = "", tokens = {}, options = {})
90
- tr(label, desc, tokens, options.merge(:skip_decorations => true))
91
- end
92
-
93
- def tr8n_options_for_select(options, selected = nil, description = nil, lang = Tr8n::Config.current_language)
94
- options_for_select(options.tro(description), selected)
95
- end
96
-
97
- def tr8n_phrases_link_tag(search = "", phrase_type = :without, phrase_status = :any)
98
- return unless Tr8n::Config.enabled?
99
- return if Tr8n::Config.current_language.default?
100
- return unless Tr8n::Config.open_registration_mode? or Tr8n::Config.current_user_is_translator?
101
- return unless Tr8n::Config.current_translator.enable_inline_translations?
102
-
103
- link_to(image_tag("/tr8n/images/translate_icn.gif", :style => "vertical-align:middle; border: 0px;", :title => search),
104
- :controller => "/tr8n/phrases", :action => :index,
105
- :search => search, :phrase_type => phrase_type, :phrase_status => phrase_status).html_safe
106
- end
107
-
108
- def tr8n_dir_attribute_tag
109
- "dir='<%=Tr8n::Config.current_language.dir%>'".html_safe
110
- end
111
-
112
- def tr8n_splash_screen_tag
113
- html = "<div id='tr8n_splash_screen' style='display:none'>"
114
- html << (render :partial => Tr8n::Config.splash_screen)
115
- html << "</div>"
116
- html.html_safe
117
- end
118
-
119
- def tr8n_language_flag_tag(lang = Tr8n::Config.current_language, opts = {})
120
- return "" unless Tr8n::Config.enable_language_flags?
121
- html = image_tag("/tr8n/images/flags/#{lang.flag}.png", :style => "vertical-align:middle;", :title => lang.native_name)
122
- html << "&nbsp;".html_safe
123
- html.html_safe
124
- end
125
-
126
- def tr8n_language_name_tag(lang = Tr8n::Config.current_language, opts = {})
127
- show_flag = opts[:flag].nil? ? true : opts[:flag]
128
- name_type = opts[:name].nil? ? :full : opts[:name] # :full, :native, :english, :locale
129
- linked = opts[:linked].nil? ? true : opts[:linked]
130
-
131
- html = "<span style='white-space: nowrap'>"
132
- html << tr8n_language_flag_tag(lang, opts) if show_flag
133
-
134
- name = case name_type
135
- when :native then lang.native_name
136
- when :english then lang.english_name
137
- when :locale then lang.locale
138
- else lang.full_name
139
- end
140
-
141
- if linked
142
- html << link_to(name.html_safe, :controller => "/tr8n/language",
143
- :action => :switch, :language_action => :switch_language,
144
- :locale => lang.locale,
145
- :source_url => opts[:source_url])
146
- else
147
- html << name
148
- end
149
-
150
- html << "</span>"
151
- html.html_safe
152
- end
153
-
154
- def tr8n_language_selector_tag(opts = {})
155
- opts[:style] ||= "color:#1166bb;"
156
- opts[:show_arrow] ||= true
157
- opts[:arrow_style] ||= "font-size:8px;"
158
- render(:partial => '/tr8n/common/language_selector', :locals => {:opts => opts})
159
- end
160
-
161
- def tr8n_language_strip_tag(opts = {})
162
- opts[:flag] = opts[:flag].nil? ? false : opts[:flag]
163
- opts[:name] = opts[:name].nil? ? :native : opts[:name]
164
- opts[:linked] = opts[:linked].nil? ? true : opts[:linked]
165
- opts[:javascript] = opts[:javascript].nil? ? false : opts[:javascript]
166
-
167
- render(:partial => '/tr8n/common/language_strip', :locals => {:opts => opts})
168
- end
169
-
170
- def tr8n_language_table_tag(opts = {})
171
- opts[:cols] = opts[:cols].nil? ? 4 : opts[:cols]
172
- opts[:col_size] = opts[:col_size].nil? ? "300px" : opts[:col_size]
173
- render(:partial => '/tr8n/common/language_table', :locals => {:opts => opts.merge(:name => :english)})
174
- end
175
-
176
- def tr8n_translator_login_tag(opts = {})
177
- opts[:class] ||= 'tr8n_right_horiz_list'
178
- render(:partial => '/tr8n/common/translator_login', :locals => {:opts => opts})
179
- end
180
-
181
- def tr8n_flashes_tag(opts = {})
182
- render(:partial => '/tr8n/common/flashes', :locals => {:opts => opts})
183
- end
184
-
185
- def tr8n_scripts_tag(opts = {})
186
- render(:partial => '/tr8n/common/scripts', :locals => {:opts => opts})
187
- end
188
-
189
- def tr8n_client_sdk_scripts_tag(opts = {})
190
- opts[:default_source] ||= "application"
191
- opts[:scheduler_interval] ||= 5000
192
-
193
- opts[:enable_inline_translations] = (Tr8n::Config.current_user_is_translator? and Tr8n::Config.current_translator.enable_inline_translations? and (not Tr8n::Config.current_language.default?))
194
- opts[:default_decorations] = Tr8n::Config.default_decoration_tokens
195
- opts[:default_tokens] = Tr8n::Config.default_data_tokens
196
- opts[:rules] = {
197
- :number => Tr8n::Config.rules_engine[:numeric_rule], :gender => Tr8n::Config.rules_engine[:gender_rule],
198
- :list => Tr8n::Config.rules_engine[:gender_list_rule], :date => Tr8n::Config.rules_engine[:date_rule]
199
- }
200
-
201
- html = [javascript_include_tag("/tr8n/javascripts/tr8n_client_sdk.js")]
202
- html << "<script>"
203
- html << "function initializeTr8nProxy() {"
204
- html << " tr8nProxy = new Tr8n.Proxy(#{opts.to_json});"
205
- # html << " Tr8n.Utils.addEvent(window, 'load', function() {"
206
- # html << " tr8nProxy = new Tr8n.Proxy(#{opts.to_json});"
207
- # html << " });"
208
- html << "}"
209
- html << "initializeTr8nProxy();"
210
- html << "</script>"
211
- html.join("\n").html_safe
212
- end
213
-
214
- def tr8n_translator_rank_tag(translator, rank = nil)
215
- return "" unless translator
216
-
217
- rank ||= translator.rank || 0
218
-
219
- html = "<span dir='ltr'>"
220
- 1.upto(5) do |i|
221
- if rank > i * 20 - 10 and rank < i * 20
222
- html << image_tag("/tr8n/images/rating_star05.png")
223
- elsif rank < i * 20 - 10
224
- html << image_tag("/tr8n/images/rating_star0.png")
225
- else
226
- html << image_tag("/tr8n/images/rating_star1.png")
227
- end
228
- end
229
- html << "</span>"
230
- html.html_safe
231
- end
232
-
233
- def tr8n_help_icon_tag(filename = "index")
234
- link_to(image_tag("/tr8n/images/help.png", :style => "border:0px; vertical-align:middle;", :title => trl("Help")), {:controller => "/tr8n/help", :action => filename}, :target => "_new").html_safe
235
- end
236
-
237
- def tr8n_help_link(text, opts = {})
238
- filename = opts[:filename].nil? ? text.downcase.gsub(' ', '_') : opts[:filename]
239
- classname = "tr8n_selected" if filename == controller.action_name
240
- link_to(text, { :controller => "/tr8n/help", :action => filename }, :class => classname).html_safe
241
- end
242
-
243
- def tr8n_spinner_tag(id = "spinner", label = nil, cls='spinner')
244
- html = "<div id='#{id}' class='#{cls}' style='display:none'>"
245
- html << image_tag("/tr8n/images/spinner.gif", :style => "vertical-align:middle;")
246
- html << " #{trl(label)}" if label
247
- html << "</div>"
248
- html.html_safe
249
- end
250
-
251
- def tr8n_toggler_tag(content_id, label = "", open = true)
252
- html = "<span id='#{content_id}_open' "
253
- html << "style='display:none'" unless open
254
- html << ">"
255
- html << link_to_function("#{image_tag("/tr8n/images/arrow_down.gif", :style=>'text-align:center; vertical-align:middle')} #{label}".html_safe, "Tr8n.Effects.hide('#{content_id}_open'); Tr8n.Effects.show('#{content_id}_closed'); Tr8n.Effects.blindUp('#{content_id}');", :style=> "text-decoration:none")
256
- html << "</span>"
257
- html << "<span id='#{content_id}_closed' "
258
- html << "style='display:none'" if open
259
- html << ">"
260
- html << link_to_function("#{image_tag("/tr8n/images/arrow_right.gif", :style=>'text-align:center; vertical-align:middle')} #{label}".html_safe, "Tr8n.Effects.show('#{content_id}_open'); Tr8n.Effects.hide('#{content_id}_closed'); Tr8n.Effects.blindDown('#{content_id}');", :style=> "text-decoration:none")
261
- html << "</span>"
262
- html.html_safe
263
- end
264
-
265
- def tr8n_sitemap(sections, splitters, options = {})
266
- html = ""
267
- html << "<table style='width:100%'>"
268
- html << "<tr>"
269
- splitters.each do |splitter|
270
- html << "<td style='vertical-align:top; width:" << (100 / splitters.size).to_s << "%;'>"
271
- html << generate_sitemap(sections[splitter.first..splitter.last], options)
272
- html << "</td>"
273
- end
274
- html << "</tr>"
275
- html << "</table>"
276
- html.html_safe
277
- end
278
-
279
- def tr8n_breadcrumb_tag(source = nil, opts = {})
280
- source ||= "#{controller.class.name.underscore.gsub("_controller", "")}/#{controller.action_name}"
281
- section = Tr8n::SiteMap.section_for_source(source)
282
- return "" unless section
283
- opts[:separator] ||= " >> "
284
- opts[:min_elements] ||= 1
285
- opts[:skip_root] ||= opts[:skip_root].nil? ? false : opts[:skip_root]
286
-
287
- links = section.parents.collect{|node| link_to(node.title(params), node.link(params))}
288
- return "" if links.size <= opts[:min_elements]
289
-
290
- links.delete(links.first) if opts[:skip_root]
291
- links.unshift(link_to(opts[:root].first, opts[:root].last)) if opts[:root]
292
-
293
- html = "<div id='tr8n_breadcrumb' class='tr8n_breadcrumb'>"
294
- html << links.join(opts[:separator])
295
- html << '</div>'
296
- html.html_safe
297
- end
298
-
299
- def tr8n_user_tag(translator, options = {})
300
- return "Deleted Translator" unless translator
301
-
302
- if options[:linked]
303
- link_to(translator.name, translator.link).html_safe
304
- else
305
- translator.name
306
- end
307
- end
308
-
309
- def tr8n_user_mugshot_tag(translator, options = {})
310
- if translator and !translator.mugshot.blank?
311
- img_url = translator.mugshot
312
- else
313
- img_url = Tr8n::Config.silhouette_image
314
- end
315
-
316
- img_tag = "<img src='#{img_url}' style='width:48px'>".html_safe
317
-
318
- if translator and options[:linked]
319
- link_to(img_tag, translator.link).html_safe
320
- else
321
- img_tag.html_safe
322
- end
323
- end
324
-
325
- def tr8n_will_paginate(collection = nil, options = {})
326
- will_paginate(collection, options.merge(:previous_label => tr("&laquo; Previous", "Previous entries in a list", {}, options),
327
- :next_label => tr("Next &raquo;", "Next entries in a list", {}, options))).html_safe
328
- end
329
-
330
- def tr8n_page_entries_info(collection, options = {})
331
- entry_name = options[:entry_name] || (collection.empty? ? 'entry' : collection.first.class.name.underscore.sub('_', ' '))
332
-
333
- if collection.total_pages < 2
334
- case collection.size
335
- when 0
336
- tr("None found", "Paginator no entries message", {}, options)
337
- when 1
338
- tr("Displaying [bold: 1] #{entry_name}", "Paginator one page message", {}, options)
339
- else
340
- tr("Displaying [bold: all {count}] #{entry_name.pluralize}", "Paginator all entries message", {:count => collection.size}, options)
341
- end
342
- else
343
- tr("Displaying #{entry_name.pluralize} [bold: {start_num} - {end_num}] of [bold: {total_count}] in total",
344
- "Paginator custom message", {
345
- :start_num => collection.offset + 1,
346
- :end_num => collection.offset + collection.length,
347
- :total_count => collection.total_entries
348
- }, options
349
- )
350
- end
351
- end
352
-
353
- def tr8n_select_month(date, options = {}, html_options = {})
354
- month_names = options[:use_short_month] ? Tr8n::Config.default_abbr_month_names : Tr8n::Config.default_month_names
355
- select_month(date, options.merge(
356
- :use_month_names => month_names.collect{|month_name| Tr8n::Language.translate(month_name, options[:description] || "Month name")}
357
- ), html_options)
358
- end
359
-
360
- def tr8n_with_options_tag(opts, &block)
361
- Thread.current[:tr8n_block_options] = opts
362
- if block_given?
363
- ret = capture(&block)
364
- end
365
- Thread.current[:tr8n_block_options] = {}
366
- ret
367
- end
368
-
369
- def tr8n_button_tag(label, function, opts = {})
370
- link_to_function("<span>#{label}</span>".html_safe, function, :class => "tr8n_grey_button tr8n_pcb")
371
- end
372
-
373
- private
374
-
375
- def generate_sitemap(sections, options = {})
376
- html = "<ul class='section_list'>"
377
- sections.each do |section|
378
- html << "<li class='section_list_item'>"
379
- html << "<a href='/tr8n/phrases/index?section_key=#{section.key}'>" << tr(section.label, section.description) << "</a>"
380
- html << "<a href='" << section.data[:link] << "' target='_new'><img src='/tr8n/images/bullet_go.png' style='border:0px; vertical-align:middle'></a>" if section.data[:link]
381
-
382
- if section.children.size > 0
383
- html << generate_sitemap(section.children, options)
384
- end
385
- html << "</li>"
386
- end
387
- html << "</ul>"
388
- html.html_safe
389
- end
390
- end