kms 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2454) hide show
  1. checksums.yaml +4 -4
  2. data/lib/kms/version.rb +1 -1
  3. data/vendor/assets/bower.json +23 -0
  4. data/vendor/assets/bower_components/Responsive-Dashboard/CONTRIBUTING.md +21 -0
  5. data/vendor/assets/bower_components/Responsive-Dashboard/LICENSE +21 -0
  6. data/vendor/assets/bower_components/Responsive-Dashboard/README.md +119 -0
  7. data/vendor/assets/bower_components/Responsive-Dashboard/bower.json +32 -0
  8. data/vendor/assets/bower_components/Responsive-Dashboard/gulpfile.js +81 -0
  9. data/vendor/assets/bower_components/Responsive-Dashboard/package.json +21 -0
  10. data/vendor/assets/bower_components/Responsive-Dashboard/src/fonts/montserrat-regular-webfont.eot +0 -0
  11. data/vendor/assets/bower_components/Responsive-Dashboard/src/fonts/montserrat-regular-webfont.svg +1317 -0
  12. data/vendor/assets/bower_components/Responsive-Dashboard/src/fonts/montserrat-regular-webfont.ttf +0 -0
  13. data/vendor/assets/bower_components/Responsive-Dashboard/src/fonts/montserrat-regular-webfont.woff +0 -0
  14. data/vendor/assets/bower_components/Responsive-Dashboard/src/img/avatar.jpg +0 -0
  15. data/vendor/assets/bower_components/Responsive-Dashboard/src/index.html +413 -0
  16. data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/controllers/alerts-ctrl.js +19 -0
  17. data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/controllers/master-ctrl.js +51 -0
  18. data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/directives/loading.js +13 -0
  19. data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/directives/widget-body.js +16 -0
  20. data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/directives/widget-header.js +17 -0
  21. data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/directives/widget.js +16 -0
  22. data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/module.js +1 -0
  23. data/vendor/assets/bower_components/Responsive-Dashboard/src/js/dashboard/routes.js +22 -0
  24. data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/content.less +19 -0
  25. data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/hamburg.less +29 -0
  26. data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/header.less +92 -0
  27. data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/loading.less +40 -0
  28. data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/main.less +73 -0
  29. data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/mixins.less +5 -0
  30. data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/sidebar.less +122 -0
  31. data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/variables.less +10 -0
  32. data/vendor/assets/bower_components/Responsive-Dashboard/src/less/dashboard/widgets.less +95 -0
  33. data/vendor/assets/bower_components/alertify/README.md +4 -0
  34. data/vendor/assets/bower_components/alertify/alertify.js +633 -0
  35. data/vendor/assets/bower_components/alertify/alertify.min.js +2 -0
  36. data/vendor/assets/bower_components/alertify/component.json +6 -0
  37. data/vendor/assets/bower_components/alertify/themes/alertify.bootstrap.css +131 -0
  38. data/vendor/assets/bower_components/alertify/themes/alertify.core.css +141 -0
  39. data/vendor/assets/bower_components/alertify/themes/alertify.default.css +81 -0
  40. data/vendor/assets/bower_components/angular/README.md +67 -0
  41. data/vendor/assets/bower_components/angular/angular-csp.css +13 -0
  42. data/vendor/assets/bower_components/angular/angular.js +25751 -0
  43. data/vendor/assets/bower_components/angular/angular.min.js +248 -0
  44. data/vendor/assets/bower_components/angular/angular.min.js.gzip +0 -0
  45. data/vendor/assets/bower_components/angular/angular.min.js.map +8 -0
  46. data/vendor/assets/bower_components/angular/bower.json +8 -0
  47. data/vendor/assets/bower_components/angular/package.json +25 -0
  48. data/vendor/assets/bower_components/angular-bootstrap/bower.json +11 -0
  49. data/vendor/assets/bower_components/angular-bootstrap/ui-bootstrap-tpls.js +4167 -0
  50. data/vendor/assets/bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js +10 -0
  51. data/vendor/assets/bower_components/angular-bootstrap/ui-bootstrap.js +3857 -0
  52. data/vendor/assets/bower_components/angular-bootstrap/ui-bootstrap.min.js +9 -0
  53. data/vendor/assets/bower_components/angular-cookies/README.md +77 -0
  54. data/vendor/assets/bower_components/angular-cookies/angular-cookies.js +206 -0
  55. data/vendor/assets/bower_components/angular-cookies/angular-cookies.min.js +8 -0
  56. data/vendor/assets/bower_components/angular-cookies/angular-cookies.min.js.map +8 -0
  57. data/vendor/assets/bower_components/angular-cookies/bower.json +9 -0
  58. data/vendor/assets/bower_components/angular-cookies/package.json +26 -0
  59. data/vendor/assets/bower_components/angular-i18n/README.md +65 -0
  60. data/vendor/assets/bower_components/angular-i18n/aa-dj.js +2 -0
  61. data/vendor/assets/bower_components/angular-i18n/aa-er.js +2 -0
  62. data/vendor/assets/bower_components/angular-i18n/aa-et.js +2 -0
  63. data/vendor/assets/bower_components/angular-i18n/aa.js +2 -0
  64. data/vendor/assets/bower_components/angular-i18n/af-na.js +2 -0
  65. data/vendor/assets/bower_components/angular-i18n/af-za.js +2 -0
  66. data/vendor/assets/bower_components/angular-i18n/af.js +2 -0
  67. data/vendor/assets/bower_components/angular-i18n/agq-cm.js +2 -0
  68. data/vendor/assets/bower_components/angular-i18n/agq.js +2 -0
  69. data/vendor/assets/bower_components/angular-i18n/ak-gh.js +2 -0
  70. data/vendor/assets/bower_components/angular-i18n/ak.js +2 -0
  71. data/vendor/assets/bower_components/angular-i18n/am-et.js +2 -0
  72. data/vendor/assets/bower_components/angular-i18n/am.js +2 -0
  73. data/vendor/assets/bower_components/angular-i18n/angular-locale_aa-dj.js +128 -0
  74. data/vendor/assets/bower_components/angular-i18n/angular-locale_aa-er.js +128 -0
  75. data/vendor/assets/bower_components/angular-i18n/angular-locale_aa-et.js +128 -0
  76. data/vendor/assets/bower_components/angular-i18n/angular-locale_aa.js +128 -0
  77. data/vendor/assets/bower_components/angular-i18n/angular-locale_af-na.js +110 -0
  78. data/vendor/assets/bower_components/angular-i18n/angular-locale_af-za.js +110 -0
  79. data/vendor/assets/bower_components/angular-i18n/angular-locale_af.js +110 -0
  80. data/vendor/assets/bower_components/angular-i18n/angular-locale_agq-cm.js +128 -0
  81. data/vendor/assets/bower_components/angular-i18n/angular-locale_agq.js +128 -0
  82. data/vendor/assets/bower_components/angular-i18n/angular-locale_ak-gh.js +128 -0
  83. data/vendor/assets/bower_components/angular-i18n/angular-locale_ak.js +128 -0
  84. data/vendor/assets/bower_components/angular-i18n/angular-locale_am-et.js +110 -0
  85. data/vendor/assets/bower_components/angular-i18n/angular-locale_am.js +110 -0
  86. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-001.js +110 -0
  87. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-ae.js +110 -0
  88. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-bh.js +110 -0
  89. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-dj.js +110 -0
  90. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-dz.js +110 -0
  91. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-eg.js +110 -0
  92. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-eh.js +110 -0
  93. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-er.js +110 -0
  94. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-il.js +110 -0
  95. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-iq.js +110 -0
  96. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-jo.js +110 -0
  97. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-km.js +110 -0
  98. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-kw.js +110 -0
  99. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-lb.js +110 -0
  100. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-ly.js +110 -0
  101. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-ma.js +110 -0
  102. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-mr.js +110 -0
  103. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-om.js +110 -0
  104. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-ps.js +110 -0
  105. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-qa.js +110 -0
  106. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-sa.js +110 -0
  107. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-sd.js +110 -0
  108. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-so.js +110 -0
  109. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-ss.js +110 -0
  110. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-sy.js +110 -0
  111. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-td.js +110 -0
  112. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-tn.js +110 -0
  113. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar-ye.js +110 -0
  114. data/vendor/assets/bower_components/angular-i18n/angular-locale_ar.js +110 -0
  115. data/vendor/assets/bower_components/angular-i18n/angular-locale_as-in.js +128 -0
  116. data/vendor/assets/bower_components/angular-i18n/angular-locale_as.js +128 -0
  117. data/vendor/assets/bower_components/angular-i18n/angular-locale_asa-tz.js +128 -0
  118. data/vendor/assets/bower_components/angular-i18n/angular-locale_asa.js +128 -0
  119. data/vendor/assets/bower_components/angular-i18n/angular-locale_ast-es.js +128 -0
  120. data/vendor/assets/bower_components/angular-i18n/angular-locale_ast.js +128 -0
  121. data/vendor/assets/bower_components/angular-i18n/angular-locale_az-cyrl-az.js +110 -0
  122. data/vendor/assets/bower_components/angular-i18n/angular-locale_az-cyrl.js +110 -0
  123. data/vendor/assets/bower_components/angular-i18n/angular-locale_az-latn-az.js +110 -0
  124. data/vendor/assets/bower_components/angular-i18n/angular-locale_az-latn.js +110 -0
  125. data/vendor/assets/bower_components/angular-i18n/angular-locale_az.js +110 -0
  126. data/vendor/assets/bower_components/angular-i18n/angular-locale_bas-cm.js +128 -0
  127. data/vendor/assets/bower_components/angular-i18n/angular-locale_bas.js +128 -0
  128. data/vendor/assets/bower_components/angular-i18n/angular-locale_be-by.js +110 -0
  129. data/vendor/assets/bower_components/angular-i18n/angular-locale_be.js +110 -0
  130. data/vendor/assets/bower_components/angular-i18n/angular-locale_bem-zm.js +128 -0
  131. data/vendor/assets/bower_components/angular-i18n/angular-locale_bem.js +128 -0
  132. data/vendor/assets/bower_components/angular-i18n/angular-locale_bez-tz.js +128 -0
  133. data/vendor/assets/bower_components/angular-i18n/angular-locale_bez.js +128 -0
  134. data/vendor/assets/bower_components/angular-i18n/angular-locale_bg-bg.js +110 -0
  135. data/vendor/assets/bower_components/angular-i18n/angular-locale_bg.js +110 -0
  136. data/vendor/assets/bower_components/angular-i18n/angular-locale_bm-latn-ml.js +128 -0
  137. data/vendor/assets/bower_components/angular-i18n/angular-locale_bm-latn.js +128 -0
  138. data/vendor/assets/bower_components/angular-i18n/angular-locale_bm-ml.js +115 -0
  139. data/vendor/assets/bower_components/angular-i18n/angular-locale_bm.js +128 -0
  140. data/vendor/assets/bower_components/angular-i18n/angular-locale_bn-bd.js +110 -0
  141. data/vendor/assets/bower_components/angular-i18n/angular-locale_bn-in.js +110 -0
  142. data/vendor/assets/bower_components/angular-i18n/angular-locale_bn.js +110 -0
  143. data/vendor/assets/bower_components/angular-i18n/angular-locale_bo-cn.js +128 -0
  144. data/vendor/assets/bower_components/angular-i18n/angular-locale_bo-in.js +128 -0
  145. data/vendor/assets/bower_components/angular-i18n/angular-locale_bo.js +128 -0
  146. data/vendor/assets/bower_components/angular-i18n/angular-locale_br-fr.js +110 -0
  147. data/vendor/assets/bower_components/angular-i18n/angular-locale_br.js +110 -0
  148. data/vendor/assets/bower_components/angular-i18n/angular-locale_brx-in.js +128 -0
  149. data/vendor/assets/bower_components/angular-i18n/angular-locale_brx.js +128 -0
  150. data/vendor/assets/bower_components/angular-i18n/angular-locale_bs-cyrl-ba.js +128 -0
  151. data/vendor/assets/bower_components/angular-i18n/angular-locale_bs-cyrl.js +128 -0
  152. data/vendor/assets/bower_components/angular-i18n/angular-locale_bs-latn-ba.js +128 -0
  153. data/vendor/assets/bower_components/angular-i18n/angular-locale_bs-latn.js +128 -0
  154. data/vendor/assets/bower_components/angular-i18n/angular-locale_bs.js +128 -0
  155. data/vendor/assets/bower_components/angular-i18n/angular-locale_byn-er.js +115 -0
  156. data/vendor/assets/bower_components/angular-i18n/angular-locale_byn.js +115 -0
  157. data/vendor/assets/bower_components/angular-i18n/angular-locale_ca-ad.js +128 -0
  158. data/vendor/assets/bower_components/angular-i18n/angular-locale_ca-es-valencia.js +128 -0
  159. data/vendor/assets/bower_components/angular-i18n/angular-locale_ca-es.js +128 -0
  160. data/vendor/assets/bower_components/angular-i18n/angular-locale_ca-fr.js +128 -0
  161. data/vendor/assets/bower_components/angular-i18n/angular-locale_ca-it.js +128 -0
  162. data/vendor/assets/bower_components/angular-i18n/angular-locale_ca.js +128 -0
  163. data/vendor/assets/bower_components/angular-i18n/angular-locale_cgg-ug.js +128 -0
  164. data/vendor/assets/bower_components/angular-i18n/angular-locale_cgg.js +128 -0
  165. data/vendor/assets/bower_components/angular-i18n/angular-locale_chr-us.js +110 -0
  166. data/vendor/assets/bower_components/angular-i18n/angular-locale_chr.js +110 -0
  167. data/vendor/assets/bower_components/angular-i18n/angular-locale_ckb-arab-iq.js +128 -0
  168. data/vendor/assets/bower_components/angular-i18n/angular-locale_ckb-arab-ir.js +128 -0
  169. data/vendor/assets/bower_components/angular-i18n/angular-locale_ckb-arab.js +128 -0
  170. data/vendor/assets/bower_components/angular-i18n/angular-locale_ckb-iq.js +128 -0
  171. data/vendor/assets/bower_components/angular-i18n/angular-locale_ckb-ir.js +128 -0
  172. data/vendor/assets/bower_components/angular-i18n/angular-locale_ckb-latn-iq.js +128 -0
  173. data/vendor/assets/bower_components/angular-i18n/angular-locale_ckb-latn.js +128 -0
  174. data/vendor/assets/bower_components/angular-i18n/angular-locale_ckb.js +128 -0
  175. data/vendor/assets/bower_components/angular-i18n/angular-locale_cs-cz.js +128 -0
  176. data/vendor/assets/bower_components/angular-i18n/angular-locale_cs.js +128 -0
  177. data/vendor/assets/bower_components/angular-i18n/angular-locale_cy-gb.js +110 -0
  178. data/vendor/assets/bower_components/angular-i18n/angular-locale_cy.js +110 -0
  179. data/vendor/assets/bower_components/angular-i18n/angular-locale_da-dk.js +141 -0
  180. data/vendor/assets/bower_components/angular-i18n/angular-locale_da-gl.js +141 -0
  181. data/vendor/assets/bower_components/angular-i18n/angular-locale_da.js +141 -0
  182. data/vendor/assets/bower_components/angular-i18n/angular-locale_dav-ke.js +128 -0
  183. data/vendor/assets/bower_components/angular-i18n/angular-locale_dav.js +128 -0
  184. data/vendor/assets/bower_components/angular-i18n/angular-locale_de-at.js +128 -0
  185. data/vendor/assets/bower_components/angular-i18n/angular-locale_de-be.js +128 -0
  186. data/vendor/assets/bower_components/angular-i18n/angular-locale_de-ch.js +128 -0
  187. data/vendor/assets/bower_components/angular-i18n/angular-locale_de-de.js +128 -0
  188. data/vendor/assets/bower_components/angular-i18n/angular-locale_de-li.js +128 -0
  189. data/vendor/assets/bower_components/angular-i18n/angular-locale_de-lu.js +128 -0
  190. data/vendor/assets/bower_components/angular-i18n/angular-locale_de.js +128 -0
  191. data/vendor/assets/bower_components/angular-i18n/angular-locale_dje-ne.js +128 -0
  192. data/vendor/assets/bower_components/angular-i18n/angular-locale_dje.js +128 -0
  193. data/vendor/assets/bower_components/angular-i18n/angular-locale_dsb-de.js +128 -0
  194. data/vendor/assets/bower_components/angular-i18n/angular-locale_dsb.js +128 -0
  195. data/vendor/assets/bower_components/angular-i18n/angular-locale_dua-cm.js +128 -0
  196. data/vendor/assets/bower_components/angular-i18n/angular-locale_dua.js +128 -0
  197. data/vendor/assets/bower_components/angular-i18n/angular-locale_dyo-sn.js +128 -0
  198. data/vendor/assets/bower_components/angular-i18n/angular-locale_dyo.js +128 -0
  199. data/vendor/assets/bower_components/angular-i18n/angular-locale_dz-bt.js +128 -0
  200. data/vendor/assets/bower_components/angular-i18n/angular-locale_dz.js +128 -0
  201. data/vendor/assets/bower_components/angular-i18n/angular-locale_ebu-ke.js +128 -0
  202. data/vendor/assets/bower_components/angular-i18n/angular-locale_ebu.js +128 -0
  203. data/vendor/assets/bower_components/angular-i18n/angular-locale_ee-gh.js +128 -0
  204. data/vendor/assets/bower_components/angular-i18n/angular-locale_ee-tg.js +128 -0
  205. data/vendor/assets/bower_components/angular-i18n/angular-locale_ee.js +128 -0
  206. data/vendor/assets/bower_components/angular-i18n/angular-locale_el-cy.js +110 -0
  207. data/vendor/assets/bower_components/angular-i18n/angular-locale_el-gr.js +110 -0
  208. data/vendor/assets/bower_components/angular-i18n/angular-locale_el.js +110 -0
  209. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-001.js +128 -0
  210. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-150.js +128 -0
  211. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-ag.js +128 -0
  212. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-ai.js +128 -0
  213. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-as.js +128 -0
  214. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-au.js +128 -0
  215. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-bb.js +128 -0
  216. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-be.js +128 -0
  217. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-bm.js +128 -0
  218. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-bs.js +128 -0
  219. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-bw.js +128 -0
  220. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-bz.js +128 -0
  221. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-ca.js +128 -0
  222. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-cc.js +128 -0
  223. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-ck.js +128 -0
  224. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-cm.js +128 -0
  225. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-cx.js +128 -0
  226. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-dg.js +128 -0
  227. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-dm.js +128 -0
  228. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-dsrt-us.js +99 -0
  229. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-dsrt.js +99 -0
  230. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-er.js +128 -0
  231. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-fj.js +128 -0
  232. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-fk.js +128 -0
  233. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-fm.js +128 -0
  234. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-gb.js +128 -0
  235. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-gd.js +128 -0
  236. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-gg.js +128 -0
  237. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-gh.js +128 -0
  238. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-gi.js +128 -0
  239. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-gm.js +128 -0
  240. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-gu.js +128 -0
  241. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-gy.js +128 -0
  242. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-hk.js +128 -0
  243. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-ie.js +128 -0
  244. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-im.js +128 -0
  245. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-in.js +128 -0
  246. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-io.js +128 -0
  247. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-iso.js +128 -0
  248. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-je.js +128 -0
  249. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-jm.js +128 -0
  250. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-ke.js +128 -0
  251. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-ki.js +128 -0
  252. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-kn.js +128 -0
  253. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-ky.js +128 -0
  254. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-lc.js +128 -0
  255. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-lr.js +128 -0
  256. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-ls.js +128 -0
  257. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-mg.js +128 -0
  258. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-mh.js +128 -0
  259. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-mo.js +128 -0
  260. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-mp.js +128 -0
  261. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-ms.js +128 -0
  262. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-mt.js +128 -0
  263. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-mu.js +128 -0
  264. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-mw.js +128 -0
  265. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-my.js +128 -0
  266. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-na.js +128 -0
  267. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-nf.js +128 -0
  268. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-ng.js +128 -0
  269. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-nr.js +128 -0
  270. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-nu.js +128 -0
  271. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-nz.js +128 -0
  272. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-pg.js +128 -0
  273. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-ph.js +128 -0
  274. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-pk.js +128 -0
  275. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-pn.js +128 -0
  276. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-pr.js +128 -0
  277. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-pw.js +128 -0
  278. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-rw.js +128 -0
  279. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-sb.js +128 -0
  280. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-sc.js +128 -0
  281. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-sd.js +128 -0
  282. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-sg.js +128 -0
  283. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-sh.js +128 -0
  284. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-sl.js +128 -0
  285. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-ss.js +128 -0
  286. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-sx.js +128 -0
  287. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-sz.js +128 -0
  288. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-tc.js +128 -0
  289. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-tk.js +128 -0
  290. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-to.js +128 -0
  291. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-tt.js +128 -0
  292. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-tv.js +128 -0
  293. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-tz.js +128 -0
  294. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-ug.js +128 -0
  295. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-um.js +128 -0
  296. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-us.js +128 -0
  297. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-vc.js +128 -0
  298. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-vg.js +128 -0
  299. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-vi.js +128 -0
  300. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-vu.js +128 -0
  301. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-ws.js +128 -0
  302. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-za.js +128 -0
  303. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-zm.js +128 -0
  304. data/vendor/assets/bower_components/angular-i18n/angular-locale_en-zw.js +128 -0
  305. data/vendor/assets/bower_components/angular-i18n/angular-locale_en.js +128 -0
  306. data/vendor/assets/bower_components/angular-i18n/angular-locale_eo-001.js +128 -0
  307. data/vendor/assets/bower_components/angular-i18n/angular-locale_eo.js +128 -0
  308. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-419.js +110 -0
  309. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-ar.js +110 -0
  310. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-bo.js +110 -0
  311. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-cl.js +110 -0
  312. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-co.js +110 -0
  313. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-cr.js +110 -0
  314. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-cu.js +110 -0
  315. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-do.js +110 -0
  316. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-ea.js +110 -0
  317. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-ec.js +110 -0
  318. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-es.js +110 -0
  319. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-gq.js +110 -0
  320. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-gt.js +110 -0
  321. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-hn.js +110 -0
  322. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-ic.js +110 -0
  323. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-mx.js +110 -0
  324. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-ni.js +110 -0
  325. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-pa.js +110 -0
  326. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-pe.js +110 -0
  327. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-ph.js +110 -0
  328. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-pr.js +110 -0
  329. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-py.js +110 -0
  330. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-sv.js +110 -0
  331. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-us.js +110 -0
  332. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-uy.js +110 -0
  333. data/vendor/assets/bower_components/angular-i18n/angular-locale_es-ve.js +110 -0
  334. data/vendor/assets/bower_components/angular-i18n/angular-locale_es.js +110 -0
  335. data/vendor/assets/bower_components/angular-i18n/angular-locale_et-ee.js +128 -0
  336. data/vendor/assets/bower_components/angular-i18n/angular-locale_et.js +128 -0
  337. data/vendor/assets/bower_components/angular-i18n/angular-locale_eu-es.js +110 -0
  338. data/vendor/assets/bower_components/angular-i18n/angular-locale_eu.js +110 -0
  339. data/vendor/assets/bower_components/angular-i18n/angular-locale_ewo-cm.js +128 -0
  340. data/vendor/assets/bower_components/angular-i18n/angular-locale_ewo.js +128 -0
  341. data/vendor/assets/bower_components/angular-i18n/angular-locale_fa-af.js +110 -0
  342. data/vendor/assets/bower_components/angular-i18n/angular-locale_fa-ir.js +110 -0
  343. data/vendor/assets/bower_components/angular-i18n/angular-locale_fa.js +110 -0
  344. data/vendor/assets/bower_components/angular-i18n/angular-locale_ff-cm.js +128 -0
  345. data/vendor/assets/bower_components/angular-i18n/angular-locale_ff-gn.js +128 -0
  346. data/vendor/assets/bower_components/angular-i18n/angular-locale_ff-mr.js +128 -0
  347. data/vendor/assets/bower_components/angular-i18n/angular-locale_ff-sn.js +128 -0
  348. data/vendor/assets/bower_components/angular-i18n/angular-locale_ff.js +128 -0
  349. data/vendor/assets/bower_components/angular-i18n/angular-locale_fi-fi.js +128 -0
  350. data/vendor/assets/bower_components/angular-i18n/angular-locale_fi.js +128 -0
  351. data/vendor/assets/bower_components/angular-i18n/angular-locale_fil-ph.js +128 -0
  352. data/vendor/assets/bower_components/angular-i18n/angular-locale_fil.js +128 -0
  353. data/vendor/assets/bower_components/angular-i18n/angular-locale_fo-fo.js +128 -0
  354. data/vendor/assets/bower_components/angular-i18n/angular-locale_fo.js +128 -0
  355. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-be.js +110 -0
  356. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-bf.js +110 -0
  357. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-bi.js +110 -0
  358. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-bj.js +110 -0
  359. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-bl.js +110 -0
  360. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-ca.js +110 -0
  361. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-cd.js +110 -0
  362. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-cf.js +110 -0
  363. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-cg.js +110 -0
  364. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-ch.js +110 -0
  365. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-ci.js +110 -0
  366. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-cm.js +110 -0
  367. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-dj.js +110 -0
  368. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-dz.js +110 -0
  369. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-fr.js +110 -0
  370. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-ga.js +110 -0
  371. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-gf.js +110 -0
  372. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-gn.js +110 -0
  373. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-gp.js +110 -0
  374. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-gq.js +110 -0
  375. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-ht.js +110 -0
  376. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-km.js +110 -0
  377. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-lu.js +110 -0
  378. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-ma.js +110 -0
  379. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-mc.js +110 -0
  380. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-mf.js +110 -0
  381. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-mg.js +110 -0
  382. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-ml.js +110 -0
  383. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-mq.js +110 -0
  384. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-mr.js +110 -0
  385. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-mu.js +110 -0
  386. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-nc.js +110 -0
  387. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-ne.js +110 -0
  388. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-pf.js +110 -0
  389. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-pm.js +110 -0
  390. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-re.js +110 -0
  391. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-rw.js +110 -0
  392. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-sc.js +110 -0
  393. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-sn.js +110 -0
  394. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-sy.js +110 -0
  395. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-td.js +110 -0
  396. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-tg.js +110 -0
  397. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-tn.js +110 -0
  398. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-vu.js +110 -0
  399. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-wf.js +110 -0
  400. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr-yt.js +110 -0
  401. data/vendor/assets/bower_components/angular-i18n/angular-locale_fr.js +110 -0
  402. data/vendor/assets/bower_components/angular-i18n/angular-locale_fur-it.js +128 -0
  403. data/vendor/assets/bower_components/angular-i18n/angular-locale_fur.js +128 -0
  404. data/vendor/assets/bower_components/angular-i18n/angular-locale_fy-nl.js +128 -0
  405. data/vendor/assets/bower_components/angular-i18n/angular-locale_fy.js +128 -0
  406. data/vendor/assets/bower_components/angular-i18n/angular-locale_ga-ie.js +110 -0
  407. data/vendor/assets/bower_components/angular-i18n/angular-locale_ga.js +110 -0
  408. data/vendor/assets/bower_components/angular-i18n/angular-locale_gd-gb.js +128 -0
  409. data/vendor/assets/bower_components/angular-i18n/angular-locale_gd.js +128 -0
  410. data/vendor/assets/bower_components/angular-i18n/angular-locale_gl-es.js +128 -0
  411. data/vendor/assets/bower_components/angular-i18n/angular-locale_gl.js +128 -0
  412. data/vendor/assets/bower_components/angular-i18n/angular-locale_gsw-ch.js +110 -0
  413. data/vendor/assets/bower_components/angular-i18n/angular-locale_gsw-fr.js +110 -0
  414. data/vendor/assets/bower_components/angular-i18n/angular-locale_gsw-li.js +110 -0
  415. data/vendor/assets/bower_components/angular-i18n/angular-locale_gsw.js +110 -0
  416. data/vendor/assets/bower_components/angular-i18n/angular-locale_gu-in.js +110 -0
  417. data/vendor/assets/bower_components/angular-i18n/angular-locale_gu.js +110 -0
  418. data/vendor/assets/bower_components/angular-i18n/angular-locale_guz-ke.js +128 -0
  419. data/vendor/assets/bower_components/angular-i18n/angular-locale_guz.js +128 -0
  420. data/vendor/assets/bower_components/angular-i18n/angular-locale_gv-im.js +128 -0
  421. data/vendor/assets/bower_components/angular-i18n/angular-locale_gv.js +128 -0
  422. data/vendor/assets/bower_components/angular-i18n/angular-locale_ha-latn-gh.js +128 -0
  423. data/vendor/assets/bower_components/angular-i18n/angular-locale_ha-latn-ne.js +128 -0
  424. data/vendor/assets/bower_components/angular-i18n/angular-locale_ha-latn-ng.js +128 -0
  425. data/vendor/assets/bower_components/angular-i18n/angular-locale_ha-latn.js +128 -0
  426. data/vendor/assets/bower_components/angular-i18n/angular-locale_ha.js +128 -0
  427. data/vendor/assets/bower_components/angular-i18n/angular-locale_haw-us.js +110 -0
  428. data/vendor/assets/bower_components/angular-i18n/angular-locale_haw.js +110 -0
  429. data/vendor/assets/bower_components/angular-i18n/angular-locale_he-il.js +128 -0
  430. data/vendor/assets/bower_components/angular-i18n/angular-locale_he.js +128 -0
  431. data/vendor/assets/bower_components/angular-i18n/angular-locale_hi-in.js +110 -0
  432. data/vendor/assets/bower_components/angular-i18n/angular-locale_hi.js +110 -0
  433. data/vendor/assets/bower_components/angular-i18n/angular-locale_hr-ba.js +128 -0
  434. data/vendor/assets/bower_components/angular-i18n/angular-locale_hr-hr.js +128 -0
  435. data/vendor/assets/bower_components/angular-i18n/angular-locale_hr.js +128 -0
  436. data/vendor/assets/bower_components/angular-i18n/angular-locale_hsb-de.js +128 -0
  437. data/vendor/assets/bower_components/angular-i18n/angular-locale_hsb.js +128 -0
  438. data/vendor/assets/bower_components/angular-i18n/angular-locale_hu-hu.js +110 -0
  439. data/vendor/assets/bower_components/angular-i18n/angular-locale_hu.js +110 -0
  440. data/vendor/assets/bower_components/angular-i18n/angular-locale_hy-am.js +110 -0
  441. data/vendor/assets/bower_components/angular-i18n/angular-locale_hy.js +110 -0
  442. data/vendor/assets/bower_components/angular-i18n/angular-locale_ia-fr.js +128 -0
  443. data/vendor/assets/bower_components/angular-i18n/angular-locale_ia.js +128 -0
  444. data/vendor/assets/bower_components/angular-i18n/angular-locale_id-id.js +110 -0
  445. data/vendor/assets/bower_components/angular-i18n/angular-locale_id.js +110 -0
  446. data/vendor/assets/bower_components/angular-i18n/angular-locale_ig-ng.js +128 -0
  447. data/vendor/assets/bower_components/angular-i18n/angular-locale_ig.js +128 -0
  448. data/vendor/assets/bower_components/angular-i18n/angular-locale_ii-cn.js +128 -0
  449. data/vendor/assets/bower_components/angular-i18n/angular-locale_ii.js +128 -0
  450. data/vendor/assets/bower_components/angular-i18n/angular-locale_in.js +110 -0
  451. data/vendor/assets/bower_components/angular-i18n/angular-locale_is-is.js +141 -0
  452. data/vendor/assets/bower_components/angular-i18n/angular-locale_is.js +141 -0
  453. data/vendor/assets/bower_components/angular-i18n/angular-locale_it-ch.js +128 -0
  454. data/vendor/assets/bower_components/angular-i18n/angular-locale_it-it.js +128 -0
  455. data/vendor/assets/bower_components/angular-i18n/angular-locale_it-sm.js +128 -0
  456. data/vendor/assets/bower_components/angular-i18n/angular-locale_it.js +128 -0
  457. data/vendor/assets/bower_components/angular-i18n/angular-locale_iw.js +128 -0
  458. data/vendor/assets/bower_components/angular-i18n/angular-locale_ja-jp.js +110 -0
  459. data/vendor/assets/bower_components/angular-i18n/angular-locale_ja.js +110 -0
  460. data/vendor/assets/bower_components/angular-i18n/angular-locale_jgo-cm.js +128 -0
  461. data/vendor/assets/bower_components/angular-i18n/angular-locale_jgo.js +128 -0
  462. data/vendor/assets/bower_components/angular-i18n/angular-locale_jmc-tz.js +128 -0
  463. data/vendor/assets/bower_components/angular-i18n/angular-locale_jmc.js +128 -0
  464. data/vendor/assets/bower_components/angular-i18n/angular-locale_ka-ge.js +110 -0
  465. data/vendor/assets/bower_components/angular-i18n/angular-locale_ka.js +110 -0
  466. data/vendor/assets/bower_components/angular-i18n/angular-locale_kab-dz.js +128 -0
  467. data/vendor/assets/bower_components/angular-i18n/angular-locale_kab.js +128 -0
  468. data/vendor/assets/bower_components/angular-i18n/angular-locale_kam-ke.js +128 -0
  469. data/vendor/assets/bower_components/angular-i18n/angular-locale_kam.js +128 -0
  470. data/vendor/assets/bower_components/angular-i18n/angular-locale_kde-tz.js +128 -0
  471. data/vendor/assets/bower_components/angular-i18n/angular-locale_kde.js +128 -0
  472. data/vendor/assets/bower_components/angular-i18n/angular-locale_kea-cv.js +128 -0
  473. data/vendor/assets/bower_components/angular-i18n/angular-locale_kea.js +128 -0
  474. data/vendor/assets/bower_components/angular-i18n/angular-locale_khq-ml.js +128 -0
  475. data/vendor/assets/bower_components/angular-i18n/angular-locale_khq.js +128 -0
  476. data/vendor/assets/bower_components/angular-i18n/angular-locale_ki-ke.js +128 -0
  477. data/vendor/assets/bower_components/angular-i18n/angular-locale_ki.js +128 -0
  478. data/vendor/assets/bower_components/angular-i18n/angular-locale_kk-cyrl-kz.js +110 -0
  479. data/vendor/assets/bower_components/angular-i18n/angular-locale_kk-cyrl.js +110 -0
  480. data/vendor/assets/bower_components/angular-i18n/angular-locale_kk.js +110 -0
  481. data/vendor/assets/bower_components/angular-i18n/angular-locale_kkj-cm.js +128 -0
  482. data/vendor/assets/bower_components/angular-i18n/angular-locale_kkj.js +128 -0
  483. data/vendor/assets/bower_components/angular-i18n/angular-locale_kl-gl.js +128 -0
  484. data/vendor/assets/bower_components/angular-i18n/angular-locale_kl.js +128 -0
  485. data/vendor/assets/bower_components/angular-i18n/angular-locale_kln-ke.js +128 -0
  486. data/vendor/assets/bower_components/angular-i18n/angular-locale_kln.js +128 -0
  487. data/vendor/assets/bower_components/angular-i18n/angular-locale_km-kh.js +110 -0
  488. data/vendor/assets/bower_components/angular-i18n/angular-locale_km.js +110 -0
  489. data/vendor/assets/bower_components/angular-i18n/angular-locale_kn-in.js +110 -0
  490. data/vendor/assets/bower_components/angular-i18n/angular-locale_kn.js +110 -0
  491. data/vendor/assets/bower_components/angular-i18n/angular-locale_ko-kp.js +110 -0
  492. data/vendor/assets/bower_components/angular-i18n/angular-locale_ko-kr.js +110 -0
  493. data/vendor/assets/bower_components/angular-i18n/angular-locale_ko.js +110 -0
  494. data/vendor/assets/bower_components/angular-i18n/angular-locale_kok-in.js +128 -0
  495. data/vendor/assets/bower_components/angular-i18n/angular-locale_kok.js +128 -0
  496. data/vendor/assets/bower_components/angular-i18n/angular-locale_ks-arab-in.js +128 -0
  497. data/vendor/assets/bower_components/angular-i18n/angular-locale_ks-arab.js +128 -0
  498. data/vendor/assets/bower_components/angular-i18n/angular-locale_ks.js +128 -0
  499. data/vendor/assets/bower_components/angular-i18n/angular-locale_ksb-tz.js +128 -0
  500. data/vendor/assets/bower_components/angular-i18n/angular-locale_ksb.js +128 -0
  501. data/vendor/assets/bower_components/angular-i18n/angular-locale_ksf-cm.js +128 -0
  502. data/vendor/assets/bower_components/angular-i18n/angular-locale_ksf.js +128 -0
  503. data/vendor/assets/bower_components/angular-i18n/angular-locale_ksh-de.js +128 -0
  504. data/vendor/assets/bower_components/angular-i18n/angular-locale_ksh.js +128 -0
  505. data/vendor/assets/bower_components/angular-i18n/angular-locale_kw-gb.js +128 -0
  506. data/vendor/assets/bower_components/angular-i18n/angular-locale_kw.js +128 -0
  507. data/vendor/assets/bower_components/angular-i18n/angular-locale_ky-cyrl-kg.js +110 -0
  508. data/vendor/assets/bower_components/angular-i18n/angular-locale_ky-cyrl.js +110 -0
  509. data/vendor/assets/bower_components/angular-i18n/angular-locale_ky.js +110 -0
  510. data/vendor/assets/bower_components/angular-i18n/angular-locale_lag-tz.js +128 -0
  511. data/vendor/assets/bower_components/angular-i18n/angular-locale_lag.js +128 -0
  512. data/vendor/assets/bower_components/angular-i18n/angular-locale_lb-lu.js +128 -0
  513. data/vendor/assets/bower_components/angular-i18n/angular-locale_lb.js +128 -0
  514. data/vendor/assets/bower_components/angular-i18n/angular-locale_lg-ug.js +128 -0
  515. data/vendor/assets/bower_components/angular-i18n/angular-locale_lg.js +128 -0
  516. data/vendor/assets/bower_components/angular-i18n/angular-locale_lkt-us.js +128 -0
  517. data/vendor/assets/bower_components/angular-i18n/angular-locale_lkt.js +128 -0
  518. data/vendor/assets/bower_components/angular-i18n/angular-locale_ln-ao.js +110 -0
  519. data/vendor/assets/bower_components/angular-i18n/angular-locale_ln-cd.js +110 -0
  520. data/vendor/assets/bower_components/angular-i18n/angular-locale_ln-cf.js +110 -0
  521. data/vendor/assets/bower_components/angular-i18n/angular-locale_ln-cg.js +110 -0
  522. data/vendor/assets/bower_components/angular-i18n/angular-locale_ln.js +110 -0
  523. data/vendor/assets/bower_components/angular-i18n/angular-locale_lo-la.js +110 -0
  524. data/vendor/assets/bower_components/angular-i18n/angular-locale_lo.js +110 -0
  525. data/vendor/assets/bower_components/angular-i18n/angular-locale_lt-lt.js +128 -0
  526. data/vendor/assets/bower_components/angular-i18n/angular-locale_lt.js +128 -0
  527. data/vendor/assets/bower_components/angular-i18n/angular-locale_lu-cd.js +128 -0
  528. data/vendor/assets/bower_components/angular-i18n/angular-locale_lu.js +128 -0
  529. data/vendor/assets/bower_components/angular-i18n/angular-locale_luo-ke.js +128 -0
  530. data/vendor/assets/bower_components/angular-i18n/angular-locale_luo.js +128 -0
  531. data/vendor/assets/bower_components/angular-i18n/angular-locale_luy-ke.js +128 -0
  532. data/vendor/assets/bower_components/angular-i18n/angular-locale_luy.js +128 -0
  533. data/vendor/assets/bower_components/angular-i18n/angular-locale_lv-lv.js +128 -0
  534. data/vendor/assets/bower_components/angular-i18n/angular-locale_lv.js +128 -0
  535. data/vendor/assets/bower_components/angular-i18n/angular-locale_mas-ke.js +128 -0
  536. data/vendor/assets/bower_components/angular-i18n/angular-locale_mas-tz.js +128 -0
  537. data/vendor/assets/bower_components/angular-i18n/angular-locale_mas.js +128 -0
  538. data/vendor/assets/bower_components/angular-i18n/angular-locale_mer-ke.js +128 -0
  539. data/vendor/assets/bower_components/angular-i18n/angular-locale_mer.js +128 -0
  540. data/vendor/assets/bower_components/angular-i18n/angular-locale_mfe-mu.js +128 -0
  541. data/vendor/assets/bower_components/angular-i18n/angular-locale_mfe.js +128 -0
  542. data/vendor/assets/bower_components/angular-i18n/angular-locale_mg-mg.js +128 -0
  543. data/vendor/assets/bower_components/angular-i18n/angular-locale_mg.js +128 -0
  544. data/vendor/assets/bower_components/angular-i18n/angular-locale_mgh-mz.js +128 -0
  545. data/vendor/assets/bower_components/angular-i18n/angular-locale_mgh.js +128 -0
  546. data/vendor/assets/bower_components/angular-i18n/angular-locale_mgo-cm.js +128 -0
  547. data/vendor/assets/bower_components/angular-i18n/angular-locale_mgo.js +128 -0
  548. data/vendor/assets/bower_components/angular-i18n/angular-locale_mk-mk.js +128 -0
  549. data/vendor/assets/bower_components/angular-i18n/angular-locale_mk.js +128 -0
  550. data/vendor/assets/bower_components/angular-i18n/angular-locale_ml-in.js +110 -0
  551. data/vendor/assets/bower_components/angular-i18n/angular-locale_ml.js +110 -0
  552. data/vendor/assets/bower_components/angular-i18n/angular-locale_mn-cyrl-mn.js +110 -0
  553. data/vendor/assets/bower_components/angular-i18n/angular-locale_mn-cyrl.js +110 -0
  554. data/vendor/assets/bower_components/angular-i18n/angular-locale_mn.js +110 -0
  555. data/vendor/assets/bower_components/angular-i18n/angular-locale_mr-in.js +110 -0
  556. data/vendor/assets/bower_components/angular-i18n/angular-locale_mr.js +110 -0
  557. data/vendor/assets/bower_components/angular-i18n/angular-locale_ms-bn.js +99 -0
  558. data/vendor/assets/bower_components/angular-i18n/angular-locale_ms-latn-bn.js +110 -0
  559. data/vendor/assets/bower_components/angular-i18n/angular-locale_ms-latn-my.js +110 -0
  560. data/vendor/assets/bower_components/angular-i18n/angular-locale_ms-latn-sg.js +110 -0
  561. data/vendor/assets/bower_components/angular-i18n/angular-locale_ms-latn.js +110 -0
  562. data/vendor/assets/bower_components/angular-i18n/angular-locale_ms-my.js +99 -0
  563. data/vendor/assets/bower_components/angular-i18n/angular-locale_ms.js +110 -0
  564. data/vendor/assets/bower_components/angular-i18n/angular-locale_mt-mt.js +110 -0
  565. data/vendor/assets/bower_components/angular-i18n/angular-locale_mt.js +110 -0
  566. data/vendor/assets/bower_components/angular-i18n/angular-locale_mua-cm.js +128 -0
  567. data/vendor/assets/bower_components/angular-i18n/angular-locale_mua.js +128 -0
  568. data/vendor/assets/bower_components/angular-i18n/angular-locale_my-mm.js +110 -0
  569. data/vendor/assets/bower_components/angular-i18n/angular-locale_my.js +110 -0
  570. data/vendor/assets/bower_components/angular-i18n/angular-locale_naq-na.js +128 -0
  571. data/vendor/assets/bower_components/angular-i18n/angular-locale_naq.js +128 -0
  572. data/vendor/assets/bower_components/angular-i18n/angular-locale_nb-no.js +110 -0
  573. data/vendor/assets/bower_components/angular-i18n/angular-locale_nb-sj.js +110 -0
  574. data/vendor/assets/bower_components/angular-i18n/angular-locale_nb.js +110 -0
  575. data/vendor/assets/bower_components/angular-i18n/angular-locale_nd-zw.js +128 -0
  576. data/vendor/assets/bower_components/angular-i18n/angular-locale_nd.js +128 -0
  577. data/vendor/assets/bower_components/angular-i18n/angular-locale_ne-in.js +110 -0
  578. data/vendor/assets/bower_components/angular-i18n/angular-locale_ne-np.js +110 -0
  579. data/vendor/assets/bower_components/angular-i18n/angular-locale_ne.js +110 -0
  580. data/vendor/assets/bower_components/angular-i18n/angular-locale_nl-aw.js +128 -0
  581. data/vendor/assets/bower_components/angular-i18n/angular-locale_nl-be.js +128 -0
  582. data/vendor/assets/bower_components/angular-i18n/angular-locale_nl-bq.js +128 -0
  583. data/vendor/assets/bower_components/angular-i18n/angular-locale_nl-cw.js +128 -0
  584. data/vendor/assets/bower_components/angular-i18n/angular-locale_nl-nl.js +128 -0
  585. data/vendor/assets/bower_components/angular-i18n/angular-locale_nl-sr.js +128 -0
  586. data/vendor/assets/bower_components/angular-i18n/angular-locale_nl-sx.js +128 -0
  587. data/vendor/assets/bower_components/angular-i18n/angular-locale_nl.js +128 -0
  588. data/vendor/assets/bower_components/angular-i18n/angular-locale_nmg-cm.js +128 -0
  589. data/vendor/assets/bower_components/angular-i18n/angular-locale_nmg.js +128 -0
  590. data/vendor/assets/bower_components/angular-i18n/angular-locale_nn-no.js +128 -0
  591. data/vendor/assets/bower_components/angular-i18n/angular-locale_nn.js +128 -0
  592. data/vendor/assets/bower_components/angular-i18n/angular-locale_nnh-cm.js +128 -0
  593. data/vendor/assets/bower_components/angular-i18n/angular-locale_nnh.js +128 -0
  594. data/vendor/assets/bower_components/angular-i18n/angular-locale_no-no.js +110 -0
  595. data/vendor/assets/bower_components/angular-i18n/angular-locale_no.js +110 -0
  596. data/vendor/assets/bower_components/angular-i18n/angular-locale_nr-za.js +128 -0
  597. data/vendor/assets/bower_components/angular-i18n/angular-locale_nr.js +128 -0
  598. data/vendor/assets/bower_components/angular-i18n/angular-locale_nso-za.js +128 -0
  599. data/vendor/assets/bower_components/angular-i18n/angular-locale_nso.js +128 -0
  600. data/vendor/assets/bower_components/angular-i18n/angular-locale_nus-sd.js +128 -0
  601. data/vendor/assets/bower_components/angular-i18n/angular-locale_nus.js +128 -0
  602. data/vendor/assets/bower_components/angular-i18n/angular-locale_nyn-ug.js +128 -0
  603. data/vendor/assets/bower_components/angular-i18n/angular-locale_nyn.js +128 -0
  604. data/vendor/assets/bower_components/angular-i18n/angular-locale_om-et.js +128 -0
  605. data/vendor/assets/bower_components/angular-i18n/angular-locale_om-ke.js +128 -0
  606. data/vendor/assets/bower_components/angular-i18n/angular-locale_om.js +128 -0
  607. data/vendor/assets/bower_components/angular-i18n/angular-locale_or-in.js +110 -0
  608. data/vendor/assets/bower_components/angular-i18n/angular-locale_or.js +110 -0
  609. data/vendor/assets/bower_components/angular-i18n/angular-locale_os-ge.js +128 -0
  610. data/vendor/assets/bower_components/angular-i18n/angular-locale_os-ru.js +128 -0
  611. data/vendor/assets/bower_components/angular-i18n/angular-locale_os.js +128 -0
  612. data/vendor/assets/bower_components/angular-i18n/angular-locale_pa-arab-pk.js +110 -0
  613. data/vendor/assets/bower_components/angular-i18n/angular-locale_pa-arab.js +110 -0
  614. data/vendor/assets/bower_components/angular-i18n/angular-locale_pa-guru-in.js +110 -0
  615. data/vendor/assets/bower_components/angular-i18n/angular-locale_pa-guru.js +110 -0
  616. data/vendor/assets/bower_components/angular-i18n/angular-locale_pa.js +110 -0
  617. data/vendor/assets/bower_components/angular-i18n/angular-locale_pl-pl.js +128 -0
  618. data/vendor/assets/bower_components/angular-i18n/angular-locale_pl.js +128 -0
  619. data/vendor/assets/bower_components/angular-i18n/angular-locale_ps-af.js +128 -0
  620. data/vendor/assets/bower_components/angular-i18n/angular-locale_ps.js +128 -0
  621. data/vendor/assets/bower_components/angular-i18n/angular-locale_pt-ao.js +110 -0
  622. data/vendor/assets/bower_components/angular-i18n/angular-locale_pt-br.js +110 -0
  623. data/vendor/assets/bower_components/angular-i18n/angular-locale_pt-cv.js +110 -0
  624. data/vendor/assets/bower_components/angular-i18n/angular-locale_pt-gw.js +110 -0
  625. data/vendor/assets/bower_components/angular-i18n/angular-locale_pt-mo.js +110 -0
  626. data/vendor/assets/bower_components/angular-i18n/angular-locale_pt-mz.js +110 -0
  627. data/vendor/assets/bower_components/angular-i18n/angular-locale_pt-pt.js +110 -0
  628. data/vendor/assets/bower_components/angular-i18n/angular-locale_pt-st.js +110 -0
  629. data/vendor/assets/bower_components/angular-i18n/angular-locale_pt-tl.js +110 -0
  630. data/vendor/assets/bower_components/angular-i18n/angular-locale_pt.js +110 -0
  631. data/vendor/assets/bower_components/angular-i18n/angular-locale_qu-bo.js +128 -0
  632. data/vendor/assets/bower_components/angular-i18n/angular-locale_qu-ec.js +128 -0
  633. data/vendor/assets/bower_components/angular-i18n/angular-locale_qu-pe.js +128 -0
  634. data/vendor/assets/bower_components/angular-i18n/angular-locale_qu.js +128 -0
  635. data/vendor/assets/bower_components/angular-i18n/angular-locale_rm-ch.js +128 -0
  636. data/vendor/assets/bower_components/angular-i18n/angular-locale_rm.js +128 -0
  637. data/vendor/assets/bower_components/angular-i18n/angular-locale_rn-bi.js +128 -0
  638. data/vendor/assets/bower_components/angular-i18n/angular-locale_rn.js +128 -0
  639. data/vendor/assets/bower_components/angular-i18n/angular-locale_ro-md.js +128 -0
  640. data/vendor/assets/bower_components/angular-i18n/angular-locale_ro-ro.js +128 -0
  641. data/vendor/assets/bower_components/angular-i18n/angular-locale_ro.js +128 -0
  642. data/vendor/assets/bower_components/angular-i18n/angular-locale_rof-tz.js +128 -0
  643. data/vendor/assets/bower_components/angular-i18n/angular-locale_rof.js +128 -0
  644. data/vendor/assets/bower_components/angular-i18n/angular-locale_ru-by.js +128 -0
  645. data/vendor/assets/bower_components/angular-i18n/angular-locale_ru-kg.js +128 -0
  646. data/vendor/assets/bower_components/angular-i18n/angular-locale_ru-kz.js +128 -0
  647. data/vendor/assets/bower_components/angular-i18n/angular-locale_ru-md.js +128 -0
  648. data/vendor/assets/bower_components/angular-i18n/angular-locale_ru-ru.js +128 -0
  649. data/vendor/assets/bower_components/angular-i18n/angular-locale_ru-ua.js +128 -0
  650. data/vendor/assets/bower_components/angular-i18n/angular-locale_ru.js +128 -0
  651. data/vendor/assets/bower_components/angular-i18n/angular-locale_rw-rw.js +128 -0
  652. data/vendor/assets/bower_components/angular-i18n/angular-locale_rw.js +128 -0
  653. data/vendor/assets/bower_components/angular-i18n/angular-locale_rwk-tz.js +128 -0
  654. data/vendor/assets/bower_components/angular-i18n/angular-locale_rwk.js +128 -0
  655. data/vendor/assets/bower_components/angular-i18n/angular-locale_sah-ru.js +128 -0
  656. data/vendor/assets/bower_components/angular-i18n/angular-locale_sah.js +128 -0
  657. data/vendor/assets/bower_components/angular-i18n/angular-locale_saq-ke.js +128 -0
  658. data/vendor/assets/bower_components/angular-i18n/angular-locale_saq.js +128 -0
  659. data/vendor/assets/bower_components/angular-i18n/angular-locale_sbp-tz.js +128 -0
  660. data/vendor/assets/bower_components/angular-i18n/angular-locale_sbp.js +128 -0
  661. data/vendor/assets/bower_components/angular-i18n/angular-locale_se-fi.js +128 -0
  662. data/vendor/assets/bower_components/angular-i18n/angular-locale_se-no.js +128 -0
  663. data/vendor/assets/bower_components/angular-i18n/angular-locale_se-se.js +128 -0
  664. data/vendor/assets/bower_components/angular-i18n/angular-locale_se.js +128 -0
  665. data/vendor/assets/bower_components/angular-i18n/angular-locale_seh-mz.js +128 -0
  666. data/vendor/assets/bower_components/angular-i18n/angular-locale_seh.js +128 -0
  667. data/vendor/assets/bower_components/angular-i18n/angular-locale_ses-ml.js +128 -0
  668. data/vendor/assets/bower_components/angular-i18n/angular-locale_ses.js +128 -0
  669. data/vendor/assets/bower_components/angular-i18n/angular-locale_sg-cf.js +128 -0
  670. data/vendor/assets/bower_components/angular-i18n/angular-locale_sg.js +128 -0
  671. data/vendor/assets/bower_components/angular-i18n/angular-locale_shi-latn-ma.js +128 -0
  672. data/vendor/assets/bower_components/angular-i18n/angular-locale_shi-latn.js +128 -0
  673. data/vendor/assets/bower_components/angular-i18n/angular-locale_shi-tfng-ma.js +128 -0
  674. data/vendor/assets/bower_components/angular-i18n/angular-locale_shi-tfng.js +128 -0
  675. data/vendor/assets/bower_components/angular-i18n/angular-locale_shi.js +128 -0
  676. data/vendor/assets/bower_components/angular-i18n/angular-locale_si-lk.js +128 -0
  677. data/vendor/assets/bower_components/angular-i18n/angular-locale_si.js +128 -0
  678. data/vendor/assets/bower_components/angular-i18n/angular-locale_sk-sk.js +128 -0
  679. data/vendor/assets/bower_components/angular-i18n/angular-locale_sk.js +128 -0
  680. data/vendor/assets/bower_components/angular-i18n/angular-locale_sl-si.js +128 -0
  681. data/vendor/assets/bower_components/angular-i18n/angular-locale_sl.js +128 -0
  682. data/vendor/assets/bower_components/angular-i18n/angular-locale_smn-fi.js +128 -0
  683. data/vendor/assets/bower_components/angular-i18n/angular-locale_smn.js +128 -0
  684. data/vendor/assets/bower_components/angular-i18n/angular-locale_sn-zw.js +128 -0
  685. data/vendor/assets/bower_components/angular-i18n/angular-locale_sn.js +128 -0
  686. data/vendor/assets/bower_components/angular-i18n/angular-locale_so-dj.js +128 -0
  687. data/vendor/assets/bower_components/angular-i18n/angular-locale_so-et.js +128 -0
  688. data/vendor/assets/bower_components/angular-i18n/angular-locale_so-ke.js +128 -0
  689. data/vendor/assets/bower_components/angular-i18n/angular-locale_so-so.js +128 -0
  690. data/vendor/assets/bower_components/angular-i18n/angular-locale_so.js +128 -0
  691. data/vendor/assets/bower_components/angular-i18n/angular-locale_sq-al.js +110 -0
  692. data/vendor/assets/bower_components/angular-i18n/angular-locale_sq-mk.js +110 -0
  693. data/vendor/assets/bower_components/angular-i18n/angular-locale_sq-xk.js +110 -0
  694. data/vendor/assets/bower_components/angular-i18n/angular-locale_sq.js +110 -0
  695. data/vendor/assets/bower_components/angular-i18n/angular-locale_sr-cyrl-ba.js +128 -0
  696. data/vendor/assets/bower_components/angular-i18n/angular-locale_sr-cyrl-me.js +128 -0
  697. data/vendor/assets/bower_components/angular-i18n/angular-locale_sr-cyrl-rs.js +128 -0
  698. data/vendor/assets/bower_components/angular-i18n/angular-locale_sr-cyrl-xk.js +128 -0
  699. data/vendor/assets/bower_components/angular-i18n/angular-locale_sr-cyrl.js +128 -0
  700. data/vendor/assets/bower_components/angular-i18n/angular-locale_sr-latn-ba.js +128 -0
  701. data/vendor/assets/bower_components/angular-i18n/angular-locale_sr-latn-me.js +128 -0
  702. data/vendor/assets/bower_components/angular-i18n/angular-locale_sr-latn-rs.js +128 -0
  703. data/vendor/assets/bower_components/angular-i18n/angular-locale_sr-latn-xk.js +128 -0
  704. data/vendor/assets/bower_components/angular-i18n/angular-locale_sr-latn.js +128 -0
  705. data/vendor/assets/bower_components/angular-i18n/angular-locale_sr.js +128 -0
  706. data/vendor/assets/bower_components/angular-i18n/angular-locale_ss-sz.js +128 -0
  707. data/vendor/assets/bower_components/angular-i18n/angular-locale_ss-za.js +128 -0
  708. data/vendor/assets/bower_components/angular-i18n/angular-locale_ss.js +128 -0
  709. data/vendor/assets/bower_components/angular-i18n/angular-locale_ssy-er.js +128 -0
  710. data/vendor/assets/bower_components/angular-i18n/angular-locale_ssy.js +128 -0
  711. data/vendor/assets/bower_components/angular-i18n/angular-locale_st-ls.js +115 -0
  712. data/vendor/assets/bower_components/angular-i18n/angular-locale_st-za.js +115 -0
  713. data/vendor/assets/bower_components/angular-i18n/angular-locale_st.js +115 -0
  714. data/vendor/assets/bower_components/angular-i18n/angular-locale_sv-ax.js +128 -0
  715. data/vendor/assets/bower_components/angular-i18n/angular-locale_sv-fi.js +128 -0
  716. data/vendor/assets/bower_components/angular-i18n/angular-locale_sv-se.js +128 -0
  717. data/vendor/assets/bower_components/angular-i18n/angular-locale_sv.js +128 -0
  718. data/vendor/assets/bower_components/angular-i18n/angular-locale_sw-cd.js +128 -0
  719. data/vendor/assets/bower_components/angular-i18n/angular-locale_sw-ke.js +128 -0
  720. data/vendor/assets/bower_components/angular-i18n/angular-locale_sw-tz.js +128 -0
  721. data/vendor/assets/bower_components/angular-i18n/angular-locale_sw-ug.js +128 -0
  722. data/vendor/assets/bower_components/angular-i18n/angular-locale_sw.js +128 -0
  723. data/vendor/assets/bower_components/angular-i18n/angular-locale_swc-cd.js +128 -0
  724. data/vendor/assets/bower_components/angular-i18n/angular-locale_swc.js +128 -0
  725. data/vendor/assets/bower_components/angular-i18n/angular-locale_ta-in.js +110 -0
  726. data/vendor/assets/bower_components/angular-i18n/angular-locale_ta-lk.js +110 -0
  727. data/vendor/assets/bower_components/angular-i18n/angular-locale_ta-my.js +110 -0
  728. data/vendor/assets/bower_components/angular-i18n/angular-locale_ta-sg.js +110 -0
  729. data/vendor/assets/bower_components/angular-i18n/angular-locale_ta.js +110 -0
  730. data/vendor/assets/bower_components/angular-i18n/angular-locale_te-in.js +110 -0
  731. data/vendor/assets/bower_components/angular-i18n/angular-locale_te.js +110 -0
  732. data/vendor/assets/bower_components/angular-i18n/angular-locale_teo-ke.js +128 -0
  733. data/vendor/assets/bower_components/angular-i18n/angular-locale_teo-ug.js +128 -0
  734. data/vendor/assets/bower_components/angular-i18n/angular-locale_teo.js +128 -0
  735. data/vendor/assets/bower_components/angular-i18n/angular-locale_tg-cyrl-tj.js +115 -0
  736. data/vendor/assets/bower_components/angular-i18n/angular-locale_tg-cyrl.js +115 -0
  737. data/vendor/assets/bower_components/angular-i18n/angular-locale_tg.js +115 -0
  738. data/vendor/assets/bower_components/angular-i18n/angular-locale_th-th.js +110 -0
  739. data/vendor/assets/bower_components/angular-i18n/angular-locale_th.js +110 -0
  740. data/vendor/assets/bower_components/angular-i18n/angular-locale_ti-er.js +128 -0
  741. data/vendor/assets/bower_components/angular-i18n/angular-locale_ti-et.js +128 -0
  742. data/vendor/assets/bower_components/angular-i18n/angular-locale_ti.js +128 -0
  743. data/vendor/assets/bower_components/angular-i18n/angular-locale_tig-er.js +115 -0
  744. data/vendor/assets/bower_components/angular-i18n/angular-locale_tig.js +115 -0
  745. data/vendor/assets/bower_components/angular-i18n/angular-locale_tl.js +128 -0
  746. data/vendor/assets/bower_components/angular-i18n/angular-locale_tn-bw.js +128 -0
  747. data/vendor/assets/bower_components/angular-i18n/angular-locale_tn-za.js +128 -0
  748. data/vendor/assets/bower_components/angular-i18n/angular-locale_tn.js +128 -0
  749. data/vendor/assets/bower_components/angular-i18n/angular-locale_to-to.js +128 -0
  750. data/vendor/assets/bower_components/angular-i18n/angular-locale_to.js +128 -0
  751. data/vendor/assets/bower_components/angular-i18n/angular-locale_tr-cy.js +110 -0
  752. data/vendor/assets/bower_components/angular-i18n/angular-locale_tr-tr.js +110 -0
  753. data/vendor/assets/bower_components/angular-i18n/angular-locale_tr.js +110 -0
  754. data/vendor/assets/bower_components/angular-i18n/angular-locale_ts-za.js +128 -0
  755. data/vendor/assets/bower_components/angular-i18n/angular-locale_ts.js +128 -0
  756. data/vendor/assets/bower_components/angular-i18n/angular-locale_twq-ne.js +128 -0
  757. data/vendor/assets/bower_components/angular-i18n/angular-locale_twq.js +128 -0
  758. data/vendor/assets/bower_components/angular-i18n/angular-locale_tzm-latn-ma.js +128 -0
  759. data/vendor/assets/bower_components/angular-i18n/angular-locale_tzm-latn.js +128 -0
  760. data/vendor/assets/bower_components/angular-i18n/angular-locale_tzm.js +128 -0
  761. data/vendor/assets/bower_components/angular-i18n/angular-locale_ug-arab-cn.js +128 -0
  762. data/vendor/assets/bower_components/angular-i18n/angular-locale_ug-arab.js +128 -0
  763. data/vendor/assets/bower_components/angular-i18n/angular-locale_ug.js +128 -0
  764. data/vendor/assets/bower_components/angular-i18n/angular-locale_uk-ua.js +128 -0
  765. data/vendor/assets/bower_components/angular-i18n/angular-locale_uk.js +128 -0
  766. data/vendor/assets/bower_components/angular-i18n/angular-locale_ur-in.js +128 -0
  767. data/vendor/assets/bower_components/angular-i18n/angular-locale_ur-pk.js +128 -0
  768. data/vendor/assets/bower_components/angular-i18n/angular-locale_ur.js +128 -0
  769. data/vendor/assets/bower_components/angular-i18n/angular-locale_uz-arab-af.js +110 -0
  770. data/vendor/assets/bower_components/angular-i18n/angular-locale_uz-arab.js +110 -0
  771. data/vendor/assets/bower_components/angular-i18n/angular-locale_uz-cyrl-uz.js +110 -0
  772. data/vendor/assets/bower_components/angular-i18n/angular-locale_uz-cyrl.js +110 -0
  773. data/vendor/assets/bower_components/angular-i18n/angular-locale_uz-latn-uz.js +110 -0
  774. data/vendor/assets/bower_components/angular-i18n/angular-locale_uz-latn.js +110 -0
  775. data/vendor/assets/bower_components/angular-i18n/angular-locale_uz.js +110 -0
  776. data/vendor/assets/bower_components/angular-i18n/angular-locale_vai-latn-lr.js +128 -0
  777. data/vendor/assets/bower_components/angular-i18n/angular-locale_vai-latn.js +128 -0
  778. data/vendor/assets/bower_components/angular-i18n/angular-locale_vai-vaii-lr.js +128 -0
  779. data/vendor/assets/bower_components/angular-i18n/angular-locale_vai-vaii.js +128 -0
  780. data/vendor/assets/bower_components/angular-i18n/angular-locale_vai.js +128 -0
  781. data/vendor/assets/bower_components/angular-i18n/angular-locale_ve-za.js +128 -0
  782. data/vendor/assets/bower_components/angular-i18n/angular-locale_ve.js +128 -0
  783. data/vendor/assets/bower_components/angular-i18n/angular-locale_vi-vn.js +110 -0
  784. data/vendor/assets/bower_components/angular-i18n/angular-locale_vi.js +110 -0
  785. data/vendor/assets/bower_components/angular-i18n/angular-locale_vo-001.js +128 -0
  786. data/vendor/assets/bower_components/angular-i18n/angular-locale_vo.js +128 -0
  787. data/vendor/assets/bower_components/angular-i18n/angular-locale_vun-tz.js +128 -0
  788. data/vendor/assets/bower_components/angular-i18n/angular-locale_vun.js +128 -0
  789. data/vendor/assets/bower_components/angular-i18n/angular-locale_wae-ch.js +128 -0
  790. data/vendor/assets/bower_components/angular-i18n/angular-locale_wae.js +128 -0
  791. data/vendor/assets/bower_components/angular-i18n/angular-locale_wal-et.js +115 -0
  792. data/vendor/assets/bower_components/angular-i18n/angular-locale_wal.js +115 -0
  793. data/vendor/assets/bower_components/angular-i18n/angular-locale_xh-za.js +115 -0
  794. data/vendor/assets/bower_components/angular-i18n/angular-locale_xh.js +115 -0
  795. data/vendor/assets/bower_components/angular-i18n/angular-locale_xog-ug.js +128 -0
  796. data/vendor/assets/bower_components/angular-i18n/angular-locale_xog.js +128 -0
  797. data/vendor/assets/bower_components/angular-i18n/angular-locale_yav-cm.js +128 -0
  798. data/vendor/assets/bower_components/angular-i18n/angular-locale_yav.js +128 -0
  799. data/vendor/assets/bower_components/angular-i18n/angular-locale_yi-001.js +128 -0
  800. data/vendor/assets/bower_components/angular-i18n/angular-locale_yi.js +128 -0
  801. data/vendor/assets/bower_components/angular-i18n/angular-locale_yo-bj.js +128 -0
  802. data/vendor/assets/bower_components/angular-i18n/angular-locale_yo-ng.js +128 -0
  803. data/vendor/assets/bower_components/angular-i18n/angular-locale_yo.js +128 -0
  804. data/vendor/assets/bower_components/angular-i18n/angular-locale_zgh-ma.js +128 -0
  805. data/vendor/assets/bower_components/angular-i18n/angular-locale_zgh.js +128 -0
  806. data/vendor/assets/bower_components/angular-i18n/angular-locale_zh-cn.js +110 -0
  807. data/vendor/assets/bower_components/angular-i18n/angular-locale_zh-hans-cn.js +110 -0
  808. data/vendor/assets/bower_components/angular-i18n/angular-locale_zh-hans-hk.js +110 -0
  809. data/vendor/assets/bower_components/angular-i18n/angular-locale_zh-hans-mo.js +110 -0
  810. data/vendor/assets/bower_components/angular-i18n/angular-locale_zh-hans-sg.js +110 -0
  811. data/vendor/assets/bower_components/angular-i18n/angular-locale_zh-hans.js +110 -0
  812. data/vendor/assets/bower_components/angular-i18n/angular-locale_zh-hant-hk.js +110 -0
  813. data/vendor/assets/bower_components/angular-i18n/angular-locale_zh-hant-mo.js +110 -0
  814. data/vendor/assets/bower_components/angular-i18n/angular-locale_zh-hant-tw.js +110 -0
  815. data/vendor/assets/bower_components/angular-i18n/angular-locale_zh-hant.js +110 -0
  816. data/vendor/assets/bower_components/angular-i18n/angular-locale_zh-hk.js +110 -0
  817. data/vendor/assets/bower_components/angular-i18n/angular-locale_zh-tw.js +110 -0
  818. data/vendor/assets/bower_components/angular-i18n/angular-locale_zh.js +110 -0
  819. data/vendor/assets/bower_components/angular-i18n/angular-locale_zu-za.js +110 -0
  820. data/vendor/assets/bower_components/angular-i18n/angular-locale_zu.js +110 -0
  821. data/vendor/assets/bower_components/angular-i18n/ar-001.js +2 -0
  822. data/vendor/assets/bower_components/angular-i18n/ar-ae.js +2 -0
  823. data/vendor/assets/bower_components/angular-i18n/ar-bh.js +2 -0
  824. data/vendor/assets/bower_components/angular-i18n/ar-dj.js +2 -0
  825. data/vendor/assets/bower_components/angular-i18n/ar-dz.js +2 -0
  826. data/vendor/assets/bower_components/angular-i18n/ar-eg.js +2 -0
  827. data/vendor/assets/bower_components/angular-i18n/ar-eh.js +2 -0
  828. data/vendor/assets/bower_components/angular-i18n/ar-er.js +2 -0
  829. data/vendor/assets/bower_components/angular-i18n/ar-il.js +2 -0
  830. data/vendor/assets/bower_components/angular-i18n/ar-iq.js +2 -0
  831. data/vendor/assets/bower_components/angular-i18n/ar-jo.js +2 -0
  832. data/vendor/assets/bower_components/angular-i18n/ar-km.js +2 -0
  833. data/vendor/assets/bower_components/angular-i18n/ar-kw.js +2 -0
  834. data/vendor/assets/bower_components/angular-i18n/ar-lb.js +2 -0
  835. data/vendor/assets/bower_components/angular-i18n/ar-ly.js +2 -0
  836. data/vendor/assets/bower_components/angular-i18n/ar-ma.js +2 -0
  837. data/vendor/assets/bower_components/angular-i18n/ar-mr.js +2 -0
  838. data/vendor/assets/bower_components/angular-i18n/ar-om.js +2 -0
  839. data/vendor/assets/bower_components/angular-i18n/ar-ps.js +2 -0
  840. data/vendor/assets/bower_components/angular-i18n/ar-qa.js +2 -0
  841. data/vendor/assets/bower_components/angular-i18n/ar-sa.js +2 -0
  842. data/vendor/assets/bower_components/angular-i18n/ar-sd.js +2 -0
  843. data/vendor/assets/bower_components/angular-i18n/ar-so.js +2 -0
  844. data/vendor/assets/bower_components/angular-i18n/ar-ss.js +2 -0
  845. data/vendor/assets/bower_components/angular-i18n/ar-sy.js +2 -0
  846. data/vendor/assets/bower_components/angular-i18n/ar-td.js +2 -0
  847. data/vendor/assets/bower_components/angular-i18n/ar-tn.js +2 -0
  848. data/vendor/assets/bower_components/angular-i18n/ar-ye.js +2 -0
  849. data/vendor/assets/bower_components/angular-i18n/ar.js +2 -0
  850. data/vendor/assets/bower_components/angular-i18n/as-in.js +2 -0
  851. data/vendor/assets/bower_components/angular-i18n/as.js +2 -0
  852. data/vendor/assets/bower_components/angular-i18n/asa-tz.js +2 -0
  853. data/vendor/assets/bower_components/angular-i18n/asa.js +2 -0
  854. data/vendor/assets/bower_components/angular-i18n/ast-es.js +2 -0
  855. data/vendor/assets/bower_components/angular-i18n/ast.js +2 -0
  856. data/vendor/assets/bower_components/angular-i18n/az-cyrl-az.js +2 -0
  857. data/vendor/assets/bower_components/angular-i18n/az-cyrl.js +2 -0
  858. data/vendor/assets/bower_components/angular-i18n/az-latn-az.js +2 -0
  859. data/vendor/assets/bower_components/angular-i18n/az-latn.js +2 -0
  860. data/vendor/assets/bower_components/angular-i18n/az.js +2 -0
  861. data/vendor/assets/bower_components/angular-i18n/bas-cm.js +2 -0
  862. data/vendor/assets/bower_components/angular-i18n/bas.js +2 -0
  863. data/vendor/assets/bower_components/angular-i18n/be-by.js +2 -0
  864. data/vendor/assets/bower_components/angular-i18n/be.js +2 -0
  865. data/vendor/assets/bower_components/angular-i18n/bem-zm.js +2 -0
  866. data/vendor/assets/bower_components/angular-i18n/bem.js +2 -0
  867. data/vendor/assets/bower_components/angular-i18n/bez-tz.js +2 -0
  868. data/vendor/assets/bower_components/angular-i18n/bez.js +2 -0
  869. data/vendor/assets/bower_components/angular-i18n/bg-bg.js +2 -0
  870. data/vendor/assets/bower_components/angular-i18n/bg.js +2 -0
  871. data/vendor/assets/bower_components/angular-i18n/bm-latn-ml.js +2 -0
  872. data/vendor/assets/bower_components/angular-i18n/bm-latn.js +2 -0
  873. data/vendor/assets/bower_components/angular-i18n/bm-ml.js +2 -0
  874. data/vendor/assets/bower_components/angular-i18n/bm.js +2 -0
  875. data/vendor/assets/bower_components/angular-i18n/bn-bd.js +2 -0
  876. data/vendor/assets/bower_components/angular-i18n/bn-in.js +2 -0
  877. data/vendor/assets/bower_components/angular-i18n/bn.js +2 -0
  878. data/vendor/assets/bower_components/angular-i18n/bo-cn.js +2 -0
  879. data/vendor/assets/bower_components/angular-i18n/bo-in.js +2 -0
  880. data/vendor/assets/bower_components/angular-i18n/bo.js +2 -0
  881. data/vendor/assets/bower_components/angular-i18n/bower.json +10 -0
  882. data/vendor/assets/bower_components/angular-i18n/br-fr.js +2 -0
  883. data/vendor/assets/bower_components/angular-i18n/br.js +2 -0
  884. data/vendor/assets/bower_components/angular-i18n/brx-in.js +2 -0
  885. data/vendor/assets/bower_components/angular-i18n/brx.js +2 -0
  886. data/vendor/assets/bower_components/angular-i18n/bs-cyrl-ba.js +2 -0
  887. data/vendor/assets/bower_components/angular-i18n/bs-cyrl.js +2 -0
  888. data/vendor/assets/bower_components/angular-i18n/bs-latn-ba.js +2 -0
  889. data/vendor/assets/bower_components/angular-i18n/bs-latn.js +2 -0
  890. data/vendor/assets/bower_components/angular-i18n/bs.js +2 -0
  891. data/vendor/assets/bower_components/angular-i18n/byn-er.js +2 -0
  892. data/vendor/assets/bower_components/angular-i18n/byn.js +2 -0
  893. data/vendor/assets/bower_components/angular-i18n/ca-ad.js +2 -0
  894. data/vendor/assets/bower_components/angular-i18n/ca-es-valencia.js +2 -0
  895. data/vendor/assets/bower_components/angular-i18n/ca-es.js +2 -0
  896. data/vendor/assets/bower_components/angular-i18n/ca-fr.js +2 -0
  897. data/vendor/assets/bower_components/angular-i18n/ca-it.js +2 -0
  898. data/vendor/assets/bower_components/angular-i18n/ca.js +2 -0
  899. data/vendor/assets/bower_components/angular-i18n/cgg-ug.js +2 -0
  900. data/vendor/assets/bower_components/angular-i18n/cgg.js +2 -0
  901. data/vendor/assets/bower_components/angular-i18n/chr-us.js +2 -0
  902. data/vendor/assets/bower_components/angular-i18n/chr.js +2 -0
  903. data/vendor/assets/bower_components/angular-i18n/ckb-arab-iq.js +2 -0
  904. data/vendor/assets/bower_components/angular-i18n/ckb-arab-ir.js +2 -0
  905. data/vendor/assets/bower_components/angular-i18n/ckb-arab.js +2 -0
  906. data/vendor/assets/bower_components/angular-i18n/ckb-iq.js +2 -0
  907. data/vendor/assets/bower_components/angular-i18n/ckb-ir.js +2 -0
  908. data/vendor/assets/bower_components/angular-i18n/ckb-latn-iq.js +2 -0
  909. data/vendor/assets/bower_components/angular-i18n/ckb-latn.js +2 -0
  910. data/vendor/assets/bower_components/angular-i18n/ckb.js +2 -0
  911. data/vendor/assets/bower_components/angular-i18n/cs-cz.js +2 -0
  912. data/vendor/assets/bower_components/angular-i18n/cs.js +2 -0
  913. data/vendor/assets/bower_components/angular-i18n/cy-gb.js +2 -0
  914. data/vendor/assets/bower_components/angular-i18n/cy.js +2 -0
  915. data/vendor/assets/bower_components/angular-i18n/da-dk.js +2 -0
  916. data/vendor/assets/bower_components/angular-i18n/da-gl.js +2 -0
  917. data/vendor/assets/bower_components/angular-i18n/da.js +2 -0
  918. data/vendor/assets/bower_components/angular-i18n/dav-ke.js +2 -0
  919. data/vendor/assets/bower_components/angular-i18n/dav.js +2 -0
  920. data/vendor/assets/bower_components/angular-i18n/de-at.js +2 -0
  921. data/vendor/assets/bower_components/angular-i18n/de-be.js +2 -0
  922. data/vendor/assets/bower_components/angular-i18n/de-ch.js +2 -0
  923. data/vendor/assets/bower_components/angular-i18n/de-de.js +2 -0
  924. data/vendor/assets/bower_components/angular-i18n/de-li.js +2 -0
  925. data/vendor/assets/bower_components/angular-i18n/de-lu.js +2 -0
  926. data/vendor/assets/bower_components/angular-i18n/de.js +2 -0
  927. data/vendor/assets/bower_components/angular-i18n/dje-ne.js +2 -0
  928. data/vendor/assets/bower_components/angular-i18n/dje.js +2 -0
  929. data/vendor/assets/bower_components/angular-i18n/dsb-de.js +2 -0
  930. data/vendor/assets/bower_components/angular-i18n/dsb.js +2 -0
  931. data/vendor/assets/bower_components/angular-i18n/dua-cm.js +2 -0
  932. data/vendor/assets/bower_components/angular-i18n/dua.js +2 -0
  933. data/vendor/assets/bower_components/angular-i18n/dyo-sn.js +2 -0
  934. data/vendor/assets/bower_components/angular-i18n/dyo.js +2 -0
  935. data/vendor/assets/bower_components/angular-i18n/dz-bt.js +2 -0
  936. data/vendor/assets/bower_components/angular-i18n/dz.js +2 -0
  937. data/vendor/assets/bower_components/angular-i18n/ebu-ke.js +2 -0
  938. data/vendor/assets/bower_components/angular-i18n/ebu.js +2 -0
  939. data/vendor/assets/bower_components/angular-i18n/ee-gh.js +2 -0
  940. data/vendor/assets/bower_components/angular-i18n/ee-tg.js +2 -0
  941. data/vendor/assets/bower_components/angular-i18n/ee.js +2 -0
  942. data/vendor/assets/bower_components/angular-i18n/el-cy.js +2 -0
  943. data/vendor/assets/bower_components/angular-i18n/el-gr.js +2 -0
  944. data/vendor/assets/bower_components/angular-i18n/el.js +2 -0
  945. data/vendor/assets/bower_components/angular-i18n/en-001.js +2 -0
  946. data/vendor/assets/bower_components/angular-i18n/en-150.js +2 -0
  947. data/vendor/assets/bower_components/angular-i18n/en-ag.js +2 -0
  948. data/vendor/assets/bower_components/angular-i18n/en-ai.js +2 -0
  949. data/vendor/assets/bower_components/angular-i18n/en-as.js +2 -0
  950. data/vendor/assets/bower_components/angular-i18n/en-au.js +2 -0
  951. data/vendor/assets/bower_components/angular-i18n/en-bb.js +2 -0
  952. data/vendor/assets/bower_components/angular-i18n/en-be.js +2 -0
  953. data/vendor/assets/bower_components/angular-i18n/en-bm.js +2 -0
  954. data/vendor/assets/bower_components/angular-i18n/en-bs.js +2 -0
  955. data/vendor/assets/bower_components/angular-i18n/en-bw.js +2 -0
  956. data/vendor/assets/bower_components/angular-i18n/en-bz.js +2 -0
  957. data/vendor/assets/bower_components/angular-i18n/en-ca.js +2 -0
  958. data/vendor/assets/bower_components/angular-i18n/en-cc.js +2 -0
  959. data/vendor/assets/bower_components/angular-i18n/en-ck.js +2 -0
  960. data/vendor/assets/bower_components/angular-i18n/en-cm.js +2 -0
  961. data/vendor/assets/bower_components/angular-i18n/en-cx.js +2 -0
  962. data/vendor/assets/bower_components/angular-i18n/en-dg.js +2 -0
  963. data/vendor/assets/bower_components/angular-i18n/en-dm.js +2 -0
  964. data/vendor/assets/bower_components/angular-i18n/en-dsrt-us.js +2 -0
  965. data/vendor/assets/bower_components/angular-i18n/en-dsrt.js +2 -0
  966. data/vendor/assets/bower_components/angular-i18n/en-er.js +2 -0
  967. data/vendor/assets/bower_components/angular-i18n/en-fj.js +2 -0
  968. data/vendor/assets/bower_components/angular-i18n/en-fk.js +2 -0
  969. data/vendor/assets/bower_components/angular-i18n/en-fm.js +2 -0
  970. data/vendor/assets/bower_components/angular-i18n/en-gb.js +2 -0
  971. data/vendor/assets/bower_components/angular-i18n/en-gd.js +2 -0
  972. data/vendor/assets/bower_components/angular-i18n/en-gg.js +2 -0
  973. data/vendor/assets/bower_components/angular-i18n/en-gh.js +2 -0
  974. data/vendor/assets/bower_components/angular-i18n/en-gi.js +2 -0
  975. data/vendor/assets/bower_components/angular-i18n/en-gm.js +2 -0
  976. data/vendor/assets/bower_components/angular-i18n/en-gu.js +2 -0
  977. data/vendor/assets/bower_components/angular-i18n/en-gy.js +2 -0
  978. data/vendor/assets/bower_components/angular-i18n/en-hk.js +2 -0
  979. data/vendor/assets/bower_components/angular-i18n/en-ie.js +2 -0
  980. data/vendor/assets/bower_components/angular-i18n/en-im.js +2 -0
  981. data/vendor/assets/bower_components/angular-i18n/en-in.js +2 -0
  982. data/vendor/assets/bower_components/angular-i18n/en-io.js +2 -0
  983. data/vendor/assets/bower_components/angular-i18n/en-iso.js +2 -0
  984. data/vendor/assets/bower_components/angular-i18n/en-je.js +2 -0
  985. data/vendor/assets/bower_components/angular-i18n/en-jm.js +2 -0
  986. data/vendor/assets/bower_components/angular-i18n/en-ke.js +2 -0
  987. data/vendor/assets/bower_components/angular-i18n/en-ki.js +2 -0
  988. data/vendor/assets/bower_components/angular-i18n/en-kn.js +2 -0
  989. data/vendor/assets/bower_components/angular-i18n/en-ky.js +2 -0
  990. data/vendor/assets/bower_components/angular-i18n/en-lc.js +2 -0
  991. data/vendor/assets/bower_components/angular-i18n/en-lr.js +2 -0
  992. data/vendor/assets/bower_components/angular-i18n/en-ls.js +2 -0
  993. data/vendor/assets/bower_components/angular-i18n/en-mg.js +2 -0
  994. data/vendor/assets/bower_components/angular-i18n/en-mh.js +2 -0
  995. data/vendor/assets/bower_components/angular-i18n/en-mo.js +2 -0
  996. data/vendor/assets/bower_components/angular-i18n/en-mp.js +2 -0
  997. data/vendor/assets/bower_components/angular-i18n/en-ms.js +2 -0
  998. data/vendor/assets/bower_components/angular-i18n/en-mt.js +2 -0
  999. data/vendor/assets/bower_components/angular-i18n/en-mu.js +2 -0
  1000. data/vendor/assets/bower_components/angular-i18n/en-mw.js +2 -0
  1001. data/vendor/assets/bower_components/angular-i18n/en-my.js +2 -0
  1002. data/vendor/assets/bower_components/angular-i18n/en-na.js +2 -0
  1003. data/vendor/assets/bower_components/angular-i18n/en-nf.js +2 -0
  1004. data/vendor/assets/bower_components/angular-i18n/en-ng.js +2 -0
  1005. data/vendor/assets/bower_components/angular-i18n/en-nr.js +2 -0
  1006. data/vendor/assets/bower_components/angular-i18n/en-nu.js +2 -0
  1007. data/vendor/assets/bower_components/angular-i18n/en-nz.js +2 -0
  1008. data/vendor/assets/bower_components/angular-i18n/en-pg.js +2 -0
  1009. data/vendor/assets/bower_components/angular-i18n/en-ph.js +2 -0
  1010. data/vendor/assets/bower_components/angular-i18n/en-pk.js +2 -0
  1011. data/vendor/assets/bower_components/angular-i18n/en-pn.js +2 -0
  1012. data/vendor/assets/bower_components/angular-i18n/en-pr.js +2 -0
  1013. data/vendor/assets/bower_components/angular-i18n/en-pw.js +2 -0
  1014. data/vendor/assets/bower_components/angular-i18n/en-rw.js +2 -0
  1015. data/vendor/assets/bower_components/angular-i18n/en-sb.js +2 -0
  1016. data/vendor/assets/bower_components/angular-i18n/en-sc.js +2 -0
  1017. data/vendor/assets/bower_components/angular-i18n/en-sd.js +2 -0
  1018. data/vendor/assets/bower_components/angular-i18n/en-sg.js +2 -0
  1019. data/vendor/assets/bower_components/angular-i18n/en-sh.js +2 -0
  1020. data/vendor/assets/bower_components/angular-i18n/en-sl.js +2 -0
  1021. data/vendor/assets/bower_components/angular-i18n/en-ss.js +2 -0
  1022. data/vendor/assets/bower_components/angular-i18n/en-sx.js +2 -0
  1023. data/vendor/assets/bower_components/angular-i18n/en-sz.js +2 -0
  1024. data/vendor/assets/bower_components/angular-i18n/en-tc.js +2 -0
  1025. data/vendor/assets/bower_components/angular-i18n/en-tk.js +2 -0
  1026. data/vendor/assets/bower_components/angular-i18n/en-to.js +2 -0
  1027. data/vendor/assets/bower_components/angular-i18n/en-tt.js +2 -0
  1028. data/vendor/assets/bower_components/angular-i18n/en-tv.js +2 -0
  1029. data/vendor/assets/bower_components/angular-i18n/en-tz.js +2 -0
  1030. data/vendor/assets/bower_components/angular-i18n/en-ug.js +2 -0
  1031. data/vendor/assets/bower_components/angular-i18n/en-um.js +2 -0
  1032. data/vendor/assets/bower_components/angular-i18n/en-us.js +2 -0
  1033. data/vendor/assets/bower_components/angular-i18n/en-vc.js +2 -0
  1034. data/vendor/assets/bower_components/angular-i18n/en-vg.js +2 -0
  1035. data/vendor/assets/bower_components/angular-i18n/en-vi.js +2 -0
  1036. data/vendor/assets/bower_components/angular-i18n/en-vu.js +2 -0
  1037. data/vendor/assets/bower_components/angular-i18n/en-ws.js +2 -0
  1038. data/vendor/assets/bower_components/angular-i18n/en-za.js +2 -0
  1039. data/vendor/assets/bower_components/angular-i18n/en-zm.js +2 -0
  1040. data/vendor/assets/bower_components/angular-i18n/en-zw.js +2 -0
  1041. data/vendor/assets/bower_components/angular-i18n/en.js +2 -0
  1042. data/vendor/assets/bower_components/angular-i18n/eo-001.js +2 -0
  1043. data/vendor/assets/bower_components/angular-i18n/eo.js +2 -0
  1044. data/vendor/assets/bower_components/angular-i18n/es-419.js +2 -0
  1045. data/vendor/assets/bower_components/angular-i18n/es-ar.js +2 -0
  1046. data/vendor/assets/bower_components/angular-i18n/es-bo.js +2 -0
  1047. data/vendor/assets/bower_components/angular-i18n/es-cl.js +2 -0
  1048. data/vendor/assets/bower_components/angular-i18n/es-co.js +2 -0
  1049. data/vendor/assets/bower_components/angular-i18n/es-cr.js +2 -0
  1050. data/vendor/assets/bower_components/angular-i18n/es-cu.js +2 -0
  1051. data/vendor/assets/bower_components/angular-i18n/es-do.js +2 -0
  1052. data/vendor/assets/bower_components/angular-i18n/es-ea.js +2 -0
  1053. data/vendor/assets/bower_components/angular-i18n/es-ec.js +2 -0
  1054. data/vendor/assets/bower_components/angular-i18n/es-es.js +2 -0
  1055. data/vendor/assets/bower_components/angular-i18n/es-gq.js +2 -0
  1056. data/vendor/assets/bower_components/angular-i18n/es-gt.js +2 -0
  1057. data/vendor/assets/bower_components/angular-i18n/es-hn.js +2 -0
  1058. data/vendor/assets/bower_components/angular-i18n/es-ic.js +2 -0
  1059. data/vendor/assets/bower_components/angular-i18n/es-mx.js +2 -0
  1060. data/vendor/assets/bower_components/angular-i18n/es-ni.js +2 -0
  1061. data/vendor/assets/bower_components/angular-i18n/es-pa.js +2 -0
  1062. data/vendor/assets/bower_components/angular-i18n/es-pe.js +2 -0
  1063. data/vendor/assets/bower_components/angular-i18n/es-ph.js +2 -0
  1064. data/vendor/assets/bower_components/angular-i18n/es-pr.js +2 -0
  1065. data/vendor/assets/bower_components/angular-i18n/es-py.js +2 -0
  1066. data/vendor/assets/bower_components/angular-i18n/es-sv.js +2 -0
  1067. data/vendor/assets/bower_components/angular-i18n/es-us.js +2 -0
  1068. data/vendor/assets/bower_components/angular-i18n/es-uy.js +2 -0
  1069. data/vendor/assets/bower_components/angular-i18n/es-ve.js +2 -0
  1070. data/vendor/assets/bower_components/angular-i18n/es.js +2 -0
  1071. data/vendor/assets/bower_components/angular-i18n/et-ee.js +2 -0
  1072. data/vendor/assets/bower_components/angular-i18n/et.js +2 -0
  1073. data/vendor/assets/bower_components/angular-i18n/eu-es.js +2 -0
  1074. data/vendor/assets/bower_components/angular-i18n/eu.js +2 -0
  1075. data/vendor/assets/bower_components/angular-i18n/ewo-cm.js +2 -0
  1076. data/vendor/assets/bower_components/angular-i18n/ewo.js +2 -0
  1077. data/vendor/assets/bower_components/angular-i18n/fa-af.js +2 -0
  1078. data/vendor/assets/bower_components/angular-i18n/fa-ir.js +2 -0
  1079. data/vendor/assets/bower_components/angular-i18n/fa.js +2 -0
  1080. data/vendor/assets/bower_components/angular-i18n/ff-cm.js +2 -0
  1081. data/vendor/assets/bower_components/angular-i18n/ff-gn.js +2 -0
  1082. data/vendor/assets/bower_components/angular-i18n/ff-mr.js +2 -0
  1083. data/vendor/assets/bower_components/angular-i18n/ff-sn.js +2 -0
  1084. data/vendor/assets/bower_components/angular-i18n/ff.js +2 -0
  1085. data/vendor/assets/bower_components/angular-i18n/fi-fi.js +2 -0
  1086. data/vendor/assets/bower_components/angular-i18n/fi.js +2 -0
  1087. data/vendor/assets/bower_components/angular-i18n/fil-ph.js +2 -0
  1088. data/vendor/assets/bower_components/angular-i18n/fil.js +2 -0
  1089. data/vendor/assets/bower_components/angular-i18n/fo-fo.js +2 -0
  1090. data/vendor/assets/bower_components/angular-i18n/fo.js +2 -0
  1091. data/vendor/assets/bower_components/angular-i18n/fr-be.js +2 -0
  1092. data/vendor/assets/bower_components/angular-i18n/fr-bf.js +2 -0
  1093. data/vendor/assets/bower_components/angular-i18n/fr-bi.js +2 -0
  1094. data/vendor/assets/bower_components/angular-i18n/fr-bj.js +2 -0
  1095. data/vendor/assets/bower_components/angular-i18n/fr-bl.js +2 -0
  1096. data/vendor/assets/bower_components/angular-i18n/fr-ca.js +2 -0
  1097. data/vendor/assets/bower_components/angular-i18n/fr-cd.js +2 -0
  1098. data/vendor/assets/bower_components/angular-i18n/fr-cf.js +2 -0
  1099. data/vendor/assets/bower_components/angular-i18n/fr-cg.js +2 -0
  1100. data/vendor/assets/bower_components/angular-i18n/fr-ch.js +2 -0
  1101. data/vendor/assets/bower_components/angular-i18n/fr-ci.js +2 -0
  1102. data/vendor/assets/bower_components/angular-i18n/fr-cm.js +2 -0
  1103. data/vendor/assets/bower_components/angular-i18n/fr-dj.js +2 -0
  1104. data/vendor/assets/bower_components/angular-i18n/fr-dz.js +2 -0
  1105. data/vendor/assets/bower_components/angular-i18n/fr-fr.js +2 -0
  1106. data/vendor/assets/bower_components/angular-i18n/fr-ga.js +2 -0
  1107. data/vendor/assets/bower_components/angular-i18n/fr-gf.js +2 -0
  1108. data/vendor/assets/bower_components/angular-i18n/fr-gn.js +2 -0
  1109. data/vendor/assets/bower_components/angular-i18n/fr-gp.js +2 -0
  1110. data/vendor/assets/bower_components/angular-i18n/fr-gq.js +2 -0
  1111. data/vendor/assets/bower_components/angular-i18n/fr-ht.js +2 -0
  1112. data/vendor/assets/bower_components/angular-i18n/fr-km.js +2 -0
  1113. data/vendor/assets/bower_components/angular-i18n/fr-lu.js +2 -0
  1114. data/vendor/assets/bower_components/angular-i18n/fr-ma.js +2 -0
  1115. data/vendor/assets/bower_components/angular-i18n/fr-mc.js +2 -0
  1116. data/vendor/assets/bower_components/angular-i18n/fr-mf.js +2 -0
  1117. data/vendor/assets/bower_components/angular-i18n/fr-mg.js +2 -0
  1118. data/vendor/assets/bower_components/angular-i18n/fr-ml.js +2 -0
  1119. data/vendor/assets/bower_components/angular-i18n/fr-mq.js +2 -0
  1120. data/vendor/assets/bower_components/angular-i18n/fr-mr.js +2 -0
  1121. data/vendor/assets/bower_components/angular-i18n/fr-mu.js +2 -0
  1122. data/vendor/assets/bower_components/angular-i18n/fr-nc.js +2 -0
  1123. data/vendor/assets/bower_components/angular-i18n/fr-ne.js +2 -0
  1124. data/vendor/assets/bower_components/angular-i18n/fr-pf.js +2 -0
  1125. data/vendor/assets/bower_components/angular-i18n/fr-pm.js +2 -0
  1126. data/vendor/assets/bower_components/angular-i18n/fr-re.js +2 -0
  1127. data/vendor/assets/bower_components/angular-i18n/fr-rw.js +2 -0
  1128. data/vendor/assets/bower_components/angular-i18n/fr-sc.js +2 -0
  1129. data/vendor/assets/bower_components/angular-i18n/fr-sn.js +2 -0
  1130. data/vendor/assets/bower_components/angular-i18n/fr-sy.js +2 -0
  1131. data/vendor/assets/bower_components/angular-i18n/fr-td.js +2 -0
  1132. data/vendor/assets/bower_components/angular-i18n/fr-tg.js +2 -0
  1133. data/vendor/assets/bower_components/angular-i18n/fr-tn.js +2 -0
  1134. data/vendor/assets/bower_components/angular-i18n/fr-vu.js +2 -0
  1135. data/vendor/assets/bower_components/angular-i18n/fr-wf.js +2 -0
  1136. data/vendor/assets/bower_components/angular-i18n/fr-yt.js +2 -0
  1137. data/vendor/assets/bower_components/angular-i18n/fr.js +2 -0
  1138. data/vendor/assets/bower_components/angular-i18n/fur-it.js +2 -0
  1139. data/vendor/assets/bower_components/angular-i18n/fur.js +2 -0
  1140. data/vendor/assets/bower_components/angular-i18n/fy-nl.js +2 -0
  1141. data/vendor/assets/bower_components/angular-i18n/fy.js +2 -0
  1142. data/vendor/assets/bower_components/angular-i18n/ga-ie.js +2 -0
  1143. data/vendor/assets/bower_components/angular-i18n/ga.js +2 -0
  1144. data/vendor/assets/bower_components/angular-i18n/gd-gb.js +2 -0
  1145. data/vendor/assets/bower_components/angular-i18n/gd.js +2 -0
  1146. data/vendor/assets/bower_components/angular-i18n/gl-es.js +2 -0
  1147. data/vendor/assets/bower_components/angular-i18n/gl.js +2 -0
  1148. data/vendor/assets/bower_components/angular-i18n/gsw-ch.js +2 -0
  1149. data/vendor/assets/bower_components/angular-i18n/gsw-fr.js +2 -0
  1150. data/vendor/assets/bower_components/angular-i18n/gsw-li.js +2 -0
  1151. data/vendor/assets/bower_components/angular-i18n/gsw.js +2 -0
  1152. data/vendor/assets/bower_components/angular-i18n/gu-in.js +2 -0
  1153. data/vendor/assets/bower_components/angular-i18n/gu.js +2 -0
  1154. data/vendor/assets/bower_components/angular-i18n/guz-ke.js +2 -0
  1155. data/vendor/assets/bower_components/angular-i18n/guz.js +2 -0
  1156. data/vendor/assets/bower_components/angular-i18n/gv-im.js +2 -0
  1157. data/vendor/assets/bower_components/angular-i18n/gv.js +2 -0
  1158. data/vendor/assets/bower_components/angular-i18n/ha-latn-gh.js +2 -0
  1159. data/vendor/assets/bower_components/angular-i18n/ha-latn-ne.js +2 -0
  1160. data/vendor/assets/bower_components/angular-i18n/ha-latn-ng.js +2 -0
  1161. data/vendor/assets/bower_components/angular-i18n/ha-latn.js +2 -0
  1162. data/vendor/assets/bower_components/angular-i18n/ha.js +2 -0
  1163. data/vendor/assets/bower_components/angular-i18n/haw-us.js +2 -0
  1164. data/vendor/assets/bower_components/angular-i18n/haw.js +2 -0
  1165. data/vendor/assets/bower_components/angular-i18n/he-il.js +2 -0
  1166. data/vendor/assets/bower_components/angular-i18n/he.js +2 -0
  1167. data/vendor/assets/bower_components/angular-i18n/hi-in.js +2 -0
  1168. data/vendor/assets/bower_components/angular-i18n/hi.js +2 -0
  1169. data/vendor/assets/bower_components/angular-i18n/hr-ba.js +2 -0
  1170. data/vendor/assets/bower_components/angular-i18n/hr-hr.js +2 -0
  1171. data/vendor/assets/bower_components/angular-i18n/hr.js +2 -0
  1172. data/vendor/assets/bower_components/angular-i18n/hsb-de.js +2 -0
  1173. data/vendor/assets/bower_components/angular-i18n/hsb.js +2 -0
  1174. data/vendor/assets/bower_components/angular-i18n/hu-hu.js +2 -0
  1175. data/vendor/assets/bower_components/angular-i18n/hu.js +2 -0
  1176. data/vendor/assets/bower_components/angular-i18n/hy-am.js +2 -0
  1177. data/vendor/assets/bower_components/angular-i18n/hy.js +2 -0
  1178. data/vendor/assets/bower_components/angular-i18n/ia-fr.js +2 -0
  1179. data/vendor/assets/bower_components/angular-i18n/ia.js +2 -0
  1180. data/vendor/assets/bower_components/angular-i18n/id-id.js +2 -0
  1181. data/vendor/assets/bower_components/angular-i18n/id.js +2 -0
  1182. data/vendor/assets/bower_components/angular-i18n/ig-ng.js +2 -0
  1183. data/vendor/assets/bower_components/angular-i18n/ig.js +2 -0
  1184. data/vendor/assets/bower_components/angular-i18n/ii-cn.js +2 -0
  1185. data/vendor/assets/bower_components/angular-i18n/ii.js +2 -0
  1186. data/vendor/assets/bower_components/angular-i18n/in.js +2 -0
  1187. data/vendor/assets/bower_components/angular-i18n/is-is.js +2 -0
  1188. data/vendor/assets/bower_components/angular-i18n/is.js +2 -0
  1189. data/vendor/assets/bower_components/angular-i18n/it-ch.js +2 -0
  1190. data/vendor/assets/bower_components/angular-i18n/it-it.js +2 -0
  1191. data/vendor/assets/bower_components/angular-i18n/it-sm.js +2 -0
  1192. data/vendor/assets/bower_components/angular-i18n/it.js +2 -0
  1193. data/vendor/assets/bower_components/angular-i18n/iw.js +2 -0
  1194. data/vendor/assets/bower_components/angular-i18n/ja-jp.js +2 -0
  1195. data/vendor/assets/bower_components/angular-i18n/ja.js +2 -0
  1196. data/vendor/assets/bower_components/angular-i18n/jgo-cm.js +2 -0
  1197. data/vendor/assets/bower_components/angular-i18n/jgo.js +2 -0
  1198. data/vendor/assets/bower_components/angular-i18n/jmc-tz.js +2 -0
  1199. data/vendor/assets/bower_components/angular-i18n/jmc.js +2 -0
  1200. data/vendor/assets/bower_components/angular-i18n/ka-ge.js +2 -0
  1201. data/vendor/assets/bower_components/angular-i18n/ka.js +2 -0
  1202. data/vendor/assets/bower_components/angular-i18n/kab-dz.js +2 -0
  1203. data/vendor/assets/bower_components/angular-i18n/kab.js +2 -0
  1204. data/vendor/assets/bower_components/angular-i18n/kam-ke.js +2 -0
  1205. data/vendor/assets/bower_components/angular-i18n/kam.js +2 -0
  1206. data/vendor/assets/bower_components/angular-i18n/kde-tz.js +2 -0
  1207. data/vendor/assets/bower_components/angular-i18n/kde.js +2 -0
  1208. data/vendor/assets/bower_components/angular-i18n/kea-cv.js +2 -0
  1209. data/vendor/assets/bower_components/angular-i18n/kea.js +2 -0
  1210. data/vendor/assets/bower_components/angular-i18n/khq-ml.js +2 -0
  1211. data/vendor/assets/bower_components/angular-i18n/khq.js +2 -0
  1212. data/vendor/assets/bower_components/angular-i18n/ki-ke.js +2 -0
  1213. data/vendor/assets/bower_components/angular-i18n/ki.js +2 -0
  1214. data/vendor/assets/bower_components/angular-i18n/kk-cyrl-kz.js +2 -0
  1215. data/vendor/assets/bower_components/angular-i18n/kk-cyrl.js +2 -0
  1216. data/vendor/assets/bower_components/angular-i18n/kk.js +2 -0
  1217. data/vendor/assets/bower_components/angular-i18n/kkj-cm.js +2 -0
  1218. data/vendor/assets/bower_components/angular-i18n/kkj.js +2 -0
  1219. data/vendor/assets/bower_components/angular-i18n/kl-gl.js +2 -0
  1220. data/vendor/assets/bower_components/angular-i18n/kl.js +2 -0
  1221. data/vendor/assets/bower_components/angular-i18n/kln-ke.js +2 -0
  1222. data/vendor/assets/bower_components/angular-i18n/kln.js +2 -0
  1223. data/vendor/assets/bower_components/angular-i18n/km-kh.js +2 -0
  1224. data/vendor/assets/bower_components/angular-i18n/km.js +2 -0
  1225. data/vendor/assets/bower_components/angular-i18n/kn-in.js +2 -0
  1226. data/vendor/assets/bower_components/angular-i18n/kn.js +2 -0
  1227. data/vendor/assets/bower_components/angular-i18n/ko-kp.js +2 -0
  1228. data/vendor/assets/bower_components/angular-i18n/ko-kr.js +2 -0
  1229. data/vendor/assets/bower_components/angular-i18n/ko.js +2 -0
  1230. data/vendor/assets/bower_components/angular-i18n/kok-in.js +2 -0
  1231. data/vendor/assets/bower_components/angular-i18n/kok.js +2 -0
  1232. data/vendor/assets/bower_components/angular-i18n/ks-arab-in.js +2 -0
  1233. data/vendor/assets/bower_components/angular-i18n/ks-arab.js +2 -0
  1234. data/vendor/assets/bower_components/angular-i18n/ks.js +2 -0
  1235. data/vendor/assets/bower_components/angular-i18n/ksb-tz.js +2 -0
  1236. data/vendor/assets/bower_components/angular-i18n/ksb.js +2 -0
  1237. data/vendor/assets/bower_components/angular-i18n/ksf-cm.js +2 -0
  1238. data/vendor/assets/bower_components/angular-i18n/ksf.js +2 -0
  1239. data/vendor/assets/bower_components/angular-i18n/ksh-de.js +2 -0
  1240. data/vendor/assets/bower_components/angular-i18n/ksh.js +2 -0
  1241. data/vendor/assets/bower_components/angular-i18n/kw-gb.js +2 -0
  1242. data/vendor/assets/bower_components/angular-i18n/kw.js +2 -0
  1243. data/vendor/assets/bower_components/angular-i18n/ky-cyrl-kg.js +2 -0
  1244. data/vendor/assets/bower_components/angular-i18n/ky-cyrl.js +2 -0
  1245. data/vendor/assets/bower_components/angular-i18n/ky.js +2 -0
  1246. data/vendor/assets/bower_components/angular-i18n/lag-tz.js +2 -0
  1247. data/vendor/assets/bower_components/angular-i18n/lag.js +2 -0
  1248. data/vendor/assets/bower_components/angular-i18n/lb-lu.js +2 -0
  1249. data/vendor/assets/bower_components/angular-i18n/lb.js +2 -0
  1250. data/vendor/assets/bower_components/angular-i18n/lg-ug.js +2 -0
  1251. data/vendor/assets/bower_components/angular-i18n/lg.js +2 -0
  1252. data/vendor/assets/bower_components/angular-i18n/lkt-us.js +2 -0
  1253. data/vendor/assets/bower_components/angular-i18n/lkt.js +2 -0
  1254. data/vendor/assets/bower_components/angular-i18n/ln-ao.js +2 -0
  1255. data/vendor/assets/bower_components/angular-i18n/ln-cd.js +2 -0
  1256. data/vendor/assets/bower_components/angular-i18n/ln-cf.js +2 -0
  1257. data/vendor/assets/bower_components/angular-i18n/ln-cg.js +2 -0
  1258. data/vendor/assets/bower_components/angular-i18n/ln.js +2 -0
  1259. data/vendor/assets/bower_components/angular-i18n/lo-la.js +2 -0
  1260. data/vendor/assets/bower_components/angular-i18n/lo.js +2 -0
  1261. data/vendor/assets/bower_components/angular-i18n/lt-lt.js +2 -0
  1262. data/vendor/assets/bower_components/angular-i18n/lt.js +2 -0
  1263. data/vendor/assets/bower_components/angular-i18n/lu-cd.js +2 -0
  1264. data/vendor/assets/bower_components/angular-i18n/lu.js +2 -0
  1265. data/vendor/assets/bower_components/angular-i18n/luo-ke.js +2 -0
  1266. data/vendor/assets/bower_components/angular-i18n/luo.js +2 -0
  1267. data/vendor/assets/bower_components/angular-i18n/luy-ke.js +2 -0
  1268. data/vendor/assets/bower_components/angular-i18n/luy.js +2 -0
  1269. data/vendor/assets/bower_components/angular-i18n/lv-lv.js +2 -0
  1270. data/vendor/assets/bower_components/angular-i18n/lv.js +2 -0
  1271. data/vendor/assets/bower_components/angular-i18n/mas-ke.js +2 -0
  1272. data/vendor/assets/bower_components/angular-i18n/mas-tz.js +2 -0
  1273. data/vendor/assets/bower_components/angular-i18n/mas.js +2 -0
  1274. data/vendor/assets/bower_components/angular-i18n/mer-ke.js +2 -0
  1275. data/vendor/assets/bower_components/angular-i18n/mer.js +2 -0
  1276. data/vendor/assets/bower_components/angular-i18n/mfe-mu.js +2 -0
  1277. data/vendor/assets/bower_components/angular-i18n/mfe.js +2 -0
  1278. data/vendor/assets/bower_components/angular-i18n/mg-mg.js +2 -0
  1279. data/vendor/assets/bower_components/angular-i18n/mg.js +2 -0
  1280. data/vendor/assets/bower_components/angular-i18n/mgh-mz.js +2 -0
  1281. data/vendor/assets/bower_components/angular-i18n/mgh.js +2 -0
  1282. data/vendor/assets/bower_components/angular-i18n/mgo-cm.js +2 -0
  1283. data/vendor/assets/bower_components/angular-i18n/mgo.js +2 -0
  1284. data/vendor/assets/bower_components/angular-i18n/mk-mk.js +2 -0
  1285. data/vendor/assets/bower_components/angular-i18n/mk.js +2 -0
  1286. data/vendor/assets/bower_components/angular-i18n/ml-in.js +2 -0
  1287. data/vendor/assets/bower_components/angular-i18n/ml.js +2 -0
  1288. data/vendor/assets/bower_components/angular-i18n/mn-cyrl-mn.js +2 -0
  1289. data/vendor/assets/bower_components/angular-i18n/mn-cyrl.js +2 -0
  1290. data/vendor/assets/bower_components/angular-i18n/mn.js +2 -0
  1291. data/vendor/assets/bower_components/angular-i18n/mr-in.js +2 -0
  1292. data/vendor/assets/bower_components/angular-i18n/mr.js +2 -0
  1293. data/vendor/assets/bower_components/angular-i18n/ms-bn.js +2 -0
  1294. data/vendor/assets/bower_components/angular-i18n/ms-latn-bn.js +2 -0
  1295. data/vendor/assets/bower_components/angular-i18n/ms-latn-my.js +2 -0
  1296. data/vendor/assets/bower_components/angular-i18n/ms-latn-sg.js +2 -0
  1297. data/vendor/assets/bower_components/angular-i18n/ms-latn.js +2 -0
  1298. data/vendor/assets/bower_components/angular-i18n/ms-my.js +2 -0
  1299. data/vendor/assets/bower_components/angular-i18n/ms.js +2 -0
  1300. data/vendor/assets/bower_components/angular-i18n/mt-mt.js +2 -0
  1301. data/vendor/assets/bower_components/angular-i18n/mt.js +2 -0
  1302. data/vendor/assets/bower_components/angular-i18n/mua-cm.js +2 -0
  1303. data/vendor/assets/bower_components/angular-i18n/mua.js +2 -0
  1304. data/vendor/assets/bower_components/angular-i18n/my-mm.js +2 -0
  1305. data/vendor/assets/bower_components/angular-i18n/my.js +2 -0
  1306. data/vendor/assets/bower_components/angular-i18n/naq-na.js +2 -0
  1307. data/vendor/assets/bower_components/angular-i18n/naq.js +2 -0
  1308. data/vendor/assets/bower_components/angular-i18n/nb-no.js +2 -0
  1309. data/vendor/assets/bower_components/angular-i18n/nb-sj.js +2 -0
  1310. data/vendor/assets/bower_components/angular-i18n/nb.js +2 -0
  1311. data/vendor/assets/bower_components/angular-i18n/nd-zw.js +2 -0
  1312. data/vendor/assets/bower_components/angular-i18n/nd.js +2 -0
  1313. data/vendor/assets/bower_components/angular-i18n/ne-in.js +2 -0
  1314. data/vendor/assets/bower_components/angular-i18n/ne-np.js +2 -0
  1315. data/vendor/assets/bower_components/angular-i18n/ne.js +2 -0
  1316. data/vendor/assets/bower_components/angular-i18n/nl-aw.js +2 -0
  1317. data/vendor/assets/bower_components/angular-i18n/nl-be.js +2 -0
  1318. data/vendor/assets/bower_components/angular-i18n/nl-bq.js +2 -0
  1319. data/vendor/assets/bower_components/angular-i18n/nl-cw.js +2 -0
  1320. data/vendor/assets/bower_components/angular-i18n/nl-nl.js +2 -0
  1321. data/vendor/assets/bower_components/angular-i18n/nl-sr.js +2 -0
  1322. data/vendor/assets/bower_components/angular-i18n/nl-sx.js +2 -0
  1323. data/vendor/assets/bower_components/angular-i18n/nl.js +2 -0
  1324. data/vendor/assets/bower_components/angular-i18n/nmg-cm.js +2 -0
  1325. data/vendor/assets/bower_components/angular-i18n/nmg.js +2 -0
  1326. data/vendor/assets/bower_components/angular-i18n/nn-no.js +2 -0
  1327. data/vendor/assets/bower_components/angular-i18n/nn.js +2 -0
  1328. data/vendor/assets/bower_components/angular-i18n/nnh-cm.js +2 -0
  1329. data/vendor/assets/bower_components/angular-i18n/nnh.js +2 -0
  1330. data/vendor/assets/bower_components/angular-i18n/no-no.js +2 -0
  1331. data/vendor/assets/bower_components/angular-i18n/no.js +2 -0
  1332. data/vendor/assets/bower_components/angular-i18n/nr-za.js +2 -0
  1333. data/vendor/assets/bower_components/angular-i18n/nr.js +2 -0
  1334. data/vendor/assets/bower_components/angular-i18n/nso-za.js +2 -0
  1335. data/vendor/assets/bower_components/angular-i18n/nso.js +2 -0
  1336. data/vendor/assets/bower_components/angular-i18n/nus-sd.js +2 -0
  1337. data/vendor/assets/bower_components/angular-i18n/nus.js +2 -0
  1338. data/vendor/assets/bower_components/angular-i18n/nyn-ug.js +2 -0
  1339. data/vendor/assets/bower_components/angular-i18n/nyn.js +2 -0
  1340. data/vendor/assets/bower_components/angular-i18n/om-et.js +2 -0
  1341. data/vendor/assets/bower_components/angular-i18n/om-ke.js +2 -0
  1342. data/vendor/assets/bower_components/angular-i18n/om.js +2 -0
  1343. data/vendor/assets/bower_components/angular-i18n/or-in.js +2 -0
  1344. data/vendor/assets/bower_components/angular-i18n/or.js +2 -0
  1345. data/vendor/assets/bower_components/angular-i18n/os-ge.js +2 -0
  1346. data/vendor/assets/bower_components/angular-i18n/os-ru.js +2 -0
  1347. data/vendor/assets/bower_components/angular-i18n/os.js +2 -0
  1348. data/vendor/assets/bower_components/angular-i18n/pa-arab-pk.js +2 -0
  1349. data/vendor/assets/bower_components/angular-i18n/pa-arab.js +2 -0
  1350. data/vendor/assets/bower_components/angular-i18n/pa-guru-in.js +2 -0
  1351. data/vendor/assets/bower_components/angular-i18n/pa-guru.js +2 -0
  1352. data/vendor/assets/bower_components/angular-i18n/pa.js +2 -0
  1353. data/vendor/assets/bower_components/angular-i18n/package.json +26 -0
  1354. data/vendor/assets/bower_components/angular-i18n/pl-pl.js +2 -0
  1355. data/vendor/assets/bower_components/angular-i18n/pl.js +2 -0
  1356. data/vendor/assets/bower_components/angular-i18n/ps-af.js +2 -0
  1357. data/vendor/assets/bower_components/angular-i18n/ps.js +2 -0
  1358. data/vendor/assets/bower_components/angular-i18n/pt-ao.js +2 -0
  1359. data/vendor/assets/bower_components/angular-i18n/pt-br.js +2 -0
  1360. data/vendor/assets/bower_components/angular-i18n/pt-cv.js +2 -0
  1361. data/vendor/assets/bower_components/angular-i18n/pt-gw.js +2 -0
  1362. data/vendor/assets/bower_components/angular-i18n/pt-mo.js +2 -0
  1363. data/vendor/assets/bower_components/angular-i18n/pt-mz.js +2 -0
  1364. data/vendor/assets/bower_components/angular-i18n/pt-pt.js +2 -0
  1365. data/vendor/assets/bower_components/angular-i18n/pt-st.js +2 -0
  1366. data/vendor/assets/bower_components/angular-i18n/pt-tl.js +2 -0
  1367. data/vendor/assets/bower_components/angular-i18n/pt.js +2 -0
  1368. data/vendor/assets/bower_components/angular-i18n/qu-bo.js +2 -0
  1369. data/vendor/assets/bower_components/angular-i18n/qu-ec.js +2 -0
  1370. data/vendor/assets/bower_components/angular-i18n/qu-pe.js +2 -0
  1371. data/vendor/assets/bower_components/angular-i18n/qu.js +2 -0
  1372. data/vendor/assets/bower_components/angular-i18n/rm-ch.js +2 -0
  1373. data/vendor/assets/bower_components/angular-i18n/rm.js +2 -0
  1374. data/vendor/assets/bower_components/angular-i18n/rn-bi.js +2 -0
  1375. data/vendor/assets/bower_components/angular-i18n/rn.js +2 -0
  1376. data/vendor/assets/bower_components/angular-i18n/ro-md.js +2 -0
  1377. data/vendor/assets/bower_components/angular-i18n/ro-ro.js +2 -0
  1378. data/vendor/assets/bower_components/angular-i18n/ro.js +2 -0
  1379. data/vendor/assets/bower_components/angular-i18n/rof-tz.js +2 -0
  1380. data/vendor/assets/bower_components/angular-i18n/rof.js +2 -0
  1381. data/vendor/assets/bower_components/angular-i18n/ru-by.js +2 -0
  1382. data/vendor/assets/bower_components/angular-i18n/ru-kg.js +2 -0
  1383. data/vendor/assets/bower_components/angular-i18n/ru-kz.js +2 -0
  1384. data/vendor/assets/bower_components/angular-i18n/ru-md.js +2 -0
  1385. data/vendor/assets/bower_components/angular-i18n/ru-ru.js +2 -0
  1386. data/vendor/assets/bower_components/angular-i18n/ru-ua.js +2 -0
  1387. data/vendor/assets/bower_components/angular-i18n/ru.js +2 -0
  1388. data/vendor/assets/bower_components/angular-i18n/rw-rw.js +2 -0
  1389. data/vendor/assets/bower_components/angular-i18n/rw.js +2 -0
  1390. data/vendor/assets/bower_components/angular-i18n/rwk-tz.js +2 -0
  1391. data/vendor/assets/bower_components/angular-i18n/rwk.js +2 -0
  1392. data/vendor/assets/bower_components/angular-i18n/sah-ru.js +2 -0
  1393. data/vendor/assets/bower_components/angular-i18n/sah.js +2 -0
  1394. data/vendor/assets/bower_components/angular-i18n/saq-ke.js +2 -0
  1395. data/vendor/assets/bower_components/angular-i18n/saq.js +2 -0
  1396. data/vendor/assets/bower_components/angular-i18n/sbp-tz.js +2 -0
  1397. data/vendor/assets/bower_components/angular-i18n/sbp.js +2 -0
  1398. data/vendor/assets/bower_components/angular-i18n/se-fi.js +2 -0
  1399. data/vendor/assets/bower_components/angular-i18n/se-no.js +2 -0
  1400. data/vendor/assets/bower_components/angular-i18n/se-se.js +2 -0
  1401. data/vendor/assets/bower_components/angular-i18n/se.js +2 -0
  1402. data/vendor/assets/bower_components/angular-i18n/seh-mz.js +2 -0
  1403. data/vendor/assets/bower_components/angular-i18n/seh.js +2 -0
  1404. data/vendor/assets/bower_components/angular-i18n/ses-ml.js +2 -0
  1405. data/vendor/assets/bower_components/angular-i18n/ses.js +2 -0
  1406. data/vendor/assets/bower_components/angular-i18n/sg-cf.js +2 -0
  1407. data/vendor/assets/bower_components/angular-i18n/sg.js +2 -0
  1408. data/vendor/assets/bower_components/angular-i18n/shi-latn-ma.js +2 -0
  1409. data/vendor/assets/bower_components/angular-i18n/shi-latn.js +2 -0
  1410. data/vendor/assets/bower_components/angular-i18n/shi-tfng-ma.js +2 -0
  1411. data/vendor/assets/bower_components/angular-i18n/shi-tfng.js +2 -0
  1412. data/vendor/assets/bower_components/angular-i18n/shi.js +2 -0
  1413. data/vendor/assets/bower_components/angular-i18n/si-lk.js +2 -0
  1414. data/vendor/assets/bower_components/angular-i18n/si.js +2 -0
  1415. data/vendor/assets/bower_components/angular-i18n/sk-sk.js +2 -0
  1416. data/vendor/assets/bower_components/angular-i18n/sk.js +2 -0
  1417. data/vendor/assets/bower_components/angular-i18n/sl-si.js +2 -0
  1418. data/vendor/assets/bower_components/angular-i18n/sl.js +2 -0
  1419. data/vendor/assets/bower_components/angular-i18n/smn-fi.js +2 -0
  1420. data/vendor/assets/bower_components/angular-i18n/smn.js +2 -0
  1421. data/vendor/assets/bower_components/angular-i18n/sn-zw.js +2 -0
  1422. data/vendor/assets/bower_components/angular-i18n/sn.js +2 -0
  1423. data/vendor/assets/bower_components/angular-i18n/so-dj.js +2 -0
  1424. data/vendor/assets/bower_components/angular-i18n/so-et.js +2 -0
  1425. data/vendor/assets/bower_components/angular-i18n/so-ke.js +2 -0
  1426. data/vendor/assets/bower_components/angular-i18n/so-so.js +2 -0
  1427. data/vendor/assets/bower_components/angular-i18n/so.js +2 -0
  1428. data/vendor/assets/bower_components/angular-i18n/sq-al.js +2 -0
  1429. data/vendor/assets/bower_components/angular-i18n/sq-mk.js +2 -0
  1430. data/vendor/assets/bower_components/angular-i18n/sq-xk.js +2 -0
  1431. data/vendor/assets/bower_components/angular-i18n/sq.js +2 -0
  1432. data/vendor/assets/bower_components/angular-i18n/sr-cyrl-ba.js +2 -0
  1433. data/vendor/assets/bower_components/angular-i18n/sr-cyrl-me.js +2 -0
  1434. data/vendor/assets/bower_components/angular-i18n/sr-cyrl-rs.js +2 -0
  1435. data/vendor/assets/bower_components/angular-i18n/sr-cyrl-xk.js +2 -0
  1436. data/vendor/assets/bower_components/angular-i18n/sr-cyrl.js +2 -0
  1437. data/vendor/assets/bower_components/angular-i18n/sr-latn-ba.js +2 -0
  1438. data/vendor/assets/bower_components/angular-i18n/sr-latn-me.js +2 -0
  1439. data/vendor/assets/bower_components/angular-i18n/sr-latn-rs.js +2 -0
  1440. data/vendor/assets/bower_components/angular-i18n/sr-latn-xk.js +2 -0
  1441. data/vendor/assets/bower_components/angular-i18n/sr-latn.js +2 -0
  1442. data/vendor/assets/bower_components/angular-i18n/sr.js +2 -0
  1443. data/vendor/assets/bower_components/angular-i18n/ss-sz.js +2 -0
  1444. data/vendor/assets/bower_components/angular-i18n/ss-za.js +2 -0
  1445. data/vendor/assets/bower_components/angular-i18n/ss.js +2 -0
  1446. data/vendor/assets/bower_components/angular-i18n/ssy-er.js +2 -0
  1447. data/vendor/assets/bower_components/angular-i18n/ssy.js +2 -0
  1448. data/vendor/assets/bower_components/angular-i18n/st-ls.js +2 -0
  1449. data/vendor/assets/bower_components/angular-i18n/st-za.js +2 -0
  1450. data/vendor/assets/bower_components/angular-i18n/st.js +2 -0
  1451. data/vendor/assets/bower_components/angular-i18n/sv-ax.js +2 -0
  1452. data/vendor/assets/bower_components/angular-i18n/sv-fi.js +2 -0
  1453. data/vendor/assets/bower_components/angular-i18n/sv-se.js +2 -0
  1454. data/vendor/assets/bower_components/angular-i18n/sv.js +2 -0
  1455. data/vendor/assets/bower_components/angular-i18n/sw-cd.js +2 -0
  1456. data/vendor/assets/bower_components/angular-i18n/sw-ke.js +2 -0
  1457. data/vendor/assets/bower_components/angular-i18n/sw-tz.js +2 -0
  1458. data/vendor/assets/bower_components/angular-i18n/sw-ug.js +2 -0
  1459. data/vendor/assets/bower_components/angular-i18n/sw.js +2 -0
  1460. data/vendor/assets/bower_components/angular-i18n/swc-cd.js +2 -0
  1461. data/vendor/assets/bower_components/angular-i18n/swc.js +2 -0
  1462. data/vendor/assets/bower_components/angular-i18n/ta-in.js +2 -0
  1463. data/vendor/assets/bower_components/angular-i18n/ta-lk.js +2 -0
  1464. data/vendor/assets/bower_components/angular-i18n/ta-my.js +2 -0
  1465. data/vendor/assets/bower_components/angular-i18n/ta-sg.js +2 -0
  1466. data/vendor/assets/bower_components/angular-i18n/ta.js +2 -0
  1467. data/vendor/assets/bower_components/angular-i18n/te-in.js +2 -0
  1468. data/vendor/assets/bower_components/angular-i18n/te.js +2 -0
  1469. data/vendor/assets/bower_components/angular-i18n/teo-ke.js +2 -0
  1470. data/vendor/assets/bower_components/angular-i18n/teo-ug.js +2 -0
  1471. data/vendor/assets/bower_components/angular-i18n/teo.js +2 -0
  1472. data/vendor/assets/bower_components/angular-i18n/tg-cyrl-tj.js +2 -0
  1473. data/vendor/assets/bower_components/angular-i18n/tg-cyrl.js +2 -0
  1474. data/vendor/assets/bower_components/angular-i18n/tg.js +2 -0
  1475. data/vendor/assets/bower_components/angular-i18n/th-th.js +2 -0
  1476. data/vendor/assets/bower_components/angular-i18n/th.js +2 -0
  1477. data/vendor/assets/bower_components/angular-i18n/ti-er.js +2 -0
  1478. data/vendor/assets/bower_components/angular-i18n/ti-et.js +2 -0
  1479. data/vendor/assets/bower_components/angular-i18n/ti.js +2 -0
  1480. data/vendor/assets/bower_components/angular-i18n/tig-er.js +2 -0
  1481. data/vendor/assets/bower_components/angular-i18n/tig.js +2 -0
  1482. data/vendor/assets/bower_components/angular-i18n/tl.js +2 -0
  1483. data/vendor/assets/bower_components/angular-i18n/tn-bw.js +2 -0
  1484. data/vendor/assets/bower_components/angular-i18n/tn-za.js +2 -0
  1485. data/vendor/assets/bower_components/angular-i18n/tn.js +2 -0
  1486. data/vendor/assets/bower_components/angular-i18n/to-to.js +2 -0
  1487. data/vendor/assets/bower_components/angular-i18n/to.js +2 -0
  1488. data/vendor/assets/bower_components/angular-i18n/tr-cy.js +2 -0
  1489. data/vendor/assets/bower_components/angular-i18n/tr-tr.js +2 -0
  1490. data/vendor/assets/bower_components/angular-i18n/tr.js +2 -0
  1491. data/vendor/assets/bower_components/angular-i18n/ts-za.js +2 -0
  1492. data/vendor/assets/bower_components/angular-i18n/ts.js +2 -0
  1493. data/vendor/assets/bower_components/angular-i18n/twq-ne.js +2 -0
  1494. data/vendor/assets/bower_components/angular-i18n/twq.js +2 -0
  1495. data/vendor/assets/bower_components/angular-i18n/tzm-latn-ma.js +2 -0
  1496. data/vendor/assets/bower_components/angular-i18n/tzm-latn.js +2 -0
  1497. data/vendor/assets/bower_components/angular-i18n/tzm.js +2 -0
  1498. data/vendor/assets/bower_components/angular-i18n/ug-arab-cn.js +2 -0
  1499. data/vendor/assets/bower_components/angular-i18n/ug-arab.js +2 -0
  1500. data/vendor/assets/bower_components/angular-i18n/ug.js +2 -0
  1501. data/vendor/assets/bower_components/angular-i18n/uk-ua.js +2 -0
  1502. data/vendor/assets/bower_components/angular-i18n/uk.js +2 -0
  1503. data/vendor/assets/bower_components/angular-i18n/ur-in.js +2 -0
  1504. data/vendor/assets/bower_components/angular-i18n/ur-pk.js +2 -0
  1505. data/vendor/assets/bower_components/angular-i18n/ur.js +2 -0
  1506. data/vendor/assets/bower_components/angular-i18n/uz-arab-af.js +2 -0
  1507. data/vendor/assets/bower_components/angular-i18n/uz-arab.js +2 -0
  1508. data/vendor/assets/bower_components/angular-i18n/uz-cyrl-uz.js +2 -0
  1509. data/vendor/assets/bower_components/angular-i18n/uz-cyrl.js +2 -0
  1510. data/vendor/assets/bower_components/angular-i18n/uz-latn-uz.js +2 -0
  1511. data/vendor/assets/bower_components/angular-i18n/uz-latn.js +2 -0
  1512. data/vendor/assets/bower_components/angular-i18n/uz.js +2 -0
  1513. data/vendor/assets/bower_components/angular-i18n/vai-latn-lr.js +2 -0
  1514. data/vendor/assets/bower_components/angular-i18n/vai-latn.js +2 -0
  1515. data/vendor/assets/bower_components/angular-i18n/vai-vaii-lr.js +2 -0
  1516. data/vendor/assets/bower_components/angular-i18n/vai-vaii.js +2 -0
  1517. data/vendor/assets/bower_components/angular-i18n/vai.js +2 -0
  1518. data/vendor/assets/bower_components/angular-i18n/ve-za.js +2 -0
  1519. data/vendor/assets/bower_components/angular-i18n/ve.js +2 -0
  1520. data/vendor/assets/bower_components/angular-i18n/vi-vn.js +2 -0
  1521. data/vendor/assets/bower_components/angular-i18n/vi.js +2 -0
  1522. data/vendor/assets/bower_components/angular-i18n/vo-001.js +2 -0
  1523. data/vendor/assets/bower_components/angular-i18n/vo.js +2 -0
  1524. data/vendor/assets/bower_components/angular-i18n/vun-tz.js +2 -0
  1525. data/vendor/assets/bower_components/angular-i18n/vun.js +2 -0
  1526. data/vendor/assets/bower_components/angular-i18n/wae-ch.js +2 -0
  1527. data/vendor/assets/bower_components/angular-i18n/wae.js +2 -0
  1528. data/vendor/assets/bower_components/angular-i18n/wal-et.js +2 -0
  1529. data/vendor/assets/bower_components/angular-i18n/wal.js +2 -0
  1530. data/vendor/assets/bower_components/angular-i18n/xh-za.js +2 -0
  1531. data/vendor/assets/bower_components/angular-i18n/xh.js +2 -0
  1532. data/vendor/assets/bower_components/angular-i18n/xog-ug.js +2 -0
  1533. data/vendor/assets/bower_components/angular-i18n/xog.js +2 -0
  1534. data/vendor/assets/bower_components/angular-i18n/yav-cm.js +2 -0
  1535. data/vendor/assets/bower_components/angular-i18n/yav.js +2 -0
  1536. data/vendor/assets/bower_components/angular-i18n/yi-001.js +2 -0
  1537. data/vendor/assets/bower_components/angular-i18n/yi.js +2 -0
  1538. data/vendor/assets/bower_components/angular-i18n/yo-bj.js +2 -0
  1539. data/vendor/assets/bower_components/angular-i18n/yo-ng.js +2 -0
  1540. data/vendor/assets/bower_components/angular-i18n/yo.js +2 -0
  1541. data/vendor/assets/bower_components/angular-i18n/zgh-ma.js +2 -0
  1542. data/vendor/assets/bower_components/angular-i18n/zgh.js +2 -0
  1543. data/vendor/assets/bower_components/angular-i18n/zh-cn.js +2 -0
  1544. data/vendor/assets/bower_components/angular-i18n/zh-hans-cn.js +2 -0
  1545. data/vendor/assets/bower_components/angular-i18n/zh-hans-hk.js +2 -0
  1546. data/vendor/assets/bower_components/angular-i18n/zh-hans-mo.js +2 -0
  1547. data/vendor/assets/bower_components/angular-i18n/zh-hans-sg.js +2 -0
  1548. data/vendor/assets/bower_components/angular-i18n/zh-hans.js +2 -0
  1549. data/vendor/assets/bower_components/angular-i18n/zh-hant-hk.js +2 -0
  1550. data/vendor/assets/bower_components/angular-i18n/zh-hant-mo.js +2 -0
  1551. data/vendor/assets/bower_components/angular-i18n/zh-hant-tw.js +2 -0
  1552. data/vendor/assets/bower_components/angular-i18n/zh-hant.js +2 -0
  1553. data/vendor/assets/bower_components/angular-i18n/zh-hk.js +2 -0
  1554. data/vendor/assets/bower_components/angular-i18n/zh-tw.js +2 -0
  1555. data/vendor/assets/bower_components/angular-i18n/zh.js +2 -0
  1556. data/vendor/assets/bower_components/angular-i18n/zu-za.js +2 -0
  1557. data/vendor/assets/bower_components/angular-i18n/zu.js +2 -0
  1558. data/vendor/assets/bower_components/angular-loading-bar/CHANGELOG.md +48 -0
  1559. data/vendor/assets/bower_components/angular-loading-bar/Gruntfile.js +94 -0
  1560. data/vendor/assets/bower_components/angular-loading-bar/LICENSE +20 -0
  1561. data/vendor/assets/bower_components/angular-loading-bar/README.md +163 -0
  1562. data/vendor/assets/bower_components/angular-loading-bar/bower.json +26 -0
  1563. data/vendor/assets/bower_components/angular-loading-bar/build/loading-bar.css +110 -0
  1564. data/vendor/assets/bower_components/angular-loading-bar/build/loading-bar.js +314 -0
  1565. data/vendor/assets/bower_components/angular-loading-bar/build/loading-bar.min.css +8 -0
  1566. data/vendor/assets/bower_components/angular-loading-bar/build/loading-bar.min.js +7 -0
  1567. data/vendor/assets/bower_components/angular-loading-bar/package.json +45 -0
  1568. data/vendor/assets/bower_components/angular-loading-bar/src/loading-bar.css +104 -0
  1569. data/vendor/assets/bower_components/angular-loading-bar/src/loading-bar.js +308 -0
  1570. data/vendor/assets/bower_components/angular-sanitize/README.md +77 -0
  1571. data/vendor/assets/bower_components/angular-sanitize/angular-sanitize.js +678 -0
  1572. data/vendor/assets/bower_components/angular-sanitize/angular-sanitize.min.js +16 -0
  1573. data/vendor/assets/bower_components/angular-sanitize/angular-sanitize.min.js.map +8 -0
  1574. data/vendor/assets/bower_components/angular-sanitize/bower.json +9 -0
  1575. data/vendor/assets/bower_components/angular-sanitize/package.json +26 -0
  1576. data/vendor/assets/bower_components/angular-toggle-switch/LICENSE +21 -0
  1577. data/vendor/assets/bower_components/angular-toggle-switch/README.md +36 -0
  1578. data/vendor/assets/bower_components/angular-toggle-switch/angular-toggle-switch-bootstrap.css +35 -0
  1579. data/vendor/assets/bower_components/angular-toggle-switch/angular-toggle-switch.css +73 -0
  1580. data/vendor/assets/bower_components/angular-toggle-switch/angular-toggle-switch.js +49 -0
  1581. data/vendor/assets/bower_components/angular-toggle-switch/angular-toggle-switch.min.js +1 -0
  1582. data/vendor/assets/bower_components/angular-toggle-switch/bower.json +24 -0
  1583. data/vendor/assets/bower_components/angular-toggle-switch/test/angular-toggle-switch.spec.js +132 -0
  1584. data/vendor/assets/bower_components/angular-ui-codemirror/CHANGELOG.md +8 -0
  1585. data/vendor/assets/bower_components/angular-ui-codemirror/bower.json +9 -0
  1586. data/vendor/assets/bower_components/angular-ui-codemirror/ui-codemirror.js +103 -0
  1587. data/vendor/assets/bower_components/angular-ui-codemirror/ui-codemirror.min.js +7 -0
  1588. data/vendor/assets/bower_components/angular-ui-router/CHANGELOG.md +197 -0
  1589. data/vendor/assets/bower_components/angular-ui-router/CONTRIBUTING.md +65 -0
  1590. data/vendor/assets/bower_components/angular-ui-router/LICENSE +21 -0
  1591. data/vendor/assets/bower_components/angular-ui-router/README.md +243 -0
  1592. data/vendor/assets/bower_components/angular-ui-router/api/angular-ui-router.d.ts +126 -0
  1593. data/vendor/assets/bower_components/angular-ui-router/bower.json +23 -0
  1594. data/vendor/assets/bower_components/angular-ui-router/release/angular-ui-router.js +4232 -0
  1595. data/vendor/assets/bower_components/angular-ui-router/release/angular-ui-router.min.js +7 -0
  1596. data/vendor/assets/bower_components/angular-ui-router/src/common.js +292 -0
  1597. data/vendor/assets/bower_components/angular-ui-router/src/resolve.js +252 -0
  1598. data/vendor/assets/bower_components/angular-ui-router/src/state.js +1373 -0
  1599. data/vendor/assets/bower_components/angular-ui-router/src/stateDirectives.js +268 -0
  1600. data/vendor/assets/bower_components/angular-ui-router/src/stateFilters.js +39 -0
  1601. data/vendor/assets/bower_components/angular-ui-router/src/templateFactory.js +110 -0
  1602. data/vendor/assets/bower_components/angular-ui-router/src/urlMatcherFactory.js +1036 -0
  1603. data/vendor/assets/bower_components/angular-ui-router/src/urlRouter.js +413 -0
  1604. data/vendor/assets/bower_components/angular-ui-router/src/view.js +71 -0
  1605. data/vendor/assets/bower_components/angular-ui-router/src/viewDirective.js +302 -0
  1606. data/vendor/assets/bower_components/angular-ui-router/src/viewScroll.js +52 -0
  1607. data/vendor/assets/bower_components/angular-ui-select/LICENSE +20 -0
  1608. data/vendor/assets/bower_components/angular-ui-select/README.md +43 -0
  1609. data/vendor/assets/bower_components/angular-ui-select/bower.json +29 -0
  1610. data/vendor/assets/bower_components/angular-ui-select/dist/select.css +221 -0
  1611. data/vendor/assets/bower_components/angular-ui-select/dist/select.js +1746 -0
  1612. data/vendor/assets/bower_components/angular-ui-select/dist/select.min.css +6 -0
  1613. data/vendor/assets/bower_components/angular-ui-select/dist/select.min.js +8 -0
  1614. data/vendor/assets/bower_components/angular-ui-select/package.json +40 -0
  1615. data/vendor/assets/bower_components/angular-ui-tree/Gruntfile.js +229 -0
  1616. data/vendor/assets/bower_components/angular-ui-tree/LICENSE +20 -0
  1617. data/vendor/assets/bower_components/angular-ui-tree/README.md +452 -0
  1618. data/vendor/assets/bower_components/angular-ui-tree/bower.json +43 -0
  1619. data/vendor/assets/bower_components/angular-ui-tree/build/compiler.jar +0 -0
  1620. data/vendor/assets/bower_components/angular-ui-tree/demo/css/demo-horizontal.css +47 -0
  1621. data/vendor/assets/bower_components/angular-ui-tree/demo/css/demo.css +31 -0
  1622. data/vendor/assets/bower_components/angular-ui-tree/demo/css/tree.css +25 -0
  1623. data/vendor/assets/bower_components/angular-ui-tree/demo/dist/angular-ui-tree.js +1243 -0
  1624. data/vendor/assets/bower_components/angular-ui-tree/demo/dist/angular-ui-tree.min.css +2 -0
  1625. data/vendor/assets/bower_components/angular-ui-tree/demo/dist/angular-ui-tree.min.js +6 -0
  1626. data/vendor/assets/bower_components/angular-ui-tree/demo/filter.html +64 -0
  1627. data/vendor/assets/bower_components/angular-ui-tree/demo/groups.html +100 -0
  1628. data/vendor/assets/bower_components/angular-ui-tree/demo/index.html +101 -0
  1629. data/vendor/assets/bower_components/angular-ui-tree/demo/js/demo.js +63 -0
  1630. data/vendor/assets/bower_components/angular-ui-tree/demo/js/filter.js +91 -0
  1631. data/vendor/assets/bower_components/angular-ui-tree/demo/js/groups.js +143 -0
  1632. data/vendor/assets/bower_components/angular-ui-tree/demo/js/tree.js +102 -0
  1633. data/vendor/assets/bower_components/angular-ui-tree/demo/js/trees.js +60 -0
  1634. data/vendor/assets/bower_components/angular-ui-tree/demo/test.html +60 -0
  1635. data/vendor/assets/bower_components/angular-ui-tree/demo/tree-horizontal.html +66 -0
  1636. data/vendor/assets/bower_components/angular-ui-tree/demo/tree.html +66 -0
  1637. data/vendor/assets/bower_components/angular-ui-tree/demo/trees.html +92 -0
  1638. data/vendor/assets/bower_components/angular-ui-tree/dist/angular-ui-tree.js +1243 -0
  1639. data/vendor/assets/bower_components/angular-ui-tree/dist/angular-ui-tree.min.css +2 -0
  1640. data/vendor/assets/bower_components/angular-ui-tree/dist/angular-ui-tree.min.js +6 -0
  1641. data/vendor/assets/bower_components/angular-ui-tree/guide/00_usage.ngdoc +78 -0
  1642. data/vendor/assets/bower_components/angular-ui-tree/guide/01_development_setup.ngdoc +58 -0
  1643. data/vendor/assets/bower_components/angular-ui-tree/guide/index.ngdoc +33 -0
  1644. data/vendor/assets/bower_components/angular-ui-tree/karma.conf.js +49 -0
  1645. data/vendor/assets/bower_components/angular-ui-tree/package.json +40 -0
  1646. data/vendor/assets/bower_components/angular-ui-tree/source/angular-ui-tree.css +63 -0
  1647. data/vendor/assets/bower_components/angular-ui-tree/source/angular-ui-tree.scss +63 -0
  1648. data/vendor/assets/bower_components/angular-ui-tree/source/controllers/handleCtrl.js +16 -0
  1649. data/vendor/assets/bower_components/angular-ui-tree/source/controllers/nodeCtrl.js +141 -0
  1650. data/vendor/assets/bower_components/angular-ui-tree/source/controllers/nodesCtrl.js +100 -0
  1651. data/vendor/assets/bower_components/angular-ui-tree/source/controllers/treeCtrl.js +63 -0
  1652. data/vendor/assets/bower_components/angular-ui-tree/source/directives/uiTree.js +115 -0
  1653. data/vendor/assets/bower_components/angular-ui-tree/source/directives/uiTreeHandle.js +27 -0
  1654. data/vendor/assets/bower_components/angular-ui-tree/source/directives/uiTreeNode.js +427 -0
  1655. data/vendor/assets/bower_components/angular-ui-tree/source/directives/uiTreeNodes.js +59 -0
  1656. data/vendor/assets/bower_components/angular-ui-tree/source/main.js +23 -0
  1657. data/vendor/assets/bower_components/angular-ui-tree/source/services/helper.js +265 -0
  1658. data/vendor/assets/bower_components/angular-xeditable/CHANGELOG.txt +95 -0
  1659. data/vendor/assets/bower_components/angular-xeditable/bower.json +33 -0
  1660. data/vendor/assets/bower_components/angular-xeditable/dist/css/xeditable.css +7 -0
  1661. data/vendor/assets/bower_components/angular-xeditable/dist/js/xeditable.js +2227 -0
  1662. data/vendor/assets/bower_components/angular-xeditable/dist/js/xeditable.min.js +6 -0
  1663. data/vendor/assets/bower_components/angular-xeditable/npm-debug.log +28 -0
  1664. data/vendor/assets/bower_components/angular-xeditable/readme.md +46 -0
  1665. data/vendor/assets/bower_components/angularjs-dropdown-multiselect/CHANGELOG.md +9 -0
  1666. data/vendor/assets/bower_components/angularjs-dropdown-multiselect/Gruntfile.js +120 -0
  1667. data/vendor/assets/bower_components/angularjs-dropdown-multiselect/README.md +48 -0
  1668. data/vendor/assets/bower_components/angularjs-dropdown-multiselect/bower.json +32 -0
  1669. data/vendor/assets/bower_components/angularjs-dropdown-multiselect/development_index.html +67 -0
  1670. data/vendor/assets/bower_components/angularjs-dropdown-multiselect/dist/angularjs-dropdown-multiselect.min.js +1 -0
  1671. data/vendor/assets/bower_components/angularjs-dropdown-multiselect/package.json +28 -0
  1672. data/vendor/assets/bower_components/angularjs-dropdown-multiselect/pages/images/body-bg.jpg +0 -0
  1673. data/vendor/assets/bower_components/angularjs-dropdown-multiselect/pages/images/download-button.png +0 -0
  1674. data/vendor/assets/bower_components/angularjs-dropdown-multiselect/pages/images/github-button.png +0 -0
  1675. data/vendor/assets/bower_components/angularjs-dropdown-multiselect/pages/images/header-bg.jpg +0 -0
  1676. data/vendor/assets/bower_components/angularjs-dropdown-multiselect/pages/images/highlight-bg.jpg +0 -0
  1677. data/vendor/assets/bower_components/angularjs-dropdown-multiselect/pages/images/sidebar-bg.jpg +0 -0
  1678. data/vendor/assets/bower_components/angularjs-dropdown-multiselect/pages/index.html +67 -0
  1679. data/vendor/assets/bower_components/angularjs-dropdown-multiselect/pages/javascripts/app.js +25 -0
  1680. data/vendor/assets/bower_components/angularjs-dropdown-multiselect/pages/javascripts/main.js +1 -0
  1681. data/vendor/assets/bower_components/angularjs-dropdown-multiselect/pages/javascripts/pages/home/ExampleCtrl.js +158 -0
  1682. data/vendor/assets/bower_components/angularjs-dropdown-multiselect/pages/javascripts/pages/home/home.html +897 -0
  1683. data/vendor/assets/bower_components/angularjs-dropdown-multiselect/pages/stylesheets/print.css +226 -0
  1684. data/vendor/assets/bower_components/angularjs-dropdown-multiselect/pages/stylesheets/pygment_trac.css +69 -0
  1685. data/vendor/assets/bower_components/angularjs-dropdown-multiselect/pages/stylesheets/stylesheet.css +410 -0
  1686. data/vendor/assets/bower_components/angularjs-dropdown-multiselect/src/angularjs-dropdown-multiselect.js +292 -0
  1687. data/vendor/assets/bower_components/bootstrap/Gruntfile.js +480 -0
  1688. data/vendor/assets/bower_components/bootstrap/LICENSE +21 -0
  1689. data/vendor/assets/bower_components/bootstrap/README.md +127 -0
  1690. data/vendor/assets/bower_components/bootstrap/bower.json +38 -0
  1691. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap-theme.css +442 -0
  1692. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap-theme.css.map +1 -0
  1693. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap-theme.min.css +5 -0
  1694. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap.css.map +1 -0
  1695. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap.less +6203 -0
  1696. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap.min.css.erb +5 -0
  1697. data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot +0 -0
  1698. data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.svg +229 -0
  1699. data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
  1700. data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff +0 -0
  1701. data/vendor/assets/bower_components/bootstrap/dist/js/bootstrap.js +2114 -0
  1702. data/vendor/assets/bower_components/bootstrap/dist/js/bootstrap.min.js +6 -0
  1703. data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
  1704. data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.svg +229 -0
  1705. data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
  1706. data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
  1707. data/vendor/assets/bower_components/bootstrap/grunt/bs-glyphicons-data-generator.js +41 -0
  1708. data/vendor/assets/bower_components/bootstrap/grunt/bs-lessdoc-parser.js +236 -0
  1709. data/vendor/assets/bower_components/bootstrap/grunt/bs-raw-files-generator.js +46 -0
  1710. data/vendor/assets/bower_components/bootstrap/grunt/sauce_browsers.yml +82 -0
  1711. data/vendor/assets/bower_components/bootstrap/js/affix.js +142 -0
  1712. data/vendor/assets/bower_components/bootstrap/js/alert.js +92 -0
  1713. data/vendor/assets/bower_components/bootstrap/js/button.js +110 -0
  1714. data/vendor/assets/bower_components/bootstrap/js/carousel.js +223 -0
  1715. data/vendor/assets/bower_components/bootstrap/js/collapse.js +170 -0
  1716. data/vendor/assets/bower_components/bootstrap/js/dropdown.js +151 -0
  1717. data/vendor/assets/bower_components/bootstrap/js/modal.js +280 -0
  1718. data/vendor/assets/bower_components/bootstrap/js/popover.js +113 -0
  1719. data/vendor/assets/bower_components/bootstrap/js/scrollspy.js +170 -0
  1720. data/vendor/assets/bower_components/bootstrap/js/tab.js +128 -0
  1721. data/vendor/assets/bower_components/bootstrap/js/tooltip.js +457 -0
  1722. data/vendor/assets/bower_components/bootstrap/js/transition.js +59 -0
  1723. data/vendor/assets/bower_components/bootstrap/less/alerts.less +68 -0
  1724. data/vendor/assets/bower_components/bootstrap/less/badges.less +55 -0
  1725. data/vendor/assets/bower_components/bootstrap/less/bootstrap.less +50 -0
  1726. data/vendor/assets/bower_components/bootstrap/less/breadcrumbs.less +26 -0
  1727. data/vendor/assets/bower_components/bootstrap/less/button-groups.less +240 -0
  1728. data/vendor/assets/bower_components/bootstrap/less/buttons.less +157 -0
  1729. data/vendor/assets/bower_components/bootstrap/less/carousel.less +243 -0
  1730. data/vendor/assets/bower_components/bootstrap/less/close.less +33 -0
  1731. data/vendor/assets/bower_components/bootstrap/less/code.less +68 -0
  1732. data/vendor/assets/bower_components/bootstrap/less/component-animations.less +31 -0
  1733. data/vendor/assets/bower_components/bootstrap/less/dropdowns.less +215 -0
  1734. data/vendor/assets/bower_components/bootstrap/less/forms.less +540 -0
  1735. data/vendor/assets/bower_components/bootstrap/less/glyphicons.less +233 -0
  1736. data/vendor/assets/bower_components/bootstrap/less/grid.less +84 -0
  1737. data/vendor/assets/bower_components/bootstrap/less/input-groups.less +166 -0
  1738. data/vendor/assets/bower_components/bootstrap/less/jumbotron.less +48 -0
  1739. data/vendor/assets/bower_components/bootstrap/less/labels.less +64 -0
  1740. data/vendor/assets/bower_components/bootstrap/less/list-group.less +131 -0
  1741. data/vendor/assets/bower_components/bootstrap/less/media.less +56 -0
  1742. data/vendor/assets/bower_components/bootstrap/less/mixins/alerts.less +14 -0
  1743. data/vendor/assets/bower_components/bootstrap/less/mixins/background-variant.less +8 -0
  1744. data/vendor/assets/bower_components/bootstrap/less/mixins/border-radius.less +18 -0
  1745. data/vendor/assets/bower_components/bootstrap/less/mixins/buttons.less +50 -0
  1746. data/vendor/assets/bower_components/bootstrap/less/mixins/center-block.less +7 -0
  1747. data/vendor/assets/bower_components/bootstrap/less/mixins/clearfix.less +22 -0
  1748. data/vendor/assets/bower_components/bootstrap/less/mixins/forms.less +81 -0
  1749. data/vendor/assets/bower_components/bootstrap/less/mixins/gradients.less +59 -0
  1750. data/vendor/assets/bower_components/bootstrap/less/mixins/grid-framework.less +91 -0
  1751. data/vendor/assets/bower_components/bootstrap/less/mixins/grid.less +122 -0
  1752. data/vendor/assets/bower_components/bootstrap/less/mixins/hide-text.less +21 -0
  1753. data/vendor/assets/bower_components/bootstrap/less/mixins/image.less +34 -0
  1754. data/vendor/assets/bower_components/bootstrap/less/mixins/labels.less +12 -0
  1755. data/vendor/assets/bower_components/bootstrap/less/mixins/list-group.less +29 -0
  1756. data/vendor/assets/bower_components/bootstrap/less/mixins/nav-divider.less +10 -0
  1757. data/vendor/assets/bower_components/bootstrap/less/mixins/nav-vertical-align.less +9 -0
  1758. data/vendor/assets/bower_components/bootstrap/less/mixins/opacity.less +8 -0
  1759. data/vendor/assets/bower_components/bootstrap/less/mixins/pagination.less +23 -0
  1760. data/vendor/assets/bower_components/bootstrap/less/mixins/panels.less +24 -0
  1761. data/vendor/assets/bower_components/bootstrap/less/mixins/progress-bar.less +10 -0
  1762. data/vendor/assets/bower_components/bootstrap/less/mixins/reset-filter.less +8 -0
  1763. data/vendor/assets/bower_components/bootstrap/less/mixins/resize.less +6 -0
  1764. data/vendor/assets/bower_components/bootstrap/less/mixins/responsive-visibility.less +15 -0
  1765. data/vendor/assets/bower_components/bootstrap/less/mixins/size.less +10 -0
  1766. data/vendor/assets/bower_components/bootstrap/less/mixins/tab-focus.less +9 -0
  1767. data/vendor/assets/bower_components/bootstrap/less/mixins/table-row.less +28 -0
  1768. data/vendor/assets/bower_components/bootstrap/less/mixins/text-emphasis.less +8 -0
  1769. data/vendor/assets/bower_components/bootstrap/less/mixins/text-overflow.less +8 -0
  1770. data/vendor/assets/bower_components/bootstrap/less/mixins/vendor-prefixes.less +224 -0
  1771. data/vendor/assets/bower_components/bootstrap/less/mixins.less +39 -0
  1772. data/vendor/assets/bower_components/bootstrap/less/modals.less +150 -0
  1773. data/vendor/assets/bower_components/bootstrap/less/navbar.less +655 -0
  1774. data/vendor/assets/bower_components/bootstrap/less/navs.less +242 -0
  1775. data/vendor/assets/bower_components/bootstrap/less/normalize.less +425 -0
  1776. data/vendor/assets/bower_components/bootstrap/less/pager.less +55 -0
  1777. data/vendor/assets/bower_components/bootstrap/less/pagination.less +88 -0
  1778. data/vendor/assets/bower_components/bootstrap/less/panels.less +243 -0
  1779. data/vendor/assets/bower_components/bootstrap/less/popovers.less +133 -0
  1780. data/vendor/assets/bower_components/bootstrap/less/print.less +101 -0
  1781. data/vendor/assets/bower_components/bootstrap/less/progress-bars.less +105 -0
  1782. data/vendor/assets/bower_components/bootstrap/less/responsive-embed.less +34 -0
  1783. data/vendor/assets/bower_components/bootstrap/less/responsive-utilities.less +194 -0
  1784. data/vendor/assets/bower_components/bootstrap/less/scaffolding.less +150 -0
  1785. data/vendor/assets/bower_components/bootstrap/less/tables.less +233 -0
  1786. data/vendor/assets/bower_components/bootstrap/less/theme.less +258 -0
  1787. data/vendor/assets/bower_components/bootstrap/less/thumbnails.less +36 -0
  1788. data/vendor/assets/bower_components/bootstrap/less/tooltip.less +95 -0
  1789. data/vendor/assets/bower_components/bootstrap/less/type.less +313 -0
  1790. data/vendor/assets/bower_components/bootstrap/less/utilities.less +57 -0
  1791. data/vendor/assets/bower_components/bootstrap/less/variables.less +846 -0
  1792. data/vendor/assets/bower_components/bootstrap/less/wells.less +29 -0
  1793. data/vendor/assets/bower_components/bootstrap/package.json +81 -0
  1794. data/vendor/assets/bower_components/codemirror/AUTHORS +406 -0
  1795. data/vendor/assets/bower_components/codemirror/CONTRIBUTING.md +76 -0
  1796. data/vendor/assets/bower_components/codemirror/LICENSE +19 -0
  1797. data/vendor/assets/bower_components/codemirror/README.md +11 -0
  1798. data/vendor/assets/bower_components/codemirror/addon/comment/comment.js +183 -0
  1799. data/vendor/assets/bower_components/codemirror/addon/comment/continuecomment.js +85 -0
  1800. data/vendor/assets/bower_components/codemirror/addon/dialog/dialog.css +32 -0
  1801. data/vendor/assets/bower_components/codemirror/addon/dialog/dialog.js +155 -0
  1802. data/vendor/assets/bower_components/codemirror/addon/display/fullscreen.css +6 -0
  1803. data/vendor/assets/bower_components/codemirror/addon/display/fullscreen.js +41 -0
  1804. data/vendor/assets/bower_components/codemirror/addon/display/placeholder.js +58 -0
  1805. data/vendor/assets/bower_components/codemirror/addon/display/rulers.js +64 -0
  1806. data/vendor/assets/bower_components/codemirror/addon/edit/closebrackets.js +159 -0
  1807. data/vendor/assets/bower_components/codemirror/addon/edit/closetag.js +159 -0
  1808. data/vendor/assets/bower_components/codemirror/addon/edit/continuelist.js +51 -0
  1809. data/vendor/assets/bower_components/codemirror/addon/edit/matchbrackets.js +120 -0
  1810. data/vendor/assets/bower_components/codemirror/addon/edit/matchtags.js +66 -0
  1811. data/vendor/assets/bower_components/codemirror/addon/edit/trailingspace.js +27 -0
  1812. data/vendor/assets/bower_components/codemirror/addon/fold/brace-fold.js +105 -0
  1813. data/vendor/assets/bower_components/codemirror/addon/fold/comment-fold.js +57 -0
  1814. data/vendor/assets/bower_components/codemirror/addon/fold/foldcode.js +145 -0
  1815. data/vendor/assets/bower_components/codemirror/addon/fold/foldgutter.css +20 -0
  1816. data/vendor/assets/bower_components/codemirror/addon/fold/foldgutter.js +134 -0
  1817. data/vendor/assets/bower_components/codemirror/addon/fold/indent-fold.js +44 -0
  1818. data/vendor/assets/bower_components/codemirror/addon/fold/markdown-fold.js +49 -0
  1819. data/vendor/assets/bower_components/codemirror/addon/fold/xml-fold.js +182 -0
  1820. data/vendor/assets/bower_components/codemirror/addon/hint/anyword-hint.js +42 -0
  1821. data/vendor/assets/bower_components/codemirror/addon/hint/css-hint.js +56 -0
  1822. data/vendor/assets/bower_components/codemirror/addon/hint/html-hint.js +348 -0
  1823. data/vendor/assets/bower_components/codemirror/addon/hint/javascript-hint.js +141 -0
  1824. data/vendor/assets/bower_components/codemirror/addon/hint/python-hint.js +102 -0
  1825. data/vendor/assets/bower_components/codemirror/addon/hint/show-hint.css +38 -0
  1826. data/vendor/assets/bower_components/codemirror/addon/hint/show-hint.js +389 -0
  1827. data/vendor/assets/bower_components/codemirror/addon/hint/sql-hint.js +194 -0
  1828. data/vendor/assets/bower_components/codemirror/addon/hint/xml-hint.js +111 -0
  1829. data/vendor/assets/bower_components/codemirror/addon/lint/coffeescript-lint.js +41 -0
  1830. data/vendor/assets/bower_components/codemirror/addon/lint/css-lint.js +35 -0
  1831. data/vendor/assets/bower_components/codemirror/addon/lint/javascript-lint.js +136 -0
  1832. data/vendor/assets/bower_components/codemirror/addon/lint/json-lint.js +31 -0
  1833. data/vendor/assets/bower_components/codemirror/addon/lint/lint.css +73 -0
  1834. data/vendor/assets/bower_components/codemirror/addon/lint/lint.js +204 -0
  1835. data/vendor/assets/bower_components/codemirror/addon/lint/yaml-lint.js +28 -0
  1836. data/vendor/assets/bower_components/codemirror/addon/merge/merge.css +98 -0
  1837. data/vendor/assets/bower_components/codemirror/addon/merge/merge.js +536 -0
  1838. data/vendor/assets/bower_components/codemirror/addon/mode/loadmode.js +64 -0
  1839. data/vendor/assets/bower_components/codemirror/addon/mode/multiplex.js +118 -0
  1840. data/vendor/assets/bower_components/codemirror/addon/mode/multiplex_test.js +33 -0
  1841. data/vendor/assets/bower_components/codemirror/addon/mode/overlay.js +85 -0
  1842. data/vendor/assets/bower_components/codemirror/addon/mode/simple.js +210 -0
  1843. data/vendor/assets/bower_components/codemirror/addon/runmode/colorize.js +40 -0
  1844. data/vendor/assets/bower_components/codemirror/addon/runmode/runmode-standalone.js +157 -0
  1845. data/vendor/assets/bower_components/codemirror/addon/runmode/runmode.js +72 -0
  1846. data/vendor/assets/bower_components/codemirror/addon/runmode/runmode.node.js +120 -0
  1847. data/vendor/assets/bower_components/codemirror/addon/scroll/scrollpastend.js +46 -0
  1848. data/vendor/assets/bower_components/codemirror/addon/search/match-highlighter.js +128 -0
  1849. data/vendor/assets/bower_components/codemirror/addon/search/search.js +159 -0
  1850. data/vendor/assets/bower_components/codemirror/addon/search/searchcursor.js +189 -0
  1851. data/vendor/assets/bower_components/codemirror/addon/selection/active-line.js +71 -0
  1852. data/vendor/assets/bower_components/codemirror/addon/selection/mark-selection.js +118 -0
  1853. data/vendor/assets/bower_components/codemirror/addon/tern/tern.css +86 -0
  1854. data/vendor/assets/bower_components/codemirror/addon/tern/tern.js +668 -0
  1855. data/vendor/assets/bower_components/codemirror/addon/tern/worker.js +44 -0
  1856. data/vendor/assets/bower_components/codemirror/addon/wrap/hardwrap.js +139 -0
  1857. data/vendor/assets/bower_components/codemirror/bower.json +16 -0
  1858. data/vendor/assets/bower_components/codemirror/keymap/emacs.js +393 -0
  1859. data/vendor/assets/bower_components/codemirror/keymap/sublime.js +540 -0
  1860. data/vendor/assets/bower_components/codemirror/keymap/vim.js +4829 -0
  1861. data/vendor/assets/bower_components/codemirror/lib/codemirror.css +318 -0
  1862. data/vendor/assets/bower_components/codemirror/lib/codemirror.js +7922 -0
  1863. data/vendor/assets/bower_components/codemirror/mode/apl/apl.js +175 -0
  1864. data/vendor/assets/bower_components/codemirror/mode/asterisk/asterisk.js +198 -0
  1865. data/vendor/assets/bower_components/codemirror/mode/clike/clike.js +489 -0
  1866. data/vendor/assets/bower_components/codemirror/mode/clike/scala.html +767 -0
  1867. data/vendor/assets/bower_components/codemirror/mode/clojure/clojure.js +243 -0
  1868. data/vendor/assets/bower_components/codemirror/mode/cobol/cobol.js +255 -0
  1869. data/vendor/assets/bower_components/codemirror/mode/coffeescript/coffeescript.js +369 -0
  1870. data/vendor/assets/bower_components/codemirror/mode/commonlisp/commonlisp.js +120 -0
  1871. data/vendor/assets/bower_components/codemirror/mode/css/css.js +717 -0
  1872. data/vendor/assets/bower_components/codemirror/mode/css/less.html +152 -0
  1873. data/vendor/assets/bower_components/codemirror/mode/css/less_test.js +51 -0
  1874. data/vendor/assets/bower_components/codemirror/mode/css/scss.html +157 -0
  1875. data/vendor/assets/bower_components/codemirror/mode/css/scss_test.js +110 -0
  1876. data/vendor/assets/bower_components/codemirror/mode/css/test.js +135 -0
  1877. data/vendor/assets/bower_components/codemirror/mode/cypher/cypher.js +146 -0
  1878. data/vendor/assets/bower_components/codemirror/mode/d/d.js +218 -0
  1879. data/vendor/assets/bower_components/codemirror/mode/diff/diff.js +47 -0
  1880. data/vendor/assets/bower_components/codemirror/mode/django/django.js +67 -0
  1881. data/vendor/assets/bower_components/codemirror/mode/dockerfile/dockerfile.js +80 -0
  1882. data/vendor/assets/bower_components/codemirror/mode/dtd/dtd.js +142 -0
  1883. data/vendor/assets/bower_components/codemirror/mode/dylan/dylan.js +299 -0
  1884. data/vendor/assets/bower_components/codemirror/mode/ecl/ecl.js +207 -0
  1885. data/vendor/assets/bower_components/codemirror/mode/eiffel/eiffel.js +162 -0
  1886. data/vendor/assets/bower_components/codemirror/mode/erlang/erlang.js +622 -0
  1887. data/vendor/assets/bower_components/codemirror/mode/fortran/fortran.js +188 -0
  1888. data/vendor/assets/bower_components/codemirror/mode/gas/gas.js +345 -0
  1889. data/vendor/assets/bower_components/codemirror/mode/gfm/gfm.js +123 -0
  1890. data/vendor/assets/bower_components/codemirror/mode/gfm/test.js +213 -0
  1891. data/vendor/assets/bower_components/codemirror/mode/gherkin/gherkin.js +178 -0
  1892. data/vendor/assets/bower_components/codemirror/mode/go/go.js +184 -0
  1893. data/vendor/assets/bower_components/codemirror/mode/groovy/groovy.js +226 -0
  1894. data/vendor/assets/bower_components/codemirror/mode/haml/haml.js +159 -0
  1895. data/vendor/assets/bower_components/codemirror/mode/haml/test.js +97 -0
  1896. data/vendor/assets/bower_components/codemirror/mode/haskell/haskell.js +267 -0
  1897. data/vendor/assets/bower_components/codemirror/mode/haxe/haxe.js +518 -0
  1898. data/vendor/assets/bower_components/codemirror/mode/htmlembedded/htmlembedded.js +86 -0
  1899. data/vendor/assets/bower_components/codemirror/mode/htmlmixed/htmlmixed.js +121 -0
  1900. data/vendor/assets/bower_components/codemirror/mode/http/http.js +113 -0
  1901. data/vendor/assets/bower_components/codemirror/mode/idl/idl.js +290 -0
  1902. data/vendor/assets/bower_components/codemirror/mode/jade/jade.js +590 -0
  1903. data/vendor/assets/bower_components/codemirror/mode/javascript/javascript.js +684 -0
  1904. data/vendor/assets/bower_components/codemirror/mode/javascript/json-ld.html +72 -0
  1905. data/vendor/assets/bower_components/codemirror/mode/javascript/test.js +194 -0
  1906. data/vendor/assets/bower_components/codemirror/mode/javascript/typescript.html +61 -0
  1907. data/vendor/assets/bower_components/codemirror/mode/jinja2/jinja2.js +142 -0
  1908. data/vendor/assets/bower_components/codemirror/mode/julia/julia.js +301 -0
  1909. data/vendor/assets/bower_components/codemirror/mode/kotlin/kotlin.js +280 -0
  1910. data/vendor/assets/bower_components/codemirror/mode/livescript/livescript.js +280 -0
  1911. data/vendor/assets/bower_components/codemirror/mode/lua/lua.js +159 -0
  1912. data/vendor/assets/bower_components/codemirror/mode/markdown/markdown.js +765 -0
  1913. data/vendor/assets/bower_components/codemirror/mode/markdown/test.js +754 -0
  1914. data/vendor/assets/bower_components/codemirror/mode/meta.js +160 -0
  1915. data/vendor/assets/bower_components/codemirror/mode/mirc/mirc.js +193 -0
  1916. data/vendor/assets/bower_components/codemirror/mode/mllike/mllike.js +205 -0
  1917. data/vendor/assets/bower_components/codemirror/mode/modelica/modelica.js +245 -0
  1918. data/vendor/assets/bower_components/codemirror/mode/nginx/nginx.js +178 -0
  1919. data/vendor/assets/bower_components/codemirror/mode/ntriples/ntriples.js +186 -0
  1920. data/vendor/assets/bower_components/codemirror/mode/octave/octave.js +135 -0
  1921. data/vendor/assets/bower_components/codemirror/mode/pascal/pascal.js +109 -0
  1922. data/vendor/assets/bower_components/codemirror/mode/pegjs/pegjs.js +114 -0
  1923. data/vendor/assets/bower_components/codemirror/mode/perl/perl.js +832 -0
  1924. data/vendor/assets/bower_components/codemirror/mode/php/php.js +226 -0
  1925. data/vendor/assets/bower_components/codemirror/mode/php/test.js +154 -0
  1926. data/vendor/assets/bower_components/codemirror/mode/pig/pig.js +188 -0
  1927. data/vendor/assets/bower_components/codemirror/mode/properties/properties.js +78 -0
  1928. data/vendor/assets/bower_components/codemirror/mode/puppet/puppet.js +220 -0
  1929. data/vendor/assets/bower_components/codemirror/mode/python/python.js +359 -0
  1930. data/vendor/assets/bower_components/codemirror/mode/q/q.js +139 -0
  1931. data/vendor/assets/bower_components/codemirror/mode/r/r.js +162 -0
  1932. data/vendor/assets/bower_components/codemirror/mode/rpm/rpm.js +101 -0
  1933. data/vendor/assets/bower_components/codemirror/mode/rst/rst.js +557 -0
  1934. data/vendor/assets/bower_components/codemirror/mode/ruby/ruby.js +285 -0
  1935. data/vendor/assets/bower_components/codemirror/mode/ruby/test.js +14 -0
  1936. data/vendor/assets/bower_components/codemirror/mode/rust/rust.js +451 -0
  1937. data/vendor/assets/bower_components/codemirror/mode/sass/sass.js +327 -0
  1938. data/vendor/assets/bower_components/codemirror/mode/scheme/scheme.js +248 -0
  1939. data/vendor/assets/bower_components/codemirror/mode/shell/shell.js +138 -0
  1940. data/vendor/assets/bower_components/codemirror/mode/shell/test.js +58 -0
  1941. data/vendor/assets/bower_components/codemirror/mode/sieve/sieve.js +193 -0
  1942. data/vendor/assets/bower_components/codemirror/mode/slim/slim.js +575 -0
  1943. data/vendor/assets/bower_components/codemirror/mode/slim/test.js +96 -0
  1944. data/vendor/assets/bower_components/codemirror/mode/smalltalk/smalltalk.js +168 -0
  1945. data/vendor/assets/bower_components/codemirror/mode/smarty/smarty.js +221 -0
  1946. data/vendor/assets/bower_components/codemirror/mode/smartymixed/smartymixed.js +197 -0
  1947. data/vendor/assets/bower_components/codemirror/mode/solr/solr.js +104 -0
  1948. data/vendor/assets/bower_components/codemirror/mode/sparql/sparql.js +174 -0
  1949. data/vendor/assets/bower_components/codemirror/mode/sql/sql.js +391 -0
  1950. data/vendor/assets/bower_components/codemirror/mode/stex/stex.js +253 -0
  1951. data/vendor/assets/bower_components/codemirror/mode/stex/test.js +123 -0
  1952. data/vendor/assets/bower_components/codemirror/mode/tcl/tcl.js +147 -0
  1953. data/vendor/assets/bower_components/codemirror/mode/textile/test.js +406 -0
  1954. data/vendor/assets/bower_components/codemirror/mode/textile/textile.js +553 -0
  1955. data/vendor/assets/bower_components/codemirror/mode/tiddlywiki/tiddlywiki.css +14 -0
  1956. data/vendor/assets/bower_components/codemirror/mode/tiddlywiki/tiddlywiki.js +369 -0
  1957. data/vendor/assets/bower_components/codemirror/mode/tiki/tiki.css +26 -0
  1958. data/vendor/assets/bower_components/codemirror/mode/tiki/tiki.js +323 -0
  1959. data/vendor/assets/bower_components/codemirror/mode/toml/toml.js +88 -0
  1960. data/vendor/assets/bower_components/codemirror/mode/tornado/tornado.js +68 -0
  1961. data/vendor/assets/bower_components/codemirror/mode/turtle/turtle.js +160 -0
  1962. data/vendor/assets/bower_components/codemirror/mode/vb/vb.js +274 -0
  1963. data/vendor/assets/bower_components/codemirror/mode/vbscript/vbscript.js +350 -0
  1964. data/vendor/assets/bower_components/codemirror/mode/velocity/velocity.js +201 -0
  1965. data/vendor/assets/bower_components/codemirror/mode/verilog/test.js +273 -0
  1966. data/vendor/assets/bower_components/codemirror/mode/verilog/verilog.js +364 -0
  1967. data/vendor/assets/bower_components/codemirror/mode/xml/test.js +51 -0
  1968. data/vendor/assets/bower_components/codemirror/mode/xml/xml.js +384 -0
  1969. data/vendor/assets/bower_components/codemirror/mode/xquery/test.js +67 -0
  1970. data/vendor/assets/bower_components/codemirror/mode/xquery/xquery.js +447 -0
  1971. data/vendor/assets/bower_components/codemirror/mode/yaml/yaml.js +117 -0
  1972. data/vendor/assets/bower_components/codemirror/mode/z80/z80.js +100 -0
  1973. data/vendor/assets/bower_components/codemirror/theme/3024-day.css +38 -0
  1974. data/vendor/assets/bower_components/codemirror/theme/3024-night.css +37 -0
  1975. data/vendor/assets/bower_components/codemirror/theme/ambiance-mobile.css +5 -0
  1976. data/vendor/assets/bower_components/codemirror/theme/ambiance.css +77 -0
  1977. data/vendor/assets/bower_components/codemirror/theme/base16-dark.css +36 -0
  1978. data/vendor/assets/bower_components/codemirror/theme/base16-light.css +36 -0
  1979. data/vendor/assets/bower_components/codemirror/theme/blackboard.css +30 -0
  1980. data/vendor/assets/bower_components/codemirror/theme/cobalt.css +23 -0
  1981. data/vendor/assets/bower_components/codemirror/theme/eclipse.css +23 -0
  1982. data/vendor/assets/bower_components/codemirror/theme/elegant.css +13 -0
  1983. data/vendor/assets/bower_components/codemirror/theme/erlang-dark.css +32 -0
  1984. data/vendor/assets/bower_components/codemirror/theme/lesser-dark.css +45 -0
  1985. data/vendor/assets/bower_components/codemirror/theme/mbo.css +35 -0
  1986. data/vendor/assets/bower_components/codemirror/theme/mdn-like.css +44 -0
  1987. data/vendor/assets/bower_components/codemirror/theme/midnight.css +45 -0
  1988. data/vendor/assets/bower_components/codemirror/theme/monokai.css +31 -0
  1989. data/vendor/assets/bower_components/codemirror/theme/neat.css +12 -0
  1990. data/vendor/assets/bower_components/codemirror/theme/neo.css +43 -0
  1991. data/vendor/assets/bower_components/codemirror/theme/night.css +26 -0
  1992. data/vendor/assets/bower_components/codemirror/theme/paraiso-dark.css +36 -0
  1993. data/vendor/assets/bower_components/codemirror/theme/paraiso-light.css +36 -0
  1994. data/vendor/assets/bower_components/codemirror/theme/pastel-on-dark.css +50 -0
  1995. data/vendor/assets/bower_components/codemirror/theme/rubyblue.css +23 -0
  1996. data/vendor/assets/bower_components/codemirror/theme/solarized.css +165 -0
  1997. data/vendor/assets/bower_components/codemirror/theme/the-matrix.css +28 -0
  1998. data/vendor/assets/bower_components/codemirror/theme/tomorrow-night-eighties.css +36 -0
  1999. data/vendor/assets/bower_components/codemirror/theme/twilight.css +30 -0
  2000. data/vendor/assets/bower_components/codemirror/theme/vibrant-ink.css +32 -0
  2001. data/vendor/assets/bower_components/codemirror/theme/xq-dark.css +51 -0
  2002. data/vendor/assets/bower_components/codemirror/theme/xq-light.css +43 -0
  2003. data/vendor/assets/bower_components/es5-shim/CHANGES +105 -0
  2004. data/vendor/assets/bower_components/es5-shim/CONTRIBUTORS.md +27 -0
  2005. data/vendor/assets/bower_components/es5-shim/LICENSE +19 -0
  2006. data/vendor/assets/bower_components/es5-shim/README.md +155 -0
  2007. data/vendor/assets/bower_components/es5-shim/es5-sham.js +446 -0
  2008. data/vendor/assets/bower_components/es5-shim/es5-sham.map +1 -0
  2009. data/vendor/assets/bower_components/es5-shim/es5-sham.min.js +2 -0
  2010. data/vendor/assets/bower_components/es5-shim/es5-shim.js +1360 -0
  2011. data/vendor/assets/bower_components/es5-shim/es5-shim.map +1 -0
  2012. data/vendor/assets/bower_components/es5-shim/es5-shim.min.js +2 -0
  2013. data/vendor/assets/bower_components/es5-shim/package.json +41 -0
  2014. data/vendor/assets/bower_components/es5-shim/tests/helpers/h-kill.js +70 -0
  2015. data/vendor/assets/bower_components/es5-shim/tests/helpers/h-matchers.js +34 -0
  2016. data/vendor/assets/bower_components/es5-shim/tests/helpers/h.js +3 -0
  2017. data/vendor/assets/bower_components/es5-shim/tests/index.html +64 -0
  2018. data/vendor/assets/bower_components/es5-shim/tests/index.min.html +63 -0
  2019. data/vendor/assets/bower_components/es5-shim/tests/lib/jasmine-html.js +190 -0
  2020. data/vendor/assets/bower_components/es5-shim/tests/lib/jasmine.css +166 -0
  2021. data/vendor/assets/bower_components/es5-shim/tests/lib/jasmine.js +2477 -0
  2022. data/vendor/assets/bower_components/es5-shim/tests/lib/jasmine_favicon.png +0 -0
  2023. data/vendor/assets/bower_components/es5-shim/tests/lib/json2.js +478 -0
  2024. data/vendor/assets/bower_components/es5-shim/tests/spec/helpers-jasmine.js +3 -0
  2025. data/vendor/assets/bower_components/es5-shim/tests/spec/s-array.js +1247 -0
  2026. data/vendor/assets/bower_components/es5-shim/tests/spec/s-date.js +160 -0
  2027. data/vendor/assets/bower_components/es5-shim/tests/spec/s-function.js +166 -0
  2028. data/vendor/assets/bower_components/es5-shim/tests/spec/s-global.js +40 -0
  2029. data/vendor/assets/bower_components/es5-shim/tests/spec/s-number.js +14 -0
  2030. data/vendor/assets/bower_components/es5-shim/tests/spec/s-object.js +181 -0
  2031. data/vendor/assets/bower_components/es5-shim/tests/spec/s-string.js +204 -0
  2032. data/vendor/assets/bower_components/flow.js/CHANGELOG.md +37 -0
  2033. data/vendor/assets/bower_components/flow.js/Gruntfile.js +132 -0
  2034. data/vendor/assets/bower_components/flow.js/LICENSE +21 -0
  2035. data/vendor/assets/bower_components/flow.js/README.md +263 -0
  2036. data/vendor/assets/bower_components/flow.js/bower.json +13 -0
  2037. data/vendor/assets/bower_components/flow.js/dist/flow.js +1532 -0
  2038. data/vendor/assets/bower_components/flow.js/dist/flow.min.js +2 -0
  2039. data/vendor/assets/bower_components/flow.js/karma.conf.js +114 -0
  2040. data/vendor/assets/bower_components/flow.js/package.json +50 -0
  2041. data/vendor/assets/bower_components/flow.js/src/flow.js +1532 -0
  2042. data/vendor/assets/bower_components/font-awesome/bower.json +23 -0
  2043. data/vendor/assets/bower_components/font-awesome/css/font-awesome.css +1672 -0
  2044. data/vendor/assets/bower_components/font-awesome/css/font-awesome.min.css +4 -0
  2045. data/vendor/assets/bower_components/font-awesome/fonts/FontAwesome.otf +0 -0
  2046. data/vendor/assets/bower_components/font-awesome/fonts/fontawesome-webfont.eot +0 -0
  2047. data/vendor/assets/bower_components/font-awesome/fonts/fontawesome-webfont.svg +520 -0
  2048. data/vendor/assets/bower_components/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
  2049. data/vendor/assets/bower_components/font-awesome/fonts/fontawesome-webfont.woff +0 -0
  2050. data/vendor/assets/bower_components/font-awesome/less/bordered-pulled.less +16 -0
  2051. data/vendor/assets/bower_components/font-awesome/less/core.less +11 -0
  2052. data/vendor/assets/bower_components/font-awesome/less/extras.less +2 -0
  2053. data/vendor/assets/bower_components/font-awesome/less/fixed-width.less +6 -0
  2054. data/vendor/assets/bower_components/font-awesome/less/font-awesome.less +17 -0
  2055. data/vendor/assets/bower_components/font-awesome/less/icons.less +552 -0
  2056. data/vendor/assets/bower_components/font-awesome/less/larger.less +13 -0
  2057. data/vendor/assets/bower_components/font-awesome/less/list.less +19 -0
  2058. data/vendor/assets/bower_components/font-awesome/less/mixins.less +25 -0
  2059. data/vendor/assets/bower_components/font-awesome/less/path.less +14 -0
  2060. data/vendor/assets/bower_components/font-awesome/less/rotated-flipped.less +20 -0
  2061. data/vendor/assets/bower_components/font-awesome/less/spinning.less +29 -0
  2062. data/vendor/assets/bower_components/font-awesome/less/stacked.less +20 -0
  2063. data/vendor/assets/bower_components/font-awesome/less/variables.less +560 -0
  2064. data/vendor/assets/bower_components/font-awesome/scss/_bordered-pulled.scss +16 -0
  2065. data/vendor/assets/bower_components/font-awesome/scss/_core.scss +11 -0
  2066. data/vendor/assets/bower_components/font-awesome/scss/_extras.scss +44 -0
  2067. data/vendor/assets/bower_components/font-awesome/scss/_fixed-width.scss +6 -0
  2068. data/vendor/assets/bower_components/font-awesome/scss/_icons.scss +552 -0
  2069. data/vendor/assets/bower_components/font-awesome/scss/_larger.scss +13 -0
  2070. data/vendor/assets/bower_components/font-awesome/scss/_list.scss +19 -0
  2071. data/vendor/assets/bower_components/font-awesome/scss/_mixins.scss +25 -0
  2072. data/vendor/assets/bower_components/font-awesome/scss/_path.scss +14 -0
  2073. data/vendor/assets/bower_components/font-awesome/scss/_rotated-flipped.scss +20 -0
  2074. data/vendor/assets/bower_components/font-awesome/scss/_spinning.scss +29 -0
  2075. data/vendor/assets/bower_components/font-awesome/scss/_stacked.scss +20 -0
  2076. data/vendor/assets/bower_components/font-awesome/scss/_variables.scss +561 -0
  2077. data/vendor/assets/bower_components/font-awesome/scss/font-awesome.scss +17 -0
  2078. data/vendor/assets/bower_components/jquery/MIT-LICENSE.txt +21 -0
  2079. data/vendor/assets/bower_components/jquery/bower.json +27 -0
  2080. data/vendor/assets/bower_components/jquery/dist/jquery.js +9190 -0
  2081. data/vendor/assets/bower_components/jquery/dist/jquery.min.js +5 -0
  2082. data/vendor/assets/bower_components/jquery/dist/jquery.min.map +1 -0
  2083. data/vendor/assets/bower_components/jquery/src/ajax/jsonp.js +89 -0
  2084. data/vendor/assets/bower_components/jquery/src/ajax/load.js +75 -0
  2085. data/vendor/assets/bower_components/jquery/src/ajax/parseJSON.js +13 -0
  2086. data/vendor/assets/bower_components/jquery/src/ajax/parseXML.js +28 -0
  2087. data/vendor/assets/bower_components/jquery/src/ajax/script.js +64 -0
  2088. data/vendor/assets/bower_components/jquery/src/ajax/var/nonce.js +5 -0
  2089. data/vendor/assets/bower_components/jquery/src/ajax/var/rquery.js +3 -0
  2090. data/vendor/assets/bower_components/jquery/src/ajax/xhr.js +135 -0
  2091. data/vendor/assets/bower_components/jquery/src/ajax.js +806 -0
  2092. data/vendor/assets/bower_components/jquery/src/attributes/attr.js +143 -0
  2093. data/vendor/assets/bower_components/jquery/src/attributes/classes.js +158 -0
  2094. data/vendor/assets/bower_components/jquery/src/attributes/prop.js +96 -0
  2095. data/vendor/assets/bower_components/jquery/src/attributes/support.js +35 -0
  2096. data/vendor/assets/bower_components/jquery/src/attributes/val.js +163 -0
  2097. data/vendor/assets/bower_components/jquery/src/attributes.js +11 -0
  2098. data/vendor/assets/bower_components/jquery/src/callbacks.js +205 -0
  2099. data/vendor/assets/bower_components/jquery/src/core/access.js +60 -0
  2100. data/vendor/assets/bower_components/jquery/src/core/init.js +123 -0
  2101. data/vendor/assets/bower_components/jquery/src/core/parseHTML.js +39 -0
  2102. data/vendor/assets/bower_components/jquery/src/core/ready.js +97 -0
  2103. data/vendor/assets/bower_components/jquery/src/core/var/rsingleTag.js +4 -0
  2104. data/vendor/assets/bower_components/jquery/src/core.js +498 -0
  2105. data/vendor/assets/bower_components/jquery/src/css/addGetHookIf.js +24 -0
  2106. data/vendor/assets/bower_components/jquery/src/css/curCSS.js +57 -0
  2107. data/vendor/assets/bower_components/jquery/src/css/defaultDisplay.js +70 -0
  2108. data/vendor/assets/bower_components/jquery/src/css/hiddenVisibleSelectors.js +15 -0
  2109. data/vendor/assets/bower_components/jquery/src/css/support.js +91 -0
  2110. data/vendor/assets/bower_components/jquery/src/css/swap.js +28 -0
  2111. data/vendor/assets/bower_components/jquery/src/css/var/cssExpand.js +3 -0
  2112. data/vendor/assets/bower_components/jquery/src/css/var/getStyles.js +5 -0
  2113. data/vendor/assets/bower_components/jquery/src/css/var/isHidden.js +13 -0
  2114. data/vendor/assets/bower_components/jquery/src/css/var/rmargin.js +3 -0
  2115. data/vendor/assets/bower_components/jquery/src/css/var/rnumnonpx.js +5 -0
  2116. data/vendor/assets/bower_components/jquery/src/css.js +451 -0
  2117. data/vendor/assets/bower_components/jquery/src/data/Data.js +181 -0
  2118. data/vendor/assets/bower_components/jquery/src/data/accepts.js +20 -0
  2119. data/vendor/assets/bower_components/jquery/src/data/var/data_priv.js +5 -0
  2120. data/vendor/assets/bower_components/jquery/src/data/var/data_user.js +5 -0
  2121. data/vendor/assets/bower_components/jquery/src/data.js +179 -0
  2122. data/vendor/assets/bower_components/jquery/src/deferred.js +149 -0
  2123. data/vendor/assets/bower_components/jquery/src/deprecated.js +13 -0
  2124. data/vendor/assets/bower_components/jquery/src/dimensions.js +50 -0
  2125. data/vendor/assets/bower_components/jquery/src/effects/Tween.js +114 -0
  2126. data/vendor/assets/bower_components/jquery/src/effects/animatedSelector.js +13 -0
  2127. data/vendor/assets/bower_components/jquery/src/effects.js +649 -0
  2128. data/vendor/assets/bower_components/jquery/src/event/alias.js +39 -0
  2129. data/vendor/assets/bower_components/jquery/src/event/support.js +9 -0
  2130. data/vendor/assets/bower_components/jquery/src/event.js +868 -0
  2131. data/vendor/assets/bower_components/jquery/src/exports/amd.js +24 -0
  2132. data/vendor/assets/bower_components/jquery/src/exports/global.js +32 -0
  2133. data/vendor/assets/bower_components/jquery/src/intro.js +44 -0
  2134. data/vendor/assets/bower_components/jquery/src/jquery.js +36 -0
  2135. data/vendor/assets/bower_components/jquery/src/manipulation/_evalUrl.js +18 -0
  2136. data/vendor/assets/bower_components/jquery/src/manipulation/support.js +31 -0
  2137. data/vendor/assets/bower_components/jquery/src/manipulation/var/rcheckableType.js +3 -0
  2138. data/vendor/assets/bower_components/jquery/src/manipulation.js +582 -0
  2139. data/vendor/assets/bower_components/jquery/src/offset.js +204 -0
  2140. data/vendor/assets/bower_components/jquery/src/outro.js +1 -0
  2141. data/vendor/assets/bower_components/jquery/src/queue/delay.js +22 -0
  2142. data/vendor/assets/bower_components/jquery/src/queue.js +142 -0
  2143. data/vendor/assets/bower_components/jquery/src/selector-native.js +172 -0
  2144. data/vendor/assets/bower_components/jquery/src/selector-sizzle.js +14 -0
  2145. data/vendor/assets/bower_components/jquery/src/selector.js +1 -0
  2146. data/vendor/assets/bower_components/jquery/src/serialize.js +111 -0
  2147. data/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.js +2044 -0
  2148. data/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.min.js +3 -0
  2149. data/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.min.map +1 -0
  2150. data/vendor/assets/bower_components/jquery/src/traversing/findFilter.js +100 -0
  2151. data/vendor/assets/bower_components/jquery/src/traversing/var/rneedsContext.js +6 -0
  2152. data/vendor/assets/bower_components/jquery/src/traversing.js +200 -0
  2153. data/vendor/assets/bower_components/jquery/src/var/arr.js +3 -0
  2154. data/vendor/assets/bower_components/jquery/src/var/class2type.js +4 -0
  2155. data/vendor/assets/bower_components/jquery/src/var/concat.js +5 -0
  2156. data/vendor/assets/bower_components/jquery/src/var/hasOwn.js +5 -0
  2157. data/vendor/assets/bower_components/jquery/src/var/indexOf.js +5 -0
  2158. data/vendor/assets/bower_components/jquery/src/var/pnum.js +3 -0
  2159. data/vendor/assets/bower_components/jquery/src/var/push.js +5 -0
  2160. data/vendor/assets/bower_components/jquery/src/var/rnotwhite.js +3 -0
  2161. data/vendor/assets/bower_components/jquery/src/var/slice.js +5 -0
  2162. data/vendor/assets/bower_components/jquery/src/var/strundefined.js +3 -0
  2163. data/vendor/assets/bower_components/jquery/src/var/support.js +4 -0
  2164. data/vendor/assets/bower_components/jquery/src/var/toString.js +5 -0
  2165. data/vendor/assets/bower_components/jquery/src/wrap.js +78 -0
  2166. data/vendor/assets/bower_components/lodash/LICENSE.txt +22 -0
  2167. data/vendor/assets/bower_components/lodash/bower.json +20 -0
  2168. data/vendor/assets/bower_components/lodash/lodash.js +11803 -0
  2169. data/vendor/assets/bower_components/lodash/lodash.min.js +89 -0
  2170. data/vendor/assets/bower_components/ng-alertify/LICENSE +20 -0
  2171. data/vendor/assets/bower_components/ng-alertify/README.md +82 -0
  2172. data/vendor/assets/bower_components/ng-alertify/bower.json +33 -0
  2173. data/vendor/assets/bower_components/ng-alertify/lib/sinon.js +5891 -0
  2174. data/vendor/assets/bower_components/ng-alertify/ng-alertify.js +67 -0
  2175. data/vendor/assets/bower_components/ng-ckeditor/Gruntfile.js +64 -0
  2176. data/vendor/assets/bower_components/ng-ckeditor/LICENSE +9 -0
  2177. data/vendor/assets/bower_components/ng-ckeditor/README.md +27 -0
  2178. data/vendor/assets/bower_components/ng-ckeditor/bower.json +13 -0
  2179. data/vendor/assets/bower_components/ng-ckeditor/examples/1.html +2 -0
  2180. data/vendor/assets/bower_components/ng-ckeditor/examples/checkspelling.php +147 -0
  2181. data/vendor/assets/bower_components/ng-ckeditor/examples/css/bootstrap.css +5359 -0
  2182. data/vendor/assets/bower_components/ng-ckeditor/examples/demo1.html +67 -0
  2183. data/vendor/assets/bower_components/ng-ckeditor/examples/demo2.html +51 -0
  2184. data/vendor/assets/bower_components/ng-ckeditor/examples/inlineall.html +334 -0
  2185. data/vendor/assets/bower_components/ng-ckeditor/examples/js/angular-mocks.js +1788 -0
  2186. data/vendor/assets/bower_components/ng-ckeditor/examples/js/angular-resource.min.js +10 -0
  2187. data/vendor/assets/bower_components/ng-ckeditor/examples/js/jquery-1.9.1.min.js +5 -0
  2188. data/vendor/assets/bower_components/ng-ckeditor/examples/spellcheck/handler.php +200 -0
  2189. data/vendor/assets/bower_components/ng-ckeditor/examples/test.php +28 -0
  2190. data/vendor/assets/bower_components/ng-ckeditor/karma.conf.js +47 -0
  2191. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/CHANGES.md +342 -0
  2192. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/LICENSE.md +1264 -0
  2193. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/README.md +39 -0
  2194. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/adapters/jquery.js +10 -0
  2195. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/build-config.js +86 -0
  2196. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/ckeditor.js +987 -0
  2197. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/config.js +38 -0
  2198. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/contents.css +106 -0
  2199. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/lang/en.js +5 -0
  2200. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/lang/ru.js +5 -0
  2201. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js +10 -0
  2202. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt +25 -0
  2203. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js +9 -0
  2204. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js +9 -0
  2205. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js +10 -0
  2206. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js +10 -0
  2207. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js +9 -0
  2208. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/da.js +9 -0
  2209. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/de.js +10 -0
  2210. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/el.js +10 -0
  2211. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/en.js +9 -0
  2212. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js +10 -0
  2213. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/es.js +10 -0
  2214. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/et.js +9 -0
  2215. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js +9 -0
  2216. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js +10 -0
  2217. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js +10 -0
  2218. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js +11 -0
  2219. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js +10 -0
  2220. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js +9 -0
  2221. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/he.js +9 -0
  2222. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js +9 -0
  2223. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js +9 -0
  2224. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js +10 -0
  2225. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/id.js +9 -0
  2226. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/it.js +10 -0
  2227. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js +8 -0
  2228. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/km.js +9 -0
  2229. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js +9 -0
  2230. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js +10 -0
  2231. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js +9 -0
  2232. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js +11 -0
  2233. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js +9 -0
  2234. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js +9 -0
  2235. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js +9 -0
  2236. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js +10 -0
  2237. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/no.js +9 -0
  2238. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js +10 -0
  2239. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js +9 -0
  2240. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js +10 -0
  2241. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js +9 -0
  2242. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js +9 -0
  2243. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/si.js +8 -0
  2244. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js +10 -0
  2245. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js +10 -0
  2246. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js +9 -0
  2247. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js +9 -0
  2248. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js +9 -0
  2249. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js +10 -0
  2250. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/th.js +9 -0
  2251. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js +10 -0
  2252. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js +9 -0
  2253. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js +10 -0
  2254. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js +9 -0
  2255. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js +7 -0
  2256. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/clipboard/dialogs/paste.js +11 -0
  2257. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/dialog/dialogDefinition.js +4 -0
  2258. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/fakeobjects/images/spacer.gif +0 -0
  2259. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/icons.png +0 -0
  2260. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/icons_hidpi.png +0 -0
  2261. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/image/dialogs/image.js +43 -0
  2262. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/image/images/noimage.png +0 -0
  2263. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/image2/dialogs/image2.js +14 -0
  2264. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/link/dialogs/anchor.js +8 -0
  2265. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/link/dialogs/link.js +37 -0
  2266. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/link/images/anchor.png +0 -0
  2267. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/link/images/hidpi/anchor.png +0 -0
  2268. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/magicline/images/hidpi/icon.png +0 -0
  2269. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/magicline/images/icon.png +0 -0
  2270. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/pastefromword/filter/default.js +31 -0
  2271. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/scayt/LICENSE.md +28 -0
  2272. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/scayt/README.md +25 -0
  2273. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/scayt/dialogs/options.js +20 -0
  2274. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/scayt/dialogs/toolbar.css +71 -0
  2275. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt +20 -0
  2276. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/ar.js +13 -0
  2277. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/bg.js +13 -0
  2278. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/ca.js +14 -0
  2279. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/cs.js +13 -0
  2280. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/cy.js +14 -0
  2281. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/de.js +13 -0
  2282. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/el.js +13 -0
  2283. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/en.js +13 -0
  2284. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/eo.js +12 -0
  2285. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/es.js +13 -0
  2286. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/et.js +13 -0
  2287. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/fa.js +12 -0
  2288. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/fi.js +13 -0
  2289. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js +10 -0
  2290. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/fr.js +11 -0
  2291. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/gl.js +13 -0
  2292. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/he.js +12 -0
  2293. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/hr.js +13 -0
  2294. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/hu.js +12 -0
  2295. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/id.js +13 -0
  2296. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/it.js +14 -0
  2297. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/ja.js +9 -0
  2298. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/km.js +13 -0
  2299. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/ku.js +13 -0
  2300. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/lv.js +13 -0
  2301. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/nb.js +11 -0
  2302. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/nl.js +13 -0
  2303. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/no.js +11 -0
  2304. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/pl.js +12 -0
  2305. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js +11 -0
  2306. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/pt.js +13 -0
  2307. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/ru.js +13 -0
  2308. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/si.js +13 -0
  2309. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/sk.js +13 -0
  2310. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/sl.js +12 -0
  2311. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/sq.js +13 -0
  2312. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/sv.js +11 -0
  2313. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/th.js +13 -0
  2314. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/tr.js +12 -0
  2315. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/ug.js +13 -0
  2316. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/uk.js +12 -0
  2317. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/vi.js +14 -0
  2318. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js +9 -0
  2319. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/specialchar/dialogs/specialchar.js +14 -0
  2320. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/table/dialogs/table.js +21 -0
  2321. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/tabletools/dialogs/tableCell.js +16 -0
  2322. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/templates/dialogs/templates.css +84 -0
  2323. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/templates/dialogs/templates.js +10 -0
  2324. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/templates/templates/default.js +6 -0
  2325. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/templates/templates/images/template1.gif +0 -0
  2326. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/templates/templates/images/template2.gif +0 -0
  2327. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/templates/templates/images/template3.gif +0 -0
  2328. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/widget/images/handle.png +0 -0
  2329. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/wsc/LICENSE.md +28 -0
  2330. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/wsc/README.md +25 -0
  2331. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/wsc/dialogs/ciframe.html +66 -0
  2332. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/wsc/dialogs/tmp.html +118 -0
  2333. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/wsc/dialogs/tmpFrameset.html +52 -0
  2334. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/wsc/dialogs/wsc.css +82 -0
  2335. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/wsc/dialogs/wsc.js +67 -0
  2336. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/plugins/wsc/dialogs/wsc_ie.js +11 -0
  2337. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/ajax.html +82 -0
  2338. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/api.html +207 -0
  2339. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/appendto.html +57 -0
  2340. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/assets/inlineall/logo.png +0 -0
  2341. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/assets/outputxhtml/outputxhtml.css +204 -0
  2342. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/assets/posteddata.php +59 -0
  2343. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/assets/sample.css +3 -0
  2344. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/assets/sample.jpg +0 -0
  2345. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/assets/uilanguages/languages.js +7 -0
  2346. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/datafiltering.html +401 -0
  2347. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/divreplace.html +141 -0
  2348. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/index.html +137 -0
  2349. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/inlineall.html +311 -0
  2350. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/inlinebycode.html +121 -0
  2351. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/inlinetextarea.html +110 -0
  2352. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/jquery.html +97 -0
  2353. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/plugins/dialog/assets/my_dialog.js +48 -0
  2354. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/plugins/dialog/dialog.html +187 -0
  2355. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/plugins/divarea/divarea.html +61 -0
  2356. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/plugins/enterkey/enterkey.html +103 -0
  2357. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla +0 -0
  2358. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf +0 -0
  2359. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js +18 -0
  2360. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/plugins/htmlwriter/outputforflash.html +280 -0
  2361. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/plugins/htmlwriter/outputhtml.html +221 -0
  2362. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/plugins/image2/assets/image1.jpg +0 -0
  2363. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/plugins/image2/assets/image2.jpg +0 -0
  2364. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/plugins/image2/contents.css +19 -0
  2365. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/plugins/image2/image2.html +70 -0
  2366. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/plugins/magicline/magicline.html +206 -0
  2367. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/plugins/stylesheetparser/assets/sample.css +70 -0
  2368. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/plugins/stylesheetparser/stylesheetparser.html +82 -0
  2369. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/plugins/toolbar/toolbar.html +231 -0
  2370. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/plugins/wysiwygarea/fullpage.html +77 -0
  2371. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/readonly.html +73 -0
  2372. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/replacebyclass.html +57 -0
  2373. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/replacebycode.html +56 -0
  2374. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/sample.css +356 -0
  2375. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/sample.js +50 -0
  2376. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/sample_posteddata.php +16 -0
  2377. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/tabindex.html +75 -0
  2378. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/uicolor.html +69 -0
  2379. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/uilanguages.html +119 -0
  2380. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/samples/xhtmlstyle.html +231 -0
  2381. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/dialog.css +5 -0
  2382. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/dialog_ie.css +5 -0
  2383. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/dialog_ie7.css +5 -0
  2384. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/dialog_ie8.css +5 -0
  2385. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/dialog_iequirks.css +5 -0
  2386. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/dialog_opera.css +5 -0
  2387. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/editor.css +5 -0
  2388. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/editor_gecko.css +5 -0
  2389. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/editor_ie.css +5 -0
  2390. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/editor_ie7.css +5 -0
  2391. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/editor_ie8.css +5 -0
  2392. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/editor_iequirks.css +5 -0
  2393. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/icons.png +0 -0
  2394. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/icons_hidpi.png +0 -0
  2395. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/images/arrow.png +0 -0
  2396. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/images/close.png +0 -0
  2397. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/images/hidpi/close.png +0 -0
  2398. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/images/hidpi/lock-open.png +0 -0
  2399. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/images/hidpi/lock.png +0 -0
  2400. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/images/hidpi/refresh.png +0 -0
  2401. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/images/lock-open.png +0 -0
  2402. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/images/lock.png +0 -0
  2403. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/images/refresh.png +0 -0
  2404. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/skins/moono/readme.md +51 -0
  2405. data/vendor/assets/bower_components/ng-ckeditor/libs/ckeditor/styles.js +111 -0
  2406. data/vendor/assets/bower_components/ng-ckeditor/ng-ckeditor.css +1 -0
  2407. data/vendor/assets/bower_components/ng-ckeditor/ng-ckeditor.js +142 -0
  2408. data/vendor/assets/bower_components/ng-ckeditor/ng-ckeditor.min.js +5 -0
  2409. data/vendor/assets/bower_components/ng-ckeditor/ng-ckeditor.min.map +1 -0
  2410. data/vendor/assets/bower_components/ng-ckeditor/package.json +26 -0
  2411. data/vendor/assets/bower_components/ng-ckeditor/src/scripts/01-intro.js +9 -0
  2412. data/vendor/assets/bower_components/ng-ckeditor/src/scripts/02-directive.js +130 -0
  2413. data/vendor/assets/bower_components/ng-ckeditor/src/scripts/03-outro.js +2 -0
  2414. data/vendor/assets/bower_components/ng-ckeditor/src/styles/ng-ckeditor.less +3 -0
  2415. data/vendor/assets/bower_components/ng-ckeditor/test/directiveOnFormSpec.js +134 -0
  2416. data/vendor/assets/bower_components/ng-ckeditor/test/directiveSpec.js +131 -0
  2417. data/vendor/assets/bower_components/ng-flow/bower.json +24 -0
  2418. data/vendor/assets/bower_components/ng-flow/dist/ng-flow-standalone.js +1812 -0
  2419. data/vendor/assets/bower_components/ng-flow/dist/ng-flow-standalone.min.js +2 -0
  2420. data/vendor/assets/bower_components/ng-flow/dist/ng-flow.js +279 -0
  2421. data/vendor/assets/bower_components/ng-flow/dist/ng-flow.min.js +2 -0
  2422. data/vendor/assets/bower_components/ng-flow/src/angular-flow.js +2 -0
  2423. data/vendor/assets/bower_components/ng-flow/src/directives/btn.js +14 -0
  2424. data/vendor/assets/bower_components/ng-flow/src/directives/drag-events.js +56 -0
  2425. data/vendor/assets/bower_components/ng-flow/src/directives/drop.js +26 -0
  2426. data/vendor/assets/bower_components/ng-flow/src/directives/events.js +49 -0
  2427. data/vendor/assets/bower_components/ng-flow/src/directives/img.js +22 -0
  2428. data/vendor/assets/bower_components/ng-flow/src/directives/init.js +37 -0
  2429. data/vendor/assets/bower_components/ng-flow/src/directives/transfers.js +10 -0
  2430. data/vendor/assets/bower_components/ng-flow/src/provider.js +62 -0
  2431. data/vendor/assets/bower_components/ng-sortable/LICENSE +21 -0
  2432. data/vendor/assets/bower_components/ng-sortable/README.md +285 -0
  2433. data/vendor/assets/bower_components/ng-sortable/bower.json +37 -0
  2434. data/vendor/assets/bower_components/ng-sortable/dist/ng-sortable.css +38 -0
  2435. data/vendor/assets/bower_components/ng-sortable/dist/ng-sortable.js +1087 -0
  2436. data/vendor/assets/bower_components/ng-sortable/dist/ng-sortable.min.css +2 -0
  2437. data/vendor/assets/bower_components/ng-sortable/dist/ng-sortable.min.js +1 -0
  2438. data/vendor/assets/bower_components/ng-sortable/dist/ng-sortable.style.css +30 -0
  2439. data/vendor/assets/bower_components/ng-sortable/dist/ng-sortable.style.min.css +2 -0
  2440. data/vendor/assets/bower_components/restangular/CHANGELOG.md +18 -0
  2441. data/vendor/assets/bower_components/restangular/CONTRIBUTE.md +31 -0
  2442. data/vendor/assets/bower_components/restangular/Gruntfile.js +149 -0
  2443. data/vendor/assets/bower_components/restangular/README.md +1336 -0
  2444. data/vendor/assets/bower_components/restangular/bower.json +19 -0
  2445. data/vendor/assets/bower_components/restangular/dist/restangular.js +1355 -0
  2446. data/vendor/assets/bower_components/restangular/dist/restangular.min.js +6 -0
  2447. data/vendor/assets/bower_components/restangular/dist/restangular.zip +0 -0
  2448. data/vendor/assets/bower_components/restangular/karma.conf.js +74 -0
  2449. data/vendor/assets/bower_components/restangular/karma.underscore.conf.js +74 -0
  2450. data/vendor/assets/bower_components/restangular/license.md +21 -0
  2451. data/vendor/assets/bower_components/restangular/package.json +55 -0
  2452. data/vendor/assets/bower_components/restangular/src/restangular.js +1350 -0
  2453. data/vendor/assets/bower_components/restangular/test/restangularSpec.js +1136 -0
  2454. metadata +2453 -2
@@ -0,0 +1,4829 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
4
+ /**
5
+ * Supported keybindings:
6
+ *
7
+ * Motion:
8
+ * h, j, k, l
9
+ * gj, gk
10
+ * e, E, w, W, b, B, ge, gE
11
+ * f<character>, F<character>, t<character>, T<character>
12
+ * $, ^, 0, -, +, _
13
+ * gg, G
14
+ * %
15
+ * '<character>, `<character>
16
+ *
17
+ * Operator:
18
+ * d, y, c
19
+ * dd, yy, cc
20
+ * g~, g~g~
21
+ * >, <, >>, <<
22
+ *
23
+ * Operator-Motion:
24
+ * x, X, D, Y, C, ~
25
+ *
26
+ * Action:
27
+ * a, i, s, A, I, S, o, O
28
+ * zz, z., z<CR>, zt, zb, z-
29
+ * J
30
+ * u, Ctrl-r
31
+ * m<character>
32
+ * r<character>
33
+ *
34
+ * Modes:
35
+ * ESC - leave insert mode, visual mode, and clear input state.
36
+ * Ctrl-[, Ctrl-c - same as ESC.
37
+ *
38
+ * Registers: unnamed, -, a-z, A-Z, 0-9
39
+ * (Does not respect the special case for number registers when delete
40
+ * operator is made with these commands: %, (, ), , /, ?, n, N, {, } )
41
+ * TODO: Implement the remaining registers.
42
+ * Marks: a-z, A-Z, and 0-9
43
+ * TODO: Implement the remaining special marks. They have more complex
44
+ * behavior.
45
+ *
46
+ * Events:
47
+ * 'vim-mode-change' - raised on the editor anytime the current mode changes,
48
+ * Event object: {mode: "visual", subMode: "linewise"}
49
+ *
50
+ * Code structure:
51
+ * 1. Default keymap
52
+ * 2. Variable declarations and short basic helpers
53
+ * 3. Instance (External API) implementation
54
+ * 4. Internal state tracking objects (input state, counter) implementation
55
+ * and instanstiation
56
+ * 5. Key handler (the main command dispatcher) implementation
57
+ * 6. Motion, operator, and action implementations
58
+ * 7. Helper functions for the key handler, motions, operators, and actions
59
+ * 8. Set up Vim to work as a keymap for CodeMirror.
60
+ */
61
+
62
+ (function(mod) {
63
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
64
+ mod(require("../lib/codemirror"), require("../addon/search/searchcursor"), require("../addon/dialog/dialog"), require("../addon/edit/matchbrackets.js"));
65
+ else if (typeof define == "function" && define.amd) // AMD
66
+ define(["../lib/codemirror", "../addon/search/searchcursor", "../addon/dialog/dialog", "../addon/edit/matchbrackets"], mod);
67
+ else // Plain browser env
68
+ mod(CodeMirror);
69
+ })(function(CodeMirror) {
70
+ 'use strict';
71
+
72
+ var defaultKeymap = [
73
+ // Key to key mapping. This goes first to make it possible to override
74
+ // existing mappings.
75
+ { keys: '<Left>', type: 'keyToKey', toKeys: 'h' },
76
+ { keys: '<Right>', type: 'keyToKey', toKeys: 'l' },
77
+ { keys: '<Up>', type: 'keyToKey', toKeys: 'k' },
78
+ { keys: '<Down>', type: 'keyToKey', toKeys: 'j' },
79
+ { keys: '<Space>', type: 'keyToKey', toKeys: 'l' },
80
+ { keys: '<BS>', type: 'keyToKey', toKeys: 'h' },
81
+ { keys: '<C-Space>', type: 'keyToKey', toKeys: 'W' },
82
+ { keys: '<C-BS>', type: 'keyToKey', toKeys: 'B' },
83
+ { keys: '<S-Space>', type: 'keyToKey', toKeys: 'w' },
84
+ { keys: '<S-BS>', type: 'keyToKey', toKeys: 'b' },
85
+ { keys: '<C-n>', type: 'keyToKey', toKeys: 'j' },
86
+ { keys: '<C-p>', type: 'keyToKey', toKeys: 'k' },
87
+ { keys: '<C-[>', type: 'keyToKey', toKeys: '<Esc>' },
88
+ { keys: '<C-c>', type: 'keyToKey', toKeys: '<Esc>' },
89
+ { keys: '<C-[>', type: 'keyToKey', toKeys: '<Esc>', context: 'insert' },
90
+ { keys: '<C-c>', type: 'keyToKey', toKeys: '<Esc>', context: 'insert' },
91
+ { keys: 's', type: 'keyToKey', toKeys: 'cl', context: 'normal' },
92
+ { keys: 's', type: 'keyToKey', toKeys: 'xi', context: 'visual'},
93
+ { keys: 'S', type: 'keyToKey', toKeys: 'cc', context: 'normal' },
94
+ { keys: 'S', type: 'keyToKey', toKeys: 'dcc', context: 'visual' },
95
+ { keys: '<Home>', type: 'keyToKey', toKeys: '0' },
96
+ { keys: '<End>', type: 'keyToKey', toKeys: '$' },
97
+ { keys: '<PageUp>', type: 'keyToKey', toKeys: '<C-b>' },
98
+ { keys: '<PageDown>', type: 'keyToKey', toKeys: '<C-f>' },
99
+ { keys: '<CR>', type: 'keyToKey', toKeys: 'j^', context: 'normal' },
100
+ // Motions
101
+ { keys: 'H', type: 'motion', motion: 'moveToTopLine', motionArgs: { linewise: true, toJumplist: true }},
102
+ { keys: 'M', type: 'motion', motion: 'moveToMiddleLine', motionArgs: { linewise: true, toJumplist: true }},
103
+ { keys: 'L', type: 'motion', motion: 'moveToBottomLine', motionArgs: { linewise: true, toJumplist: true }},
104
+ { keys: 'h', type: 'motion', motion: 'moveByCharacters', motionArgs: { forward: false }},
105
+ { keys: 'l', type: 'motion', motion: 'moveByCharacters', motionArgs: { forward: true }},
106
+ { keys: 'j', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, linewise: true }},
107
+ { keys: 'k', type: 'motion', motion: 'moveByLines', motionArgs: { forward: false, linewise: true }},
108
+ { keys: 'gj', type: 'motion', motion: 'moveByDisplayLines', motionArgs: { forward: true }},
109
+ { keys: 'gk', type: 'motion', motion: 'moveByDisplayLines', motionArgs: { forward: false }},
110
+ { keys: 'w', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: false }},
111
+ { keys: 'W', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: false, bigWord: true }},
112
+ { keys: 'e', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: true, inclusive: true }},
113
+ { keys: 'E', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: true, bigWord: true, inclusive: true }},
114
+ { keys: 'b', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false }},
115
+ { keys: 'B', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false, bigWord: true }},
116
+ { keys: 'ge', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: true, inclusive: true }},
117
+ { keys: 'gE', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: true, bigWord: true, inclusive: true }},
118
+ { keys: '{', type: 'motion', motion: 'moveByParagraph', motionArgs: { forward: false, toJumplist: true }},
119
+ { keys: '}', type: 'motion', motion: 'moveByParagraph', motionArgs: { forward: true, toJumplist: true }},
120
+ { keys: '<C-f>', type: 'motion', motion: 'moveByPage', motionArgs: { forward: true }},
121
+ { keys: '<C-b>', type: 'motion', motion: 'moveByPage', motionArgs: { forward: false }},
122
+ { keys: '<C-d>', type: 'motion', motion: 'moveByScroll', motionArgs: { forward: true, explicitRepeat: true }},
123
+ { keys: '<C-u>', type: 'motion', motion: 'moveByScroll', motionArgs: { forward: false, explicitRepeat: true }},
124
+ { keys: 'gg', type: 'motion', motion: 'moveToLineOrEdgeOfDocument', motionArgs: { forward: false, explicitRepeat: true, linewise: true, toJumplist: true }},
125
+ { keys: 'G', type: 'motion', motion: 'moveToLineOrEdgeOfDocument', motionArgs: { forward: true, explicitRepeat: true, linewise: true, toJumplist: true }},
126
+ { keys: '0', type: 'motion', motion: 'moveToStartOfLine' },
127
+ { keys: '^', type: 'motion', motion: 'moveToFirstNonWhiteSpaceCharacter' },
128
+ { keys: '+', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, toFirstChar:true }},
129
+ { keys: '-', type: 'motion', motion: 'moveByLines', motionArgs: { forward: false, toFirstChar:true }},
130
+ { keys: '_', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, toFirstChar:true, repeatOffset:-1 }},
131
+ { keys: '$', type: 'motion', motion: 'moveToEol', motionArgs: { inclusive: true }},
132
+ { keys: '%', type: 'motion', motion: 'moveToMatchedSymbol', motionArgs: { inclusive: true, toJumplist: true }},
133
+ { keys: 'f<character>', type: 'motion', motion: 'moveToCharacter', motionArgs: { forward: true , inclusive: true }},
134
+ { keys: 'F<character>', type: 'motion', motion: 'moveToCharacter', motionArgs: { forward: false }},
135
+ { keys: 't<character>', type: 'motion', motion: 'moveTillCharacter', motionArgs: { forward: true, inclusive: true }},
136
+ { keys: 'T<character>', type: 'motion', motion: 'moveTillCharacter', motionArgs: { forward: false }},
137
+ { keys: ';', type: 'motion', motion: 'repeatLastCharacterSearch', motionArgs: { forward: true }},
138
+ { keys: ',', type: 'motion', motion: 'repeatLastCharacterSearch', motionArgs: { forward: false }},
139
+ { keys: '\'<character>', type: 'motion', motion: 'goToMark', motionArgs: {toJumplist: true, linewise: true}},
140
+ { keys: '`<character>', type: 'motion', motion: 'goToMark', motionArgs: {toJumplist: true}},
141
+ { keys: ']`', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: true } },
142
+ { keys: '[`', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: false } },
143
+ { keys: ']\'', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: true, linewise: true } },
144
+ { keys: '[\'', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: false, linewise: true } },
145
+ // the next two aren't motions but must come before more general motion declarations
146
+ { keys: ']p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: true, isEdit: true, matchIndent: true}},
147
+ { keys: '[p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: false, isEdit: true, matchIndent: true}},
148
+ { keys: ']<character>', type: 'motion', motion: 'moveToSymbol', motionArgs: { forward: true, toJumplist: true}},
149
+ { keys: '[<character>', type: 'motion', motion: 'moveToSymbol', motionArgs: { forward: false, toJumplist: true}},
150
+ { keys: '|', type: 'motion', motion: 'moveToColumn'},
151
+ { keys: 'o', type: 'motion', motion: 'moveToOtherHighlightedEnd', context:'visual'},
152
+ { keys: 'O', type: 'motion', motion: 'moveToOtherHighlightedEnd', motionArgs: {sameLine: true}, context:'visual'},
153
+ // Operators
154
+ { keys: 'd', type: 'operator', operator: 'delete' },
155
+ { keys: 'y', type: 'operator', operator: 'yank' },
156
+ { keys: 'c', type: 'operator', operator: 'change' },
157
+ { keys: '>', type: 'operator', operator: 'indent', operatorArgs: { indentRight: true }},
158
+ { keys: '<', type: 'operator', operator: 'indent', operatorArgs: { indentRight: false }},
159
+ { keys: 'g~', type: 'operator', operator: 'changeCase' },
160
+ { keys: 'gu', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: true}, isEdit: true },
161
+ { keys: 'gU', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: false}, isEdit: true },
162
+ { keys: 'n', type: 'motion', motion: 'findNext', motionArgs: { forward: true, toJumplist: true }},
163
+ { keys: 'N', type: 'motion', motion: 'findNext', motionArgs: { forward: false, toJumplist: true }},
164
+ // Operator-Motion dual commands
165
+ { keys: 'x', type: 'operatorMotion', operator: 'delete', motion: 'moveByCharacters', motionArgs: { forward: true }, operatorMotionArgs: { visualLine: false }},
166
+ { keys: 'X', type: 'operatorMotion', operator: 'delete', motion: 'moveByCharacters', motionArgs: { forward: false }, operatorMotionArgs: { visualLine: true }},
167
+ { keys: 'D', type: 'operatorMotion', operator: 'delete', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal'},
168
+ { keys: 'D', type: 'operator', operator: 'delete', operatorArgs: { linewise: true }, context: 'visual'},
169
+ { keys: 'Y', type: 'operatorMotion', operator: 'yank', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal'},
170
+ { keys: 'Y', type: 'operator', operator: 'yank', operatorArgs: { linewise: true }, context: 'visual'},
171
+ { keys: 'C', type: 'operatorMotion', operator: 'change', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal'},
172
+ { keys: 'C', type: 'operator', operator: 'change', operatorArgs: { linewise: true }, context: 'visual'},
173
+ { keys: '~', type: 'operatorMotion', operator: 'changeCase', motion: 'moveByCharacters', motionArgs: { forward: true }, operatorArgs: { shouldMoveCursor: true }, context: 'normal'},
174
+ { keys: '~', type: 'operator', operator: 'changeCase', context: 'visual'},
175
+ { keys: '<C-w>', type: 'operatorMotion', operator: 'delete', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false }, context: 'insert' },
176
+ // Actions
177
+ { keys: '<C-i>', type: 'action', action: 'jumpListWalk', actionArgs: { forward: true }},
178
+ { keys: '<C-o>', type: 'action', action: 'jumpListWalk', actionArgs: { forward: false }},
179
+ { keys: '<C-e>', type: 'action', action: 'scroll', actionArgs: { forward: true, linewise: true }},
180
+ { keys: '<C-y>', type: 'action', action: 'scroll', actionArgs: { forward: false, linewise: true }},
181
+ { keys: 'a', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'charAfter' }, context: 'normal' },
182
+ { keys: 'A', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'eol' }, context: 'normal' },
183
+ { keys: 'A', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'endOfSelectedArea' }, context: 'visual' },
184
+ { keys: 'i', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'inplace' }, context: 'normal' },
185
+ { keys: 'I', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'firstNonBlank'}, context: 'normal' },
186
+ { keys: 'I', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'startOfSelectedArea' }, context: 'visual' },
187
+ { keys: 'o', type: 'action', action: 'newLineAndEnterInsertMode', isEdit: true, interlaceInsertRepeat: true, actionArgs: { after: true }, context: 'normal' },
188
+ { keys: 'O', type: 'action', action: 'newLineAndEnterInsertMode', isEdit: true, interlaceInsertRepeat: true, actionArgs: { after: false }, context: 'normal' },
189
+ { keys: 'v', type: 'action', action: 'toggleVisualMode' },
190
+ { keys: 'V', type: 'action', action: 'toggleVisualMode', actionArgs: { linewise: true }},
191
+ { keys: '<C-v>', type: 'action', action: 'toggleVisualMode', actionArgs: { blockwise: true }},
192
+ { keys: 'gv', type: 'action', action: 'reselectLastSelection' },
193
+ { keys: 'J', type: 'action', action: 'joinLines', isEdit: true },
194
+ { keys: 'p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: true, isEdit: true }},
195
+ { keys: 'P', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: false, isEdit: true }},
196
+ { keys: 'r<character>', type: 'action', action: 'replace', isEdit: true },
197
+ { keys: '@<character>', type: 'action', action: 'replayMacro' },
198
+ { keys: 'q<character>', type: 'action', action: 'enterMacroRecordMode' },
199
+ // Handle Replace-mode as a special case of insert mode.
200
+ { keys: 'R', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { replace: true }},
201
+ { keys: 'u', type: 'action', action: 'undo', context: 'normal' },
202
+ { keys: 'u', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: true}, context: 'visual', isEdit: true },
203
+ { keys: 'U', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: false}, context: 'visual', isEdit: true },
204
+ { keys: '<C-r>', type: 'action', action: 'redo' },
205
+ { keys: 'm<character>', type: 'action', action: 'setMark' },
206
+ { keys: '"<character>', type: 'action', action: 'setRegister' },
207
+ { keys: 'zz', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'center' }},
208
+ { keys: 'z.', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'center' }, motion: 'moveToFirstNonWhiteSpaceCharacter' },
209
+ { keys: 'zt', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'top' }},
210
+ { keys: 'z<CR>', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'top' }, motion: 'moveToFirstNonWhiteSpaceCharacter' },
211
+ { keys: 'z-', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'bottom' }},
212
+ { keys: 'zb', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'bottom' }, motion: 'moveToFirstNonWhiteSpaceCharacter' },
213
+ { keys: '.', type: 'action', action: 'repeatLastEdit' },
214
+ { keys: '<C-a>', type: 'action', action: 'incrementNumberToken', isEdit: true, actionArgs: {increase: true, backtrack: false}},
215
+ { keys: '<C-x>', type: 'action', action: 'incrementNumberToken', isEdit: true, actionArgs: {increase: false, backtrack: false}},
216
+ // Text object motions
217
+ { keys: 'a<character>', type: 'motion', motion: 'textObjectManipulation' },
218
+ { keys: 'i<character>', type: 'motion', motion: 'textObjectManipulation', motionArgs: { textObjectInner: true }},
219
+ // Search
220
+ { keys: '/', type: 'search', searchArgs: { forward: true, querySrc: 'prompt', toJumplist: true }},
221
+ { keys: '?', type: 'search', searchArgs: { forward: false, querySrc: 'prompt', toJumplist: true }},
222
+ { keys: '*', type: 'search', searchArgs: { forward: true, querySrc: 'wordUnderCursor', wholeWordOnly: true, toJumplist: true }},
223
+ { keys: '#', type: 'search', searchArgs: { forward: false, querySrc: 'wordUnderCursor', wholeWordOnly: true, toJumplist: true }},
224
+ { keys: 'g*', type: 'search', searchArgs: { forward: true, querySrc: 'wordUnderCursor', toJumplist: true }},
225
+ { keys: 'g#', type: 'search', searchArgs: { forward: false, querySrc: 'wordUnderCursor', toJumplist: true }},
226
+ // Ex command
227
+ { keys: ':', type: 'ex' }
228
+ ];
229
+
230
+ var Pos = CodeMirror.Pos;
231
+
232
+ var modifierCodes = [16, 17, 18, 91];
233
+ var specialKey = {Enter:'CR',Backspace:'BS',Delete:'Del'};
234
+ var mac = /Mac/.test(navigator.platform);
235
+ var Vim = function() {
236
+ function lookupKey(e) {
237
+ var keyCode = e.keyCode;
238
+ if (modifierCodes.indexOf(keyCode) != -1) { return; }
239
+ var hasModifier = e.ctrlKey || e.metaKey;
240
+ var key = CodeMirror.keyNames[keyCode];
241
+ key = specialKey[key] || key;
242
+ var name = '';
243
+ if (e.ctrlKey) { name += 'C-'; }
244
+ if (e.altKey) { name += 'A-'; }
245
+ if (mac && e.metaKey || (!hasModifier && e.shiftKey) && key.length < 2) {
246
+ // Shift key bindings can only specified for special characters.
247
+ return;
248
+ } else if (e.shiftKey && !/^[A-Za-z]$/.test(key)) {
249
+ name += 'S-';
250
+ }
251
+ if (key.length == 1) { key = key.toLowerCase(); }
252
+ name += key;
253
+ if (name.length > 1) { name = '<' + name + '>'; }
254
+ return name;
255
+ }
256
+ // Keys with modifiers are handled using keydown due to limitations of
257
+ // keypress event.
258
+ function handleKeyDown(cm, e) {
259
+ var name = lookupKey(e);
260
+ if (!name) { return; }
261
+
262
+ CodeMirror.signal(cm, 'vim-keypress', name);
263
+ if (CodeMirror.Vim.handleKey(cm, name, 'user')) {
264
+ CodeMirror.e_stop(e);
265
+ }
266
+ }
267
+ // Keys without modifiers are handled using keypress to work best with
268
+ // non-standard keyboard layouts.
269
+ function handleKeyPress(cm, e) {
270
+ var code = e.charCode || e.keyCode;
271
+ if (e.ctrlKey || e.metaKey || e.altKey ||
272
+ e.shiftKey && code < 32) { return; }
273
+ var name = String.fromCharCode(code);
274
+
275
+ CodeMirror.signal(cm, 'vim-keypress', name);
276
+ if (CodeMirror.Vim.handleKey(cm, name, 'user')) {
277
+ CodeMirror.e_stop(e);
278
+ }
279
+ }
280
+
281
+ function enterVimMode(cm) {
282
+ cm.setOption('disableInput', true);
283
+ cm.setOption('showCursorWhenSelecting', false);
284
+ CodeMirror.signal(cm, "vim-mode-change", {mode: "normal"});
285
+ cm.on('cursorActivity', onCursorActivity);
286
+ maybeInitVimState(cm);
287
+ CodeMirror.on(cm.getInputField(), 'paste', getOnPasteFn(cm));
288
+ cm.on('keypress', handleKeyPress);
289
+ cm.on('keydown', handleKeyDown);
290
+ }
291
+
292
+ function leaveVimMode(cm) {
293
+ cm.setOption('disableInput', false);
294
+ cm.off('cursorActivity', onCursorActivity);
295
+ CodeMirror.off(cm.getInputField(), 'paste', getOnPasteFn(cm));
296
+ cm.state.vim = null;
297
+ cm.off('keypress', handleKeyPress);
298
+ cm.off('keydown', handleKeyDown);
299
+ }
300
+
301
+ function detachVimMap(cm, next) {
302
+ if (this == CodeMirror.keyMap.vim)
303
+ CodeMirror.rmClass(cm.getWrapperElement(), "cm-fat-cursor");
304
+
305
+ if (!next || next.attach != attachVimMap)
306
+ leaveVimMode(cm, false);
307
+ }
308
+ function attachVimMap(cm, prev) {
309
+ if (this == CodeMirror.keyMap.vim)
310
+ CodeMirror.addClass(cm.getWrapperElement(), "cm-fat-cursor");
311
+
312
+ if (!prev || prev.attach != attachVimMap)
313
+ enterVimMode(cm);
314
+ }
315
+
316
+ // Deprecated, simply setting the keymap works again.
317
+ CodeMirror.defineOption('vimMode', false, function(cm, val, prev) {
318
+ if (val && cm.getOption("keyMap") != "vim")
319
+ cm.setOption("keyMap", "vim");
320
+ else if (!val && prev != CodeMirror.Init && /^vim/.test(cm.getOption("keyMap")))
321
+ cm.setOption("keyMap", "default");
322
+ });
323
+ function getOnPasteFn(cm) {
324
+ var vim = cm.state.vim;
325
+ if (!vim.onPasteFn) {
326
+ vim.onPasteFn = function() {
327
+ if (!vim.insertMode) {
328
+ cm.setCursor(offsetCursor(cm.getCursor(), 0, 1));
329
+ actions.enterInsertMode(cm, {}, vim);
330
+ }
331
+ };
332
+ }
333
+ return vim.onPasteFn;
334
+ }
335
+
336
+ var numberRegex = /[\d]/;
337
+ var wordRegexp = [(/\w/), (/[^\w\s]/)], bigWordRegexp = [(/\S/)];
338
+ function makeKeyRange(start, size) {
339
+ var keys = [];
340
+ for (var i = start; i < start + size; i++) {
341
+ keys.push(String.fromCharCode(i));
342
+ }
343
+ return keys;
344
+ }
345
+ var upperCaseAlphabet = makeKeyRange(65, 26);
346
+ var lowerCaseAlphabet = makeKeyRange(97, 26);
347
+ var numbers = makeKeyRange(48, 10);
348
+ var validMarks = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['<', '>']);
349
+ var validRegisters = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['-', '"', '.', ':', '/']);
350
+
351
+ function isLine(cm, line) {
352
+ return line >= cm.firstLine() && line <= cm.lastLine();
353
+ }
354
+ function isLowerCase(k) {
355
+ return (/^[a-z]$/).test(k);
356
+ }
357
+ function isMatchableSymbol(k) {
358
+ return '()[]{}'.indexOf(k) != -1;
359
+ }
360
+ function isNumber(k) {
361
+ return numberRegex.test(k);
362
+ }
363
+ function isUpperCase(k) {
364
+ return (/^[A-Z]$/).test(k);
365
+ }
366
+ function isWhiteSpaceString(k) {
367
+ return (/^\s*$/).test(k);
368
+ }
369
+ function inArray(val, arr) {
370
+ for (var i = 0; i < arr.length; i++) {
371
+ if (arr[i] == val) {
372
+ return true;
373
+ }
374
+ }
375
+ return false;
376
+ }
377
+
378
+ var options = {};
379
+ function defineOption(name, defaultValue, type) {
380
+ if (defaultValue === undefined) { throw Error('defaultValue is required'); }
381
+ if (!type) { type = 'string'; }
382
+ options[name] = {
383
+ type: type,
384
+ defaultValue: defaultValue
385
+ };
386
+ setOption(name, defaultValue);
387
+ }
388
+
389
+ function setOption(name, value) {
390
+ var option = options[name];
391
+ if (!option) {
392
+ throw Error('Unknown option: ' + name);
393
+ }
394
+ if (option.type == 'boolean') {
395
+ if (value && value !== true) {
396
+ throw Error('Invalid argument: ' + name + '=' + value);
397
+ } else if (value !== false) {
398
+ // Boolean options are set to true if value is not defined.
399
+ value = true;
400
+ }
401
+ }
402
+ option.value = option.type == 'boolean' ? !!value : value;
403
+ }
404
+
405
+ function getOption(name) {
406
+ var option = options[name];
407
+ if (!option) {
408
+ throw Error('Unknown option: ' + name);
409
+ }
410
+ return option.value;
411
+ }
412
+
413
+ var createCircularJumpList = function() {
414
+ var size = 100;
415
+ var pointer = -1;
416
+ var head = 0;
417
+ var tail = 0;
418
+ var buffer = new Array(size);
419
+ function add(cm, oldCur, newCur) {
420
+ var current = pointer % size;
421
+ var curMark = buffer[current];
422
+ function useNextSlot(cursor) {
423
+ var next = ++pointer % size;
424
+ var trashMark = buffer[next];
425
+ if (trashMark) {
426
+ trashMark.clear();
427
+ }
428
+ buffer[next] = cm.setBookmark(cursor);
429
+ }
430
+ if (curMark) {
431
+ var markPos = curMark.find();
432
+ // avoid recording redundant cursor position
433
+ if (markPos && !cursorEqual(markPos, oldCur)) {
434
+ useNextSlot(oldCur);
435
+ }
436
+ } else {
437
+ useNextSlot(oldCur);
438
+ }
439
+ useNextSlot(newCur);
440
+ head = pointer;
441
+ tail = pointer - size + 1;
442
+ if (tail < 0) {
443
+ tail = 0;
444
+ }
445
+ }
446
+ function move(cm, offset) {
447
+ pointer += offset;
448
+ if (pointer > head) {
449
+ pointer = head;
450
+ } else if (pointer < tail) {
451
+ pointer = tail;
452
+ }
453
+ var mark = buffer[(size + pointer) % size];
454
+ // skip marks that are temporarily removed from text buffer
455
+ if (mark && !mark.find()) {
456
+ var inc = offset > 0 ? 1 : -1;
457
+ var newCur;
458
+ var oldCur = cm.getCursor();
459
+ do {
460
+ pointer += inc;
461
+ mark = buffer[(size + pointer) % size];
462
+ // skip marks that are the same as current position
463
+ if (mark &&
464
+ (newCur = mark.find()) &&
465
+ !cursorEqual(oldCur, newCur)) {
466
+ break;
467
+ }
468
+ } while (pointer < head && pointer > tail);
469
+ }
470
+ return mark;
471
+ }
472
+ return {
473
+ cachedCursor: undefined, //used for # and * jumps
474
+ add: add,
475
+ move: move
476
+ };
477
+ };
478
+
479
+ // Returns an object to track the changes associated insert mode. It
480
+ // clones the object that is passed in, or creates an empty object one if
481
+ // none is provided.
482
+ var createInsertModeChanges = function(c) {
483
+ if (c) {
484
+ // Copy construction
485
+ return {
486
+ changes: c.changes,
487
+ expectCursorActivityForChange: c.expectCursorActivityForChange
488
+ };
489
+ }
490
+ return {
491
+ // Change list
492
+ changes: [],
493
+ // Set to true on change, false on cursorActivity.
494
+ expectCursorActivityForChange: false
495
+ };
496
+ };
497
+
498
+ function MacroModeState() {
499
+ this.latestRegister = undefined;
500
+ this.isPlaying = false;
501
+ this.isRecording = false;
502
+ this.replaySearchQueries = [];
503
+ this.onRecordingDone = undefined;
504
+ this.lastInsertModeChanges = createInsertModeChanges();
505
+ }
506
+ MacroModeState.prototype = {
507
+ exitMacroRecordMode: function() {
508
+ var macroModeState = vimGlobalState.macroModeState;
509
+ if (macroModeState.onRecordingDone) {
510
+ macroModeState.onRecordingDone(); // close dialog
511
+ }
512
+ macroModeState.onRecordingDone = undefined;
513
+ macroModeState.isRecording = false;
514
+ },
515
+ enterMacroRecordMode: function(cm, registerName) {
516
+ var register =
517
+ vimGlobalState.registerController.getRegister(registerName);
518
+ if (register) {
519
+ register.clear();
520
+ this.latestRegister = registerName;
521
+ if (cm.openDialog) {
522
+ this.onRecordingDone = cm.openDialog(
523
+ '(recording)['+registerName+']', null, {bottom:true});
524
+ }
525
+ this.isRecording = true;
526
+ }
527
+ }
528
+ };
529
+
530
+ function maybeInitVimState(cm) {
531
+ if (!cm.state.vim) {
532
+ // Store instance state in the CodeMirror object.
533
+ cm.state.vim = {
534
+ inputState: new InputState(),
535
+ // Vim's input state that triggered the last edit, used to repeat
536
+ // motions and operators with '.'.
537
+ lastEditInputState: undefined,
538
+ // Vim's action command before the last edit, used to repeat actions
539
+ // with '.' and insert mode repeat.
540
+ lastEditActionCommand: undefined,
541
+ // When using jk for navigation, if you move from a longer line to a
542
+ // shorter line, the cursor may clip to the end of the shorter line.
543
+ // If j is pressed again and cursor goes to the next line, the
544
+ // cursor should go back to its horizontal position on the longer
545
+ // line if it can. This is to keep track of the horizontal position.
546
+ lastHPos: -1,
547
+ // Doing the same with screen-position for gj/gk
548
+ lastHSPos: -1,
549
+ // The last motion command run. Cleared if a non-motion command gets
550
+ // executed in between.
551
+ lastMotion: null,
552
+ marks: {},
553
+ // Mark for rendering fake cursor for visual mode.
554
+ fakeCursor: null,
555
+ insertMode: false,
556
+ // Repeat count for changes made in insert mode, triggered by key
557
+ // sequences like 3,i. Only exists when insertMode is true.
558
+ insertModeRepeat: undefined,
559
+ visualMode: false,
560
+ // If we are in visual line mode. No effect if visualMode is false.
561
+ visualLine: false,
562
+ visualBlock: false,
563
+ lastSelection: null,
564
+ lastPastedText: null,
565
+ sel: {
566
+ }
567
+ };
568
+ }
569
+ return cm.state.vim;
570
+ }
571
+ var vimGlobalState;
572
+ function resetVimGlobalState() {
573
+ vimGlobalState = {
574
+ // The current search query.
575
+ searchQuery: null,
576
+ // Whether we are searching backwards.
577
+ searchIsReversed: false,
578
+ // Replace part of the last substituted pattern
579
+ lastSubstituteReplacePart: undefined,
580
+ jumpList: createCircularJumpList(),
581
+ macroModeState: new MacroModeState,
582
+ // Recording latest f, t, F or T motion command.
583
+ lastChararacterSearch: {increment:0, forward:true, selectedCharacter:''},
584
+ registerController: new RegisterController({}),
585
+ // search history buffer
586
+ searchHistoryController: new HistoryController({}),
587
+ // ex Command history buffer
588
+ exCommandHistoryController : new HistoryController({})
589
+ };
590
+ for (var optionName in options) {
591
+ var option = options[optionName];
592
+ option.value = option.defaultValue;
593
+ }
594
+ }
595
+
596
+ var lastInsertModeKeyTimer;
597
+ var vimApi= {
598
+ buildKeyMap: function() {
599
+ // TODO: Convert keymap into dictionary format for fast lookup.
600
+ },
601
+ // Testing hook, though it might be useful to expose the register
602
+ // controller anyways.
603
+ getRegisterController: function() {
604
+ return vimGlobalState.registerController;
605
+ },
606
+ // Testing hook.
607
+ resetVimGlobalState_: resetVimGlobalState,
608
+
609
+ // Testing hook.
610
+ getVimGlobalState_: function() {
611
+ return vimGlobalState;
612
+ },
613
+
614
+ // Testing hook.
615
+ maybeInitVimState_: maybeInitVimState,
616
+
617
+ InsertModeKey: InsertModeKey,
618
+ map: function(lhs, rhs, ctx) {
619
+ // Add user defined key bindings.
620
+ exCommandDispatcher.map(lhs, rhs, ctx);
621
+ },
622
+ setOption: setOption,
623
+ getOption: getOption,
624
+ defineOption: defineOption,
625
+ defineEx: function(name, prefix, func){
626
+ if (name.indexOf(prefix) !== 0) {
627
+ throw new Error('(Vim.defineEx) "'+prefix+'" is not a prefix of "'+name+'", command not registered');
628
+ }
629
+ exCommands[name]=func;
630
+ exCommandDispatcher.commandMap_[prefix]={name:name, shortName:prefix, type:'api'};
631
+ },
632
+ // This is the outermost function called by CodeMirror, after keys have
633
+ // been mapped to their Vim equivalents.
634
+ handleKey: function(cm, key, origin) {
635
+ var vim = maybeInitVimState(cm);
636
+ function handleMacroRecording() {
637
+ var macroModeState = vimGlobalState.macroModeState;
638
+ if (macroModeState.isRecording) {
639
+ if (key == 'q') {
640
+ macroModeState.exitMacroRecordMode();
641
+ clearInputState(cm);
642
+ return true;
643
+ }
644
+ if (origin != 'mapping') {
645
+ logKey(macroModeState, key);
646
+ }
647
+ }
648
+ }
649
+ function handleEsc() {
650
+ if (key == '<Esc>') {
651
+ // Clear input state and get back to normal mode.
652
+ clearInputState(cm);
653
+ if (vim.visualMode) {
654
+ exitVisualMode(cm);
655
+ } else if (vim.insertMode) {
656
+ exitInsertMode(cm);
657
+ }
658
+ return true;
659
+ }
660
+ }
661
+ function doKeyToKey(keys) {
662
+ // TODO: prevent infinite recursion.
663
+ var match;
664
+ while (keys) {
665
+ // Pull off one command key, which is either a single character
666
+ // or a special sequence wrapped in '<' and '>', e.g. '<Space>'.
667
+ match = (/<\w+-.+?>|<\w+>|./).exec(keys);
668
+ key = match[0];
669
+ keys = keys.substring(match.index + key.length);
670
+ CodeMirror.Vim.handleKey(cm, key, 'mapping');
671
+ }
672
+ }
673
+
674
+ function handleKeyInsertMode() {
675
+ if (handleEsc()) { return true; }
676
+ var keys = vim.inputState.keyBuffer = vim.inputState.keyBuffer + key;
677
+ var keysAreChars = key.length == 1;
678
+ var match = commandDispatcher.matchCommand(keys, defaultKeymap, vim.inputState, 'insert');
679
+ // Need to check all key substrings in insert mode.
680
+ while (keys.length > 1 && match.type != 'full') {
681
+ var keys = vim.inputState.keyBuffer = keys.slice(1);
682
+ var thisMatch = commandDispatcher.matchCommand(keys, defaultKeymap, vim.inputState, 'insert');
683
+ if (thisMatch.type != 'none') { match = thisMatch; }
684
+ }
685
+ if (match.type == 'none') { clearInputState(cm); return false; }
686
+ else if (match.type == 'partial') {
687
+ if (lastInsertModeKeyTimer) { window.clearTimeout(lastInsertModeKeyTimer); }
688
+ lastInsertModeKeyTimer = window.setTimeout(
689
+ function() { if (vim.insertMode && vim.inputState.keyBuffer) { clearInputState(cm); } },
690
+ getOption('insertModeEscKeysTimeout'));
691
+ return !keysAreChars;
692
+ }
693
+
694
+ if (lastInsertModeKeyTimer) { window.clearTimeout(lastInsertModeKeyTimer); }
695
+ if (keysAreChars) {
696
+ var here = cm.getCursor();
697
+ cm.replaceRange('', offsetCursor(here, 0, -(keys.length - 1)), here, '+input');
698
+ }
699
+ clearInputState(cm);
700
+ var command = match.command;
701
+ if (command.type == 'keyToKey') {
702
+ doKeyToKey(command.toKeys);
703
+ } else {
704
+ commandDispatcher.processCommand(cm, vim, command);
705
+ }
706
+ return true;
707
+ }
708
+
709
+ function handleKeyNonInsertMode() {
710
+ if (handleMacroRecording() || handleEsc()) { return true; };
711
+
712
+ var keys = vim.inputState.keyBuffer = vim.inputState.keyBuffer + key;
713
+ if (/^[1-9]\d*$/.test(keys)) { return true; }
714
+
715
+ var keysMatcher = /^(\d*)(.*)$/.exec(keys);
716
+ if (!keysMatcher) { clearInputState(cm); return false; }
717
+ var context = vim.visualMode ? 'visual' :
718
+ 'normal';
719
+ var match = commandDispatcher.matchCommand(keysMatcher[2] || keysMatcher[1], defaultKeymap, vim.inputState, context);
720
+ if (match.type == 'none') { clearInputState(cm); return false; }
721
+ else if (match.type == 'partial') { return true; }
722
+
723
+ vim.inputState.keyBuffer = '';
724
+ var command = match.command;
725
+ var keysMatcher = /^(\d*)(.*)$/.exec(keys);
726
+ if (keysMatcher[1] && keysMatcher[1] != '0') {
727
+ vim.inputState.pushRepeatDigit(keysMatcher[1]);
728
+ }
729
+ if (command.type == 'keyToKey') {
730
+ doKeyToKey(command.toKeys);
731
+ } else {
732
+ commandDispatcher.processCommand(cm, vim, command);
733
+ }
734
+ return true;
735
+ }
736
+
737
+ return cm.operation(function() {
738
+ cm.curOp.isVimOp = true;
739
+ try {
740
+ if (vim.insertMode) { return handleKeyInsertMode(); }
741
+ else { return handleKeyNonInsertMode(); }
742
+ } catch (e) {
743
+ // clear VIM state in case it's in a bad state.
744
+ cm.state.vim = undefined;
745
+ maybeInitVimState(cm);
746
+ throw e;
747
+ }
748
+ });
749
+ },
750
+ handleEx: function(cm, input) {
751
+ exCommandDispatcher.processCommand(cm, input);
752
+ }
753
+ };
754
+
755
+ // Represents the current input state.
756
+ function InputState() {
757
+ this.prefixRepeat = [];
758
+ this.motionRepeat = [];
759
+
760
+ this.operator = null;
761
+ this.operatorArgs = null;
762
+ this.motion = null;
763
+ this.motionArgs = null;
764
+ this.keyBuffer = []; // For matching multi-key commands.
765
+ this.registerName = null; // Defaults to the unnamed register.
766
+ }
767
+ InputState.prototype.pushRepeatDigit = function(n) {
768
+ if (!this.operator) {
769
+ this.prefixRepeat = this.prefixRepeat.concat(n);
770
+ } else {
771
+ this.motionRepeat = this.motionRepeat.concat(n);
772
+ }
773
+ };
774
+ InputState.prototype.getRepeat = function() {
775
+ var repeat = 0;
776
+ if (this.prefixRepeat.length > 0 || this.motionRepeat.length > 0) {
777
+ repeat = 1;
778
+ if (this.prefixRepeat.length > 0) {
779
+ repeat *= parseInt(this.prefixRepeat.join(''), 10);
780
+ }
781
+ if (this.motionRepeat.length > 0) {
782
+ repeat *= parseInt(this.motionRepeat.join(''), 10);
783
+ }
784
+ }
785
+ return repeat;
786
+ };
787
+
788
+ function clearInputState(cm, reason) {
789
+ cm.state.vim.inputState = new InputState();
790
+ CodeMirror.signal(cm, 'vim-command-done', reason);
791
+ }
792
+
793
+ /*
794
+ * Register stores information about copy and paste registers. Besides
795
+ * text, a register must store whether it is linewise (i.e., when it is
796
+ * pasted, should it insert itself into a new line, or should the text be
797
+ * inserted at the cursor position.)
798
+ */
799
+ function Register(text, linewise, blockwise) {
800
+ this.clear();
801
+ this.keyBuffer = [text || ''];
802
+ this.insertModeChanges = [];
803
+ this.searchQueries = [];
804
+ this.linewise = !!linewise;
805
+ this.blockwise = !!blockwise;
806
+ }
807
+ Register.prototype = {
808
+ setText: function(text, linewise, blockwise) {
809
+ this.keyBuffer = [text || ''];
810
+ this.linewise = !!linewise;
811
+ this.blockwise = !!blockwise;
812
+ },
813
+ pushText: function(text, linewise) {
814
+ // if this register has ever been set to linewise, use linewise.
815
+ if (linewise) {
816
+ if (!this.linewise) {
817
+ this.keyBuffer.push('\n');
818
+ }
819
+ this.linewise = true;
820
+ }
821
+ this.keyBuffer.push(text);
822
+ },
823
+ pushInsertModeChanges: function(changes) {
824
+ this.insertModeChanges.push(createInsertModeChanges(changes));
825
+ },
826
+ pushSearchQuery: function(query) {
827
+ this.searchQueries.push(query);
828
+ },
829
+ clear: function() {
830
+ this.keyBuffer = [];
831
+ this.insertModeChanges = [];
832
+ this.searchQueries = [];
833
+ this.linewise = false;
834
+ },
835
+ toString: function() {
836
+ return this.keyBuffer.join('');
837
+ }
838
+ };
839
+
840
+ /*
841
+ * vim registers allow you to keep many independent copy and paste buffers.
842
+ * See http://usevim.com/2012/04/13/registers/ for an introduction.
843
+ *
844
+ * RegisterController keeps the state of all the registers. An initial
845
+ * state may be passed in. The unnamed register '"' will always be
846
+ * overridden.
847
+ */
848
+ function RegisterController(registers) {
849
+ this.registers = registers;
850
+ this.unnamedRegister = registers['"'] = new Register();
851
+ registers['.'] = new Register();
852
+ registers[':'] = new Register();
853
+ registers['/'] = new Register();
854
+ }
855
+ RegisterController.prototype = {
856
+ pushText: function(registerName, operator, text, linewise, blockwise) {
857
+ if (linewise && text.charAt(0) == '\n') {
858
+ text = text.slice(1) + '\n';
859
+ }
860
+ if (linewise && text.charAt(text.length - 1) !== '\n'){
861
+ text += '\n';
862
+ }
863
+ // Lowercase and uppercase registers refer to the same register.
864
+ // Uppercase just means append.
865
+ var register = this.isValidRegister(registerName) ?
866
+ this.getRegister(registerName) : null;
867
+ // if no register/an invalid register was specified, things go to the
868
+ // default registers
869
+ if (!register) {
870
+ switch (operator) {
871
+ case 'yank':
872
+ // The 0 register contains the text from the most recent yank.
873
+ this.registers['0'] = new Register(text, linewise, blockwise);
874
+ break;
875
+ case 'delete':
876
+ case 'change':
877
+ if (text.indexOf('\n') == -1) {
878
+ // Delete less than 1 line. Update the small delete register.
879
+ this.registers['-'] = new Register(text, linewise);
880
+ } else {
881
+ // Shift down the contents of the numbered registers and put the
882
+ // deleted text into register 1.
883
+ this.shiftNumericRegisters_();
884
+ this.registers['1'] = new Register(text, linewise);
885
+ }
886
+ break;
887
+ }
888
+ // Make sure the unnamed register is set to what just happened
889
+ this.unnamedRegister.setText(text, linewise, blockwise);
890
+ return;
891
+ }
892
+
893
+ // If we've gotten to this point, we've actually specified a register
894
+ var append = isUpperCase(registerName);
895
+ if (append) {
896
+ register.pushText(text, linewise);
897
+ } else {
898
+ register.setText(text, linewise, blockwise);
899
+ }
900
+ // The unnamed register always has the same value as the last used
901
+ // register.
902
+ this.unnamedRegister.setText(register.toString(), linewise);
903
+ },
904
+ // Gets the register named @name. If one of @name doesn't already exist,
905
+ // create it. If @name is invalid, return the unnamedRegister.
906
+ getRegister: function(name) {
907
+ if (!this.isValidRegister(name)) {
908
+ return this.unnamedRegister;
909
+ }
910
+ name = name.toLowerCase();
911
+ if (!this.registers[name]) {
912
+ this.registers[name] = new Register();
913
+ }
914
+ return this.registers[name];
915
+ },
916
+ isValidRegister: function(name) {
917
+ return name && inArray(name, validRegisters);
918
+ },
919
+ shiftNumericRegisters_: function() {
920
+ for (var i = 9; i >= 2; i--) {
921
+ this.registers[i] = this.getRegister('' + (i - 1));
922
+ }
923
+ }
924
+ };
925
+ function HistoryController() {
926
+ this.historyBuffer = [];
927
+ this.iterator;
928
+ this.initialPrefix = null;
929
+ }
930
+ HistoryController.prototype = {
931
+ // the input argument here acts a user entered prefix for a small time
932
+ // until we start autocompletion in which case it is the autocompleted.
933
+ nextMatch: function (input, up) {
934
+ var historyBuffer = this.historyBuffer;
935
+ var dir = up ? -1 : 1;
936
+ if (this.initialPrefix === null) this.initialPrefix = input;
937
+ for (var i = this.iterator + dir; up ? i >= 0 : i < historyBuffer.length; i+= dir) {
938
+ var element = historyBuffer[i];
939
+ for (var j = 0; j <= element.length; j++) {
940
+ if (this.initialPrefix == element.substring(0, j)) {
941
+ this.iterator = i;
942
+ return element;
943
+ }
944
+ }
945
+ }
946
+ // should return the user input in case we reach the end of buffer.
947
+ if (i >= historyBuffer.length) {
948
+ this.iterator = historyBuffer.length;
949
+ return this.initialPrefix;
950
+ }
951
+ // return the last autocompleted query or exCommand as it is.
952
+ if (i < 0 ) return input;
953
+ },
954
+ pushInput: function(input) {
955
+ var index = this.historyBuffer.indexOf(input);
956
+ if (index > -1) this.historyBuffer.splice(index, 1);
957
+ if (input.length) this.historyBuffer.push(input);
958
+ },
959
+ reset: function() {
960
+ this.initialPrefix = null;
961
+ this.iterator = this.historyBuffer.length;
962
+ }
963
+ };
964
+ var commandDispatcher = {
965
+ matchCommand: function(keys, keyMap, inputState, context) {
966
+ var matches = commandMatches(keys, keyMap, context, inputState);
967
+ if (!matches.full && !matches.partial) {
968
+ return {type: 'none'};
969
+ } else if (!matches.full && matches.partial) {
970
+ return {type: 'partial'};
971
+ }
972
+
973
+ var bestMatch;
974
+ for (var i = 0; i < matches.full.length; i++) {
975
+ var match = matches.full[i];
976
+ if (!bestMatch) {
977
+ bestMatch = match;
978
+ }
979
+ }
980
+ if (bestMatch.keys.slice(-11) == '<character>') {
981
+ inputState.selectedCharacter = lastChar(keys);
982
+ }
983
+ return {type: 'full', command: bestMatch};
984
+ },
985
+ processCommand: function(cm, vim, command) {
986
+ vim.inputState.repeatOverride = command.repeatOverride;
987
+ switch (command.type) {
988
+ case 'motion':
989
+ this.processMotion(cm, vim, command);
990
+ break;
991
+ case 'operator':
992
+ this.processOperator(cm, vim, command);
993
+ break;
994
+ case 'operatorMotion':
995
+ this.processOperatorMotion(cm, vim, command);
996
+ break;
997
+ case 'action':
998
+ this.processAction(cm, vim, command);
999
+ break;
1000
+ case 'search':
1001
+ this.processSearch(cm, vim, command);
1002
+ clearInputState(cm);
1003
+ break;
1004
+ case 'ex':
1005
+ case 'keyToEx':
1006
+ this.processEx(cm, vim, command);
1007
+ clearInputState(cm);
1008
+ break;
1009
+ default:
1010
+ break;
1011
+ }
1012
+ },
1013
+ processMotion: function(cm, vim, command) {
1014
+ vim.inputState.motion = command.motion;
1015
+ vim.inputState.motionArgs = copyArgs(command.motionArgs);
1016
+ this.evalInput(cm, vim);
1017
+ },
1018
+ processOperator: function(cm, vim, command) {
1019
+ var inputState = vim.inputState;
1020
+ if (inputState.operator) {
1021
+ if (inputState.operator == command.operator) {
1022
+ // Typing an operator twice like 'dd' makes the operator operate
1023
+ // linewise
1024
+ inputState.motion = 'expandToLine';
1025
+ inputState.motionArgs = { linewise: true };
1026
+ this.evalInput(cm, vim);
1027
+ return;
1028
+ } else {
1029
+ // 2 different operators in a row doesn't make sense.
1030
+ clearInputState(cm);
1031
+ }
1032
+ }
1033
+ inputState.operator = command.operator;
1034
+ inputState.operatorArgs = copyArgs(command.operatorArgs);
1035
+ if (vim.visualMode) {
1036
+ // Operating on a selection in visual mode. We don't need a motion.
1037
+ this.evalInput(cm, vim);
1038
+ }
1039
+ },
1040
+ processOperatorMotion: function(cm, vim, command) {
1041
+ var visualMode = vim.visualMode;
1042
+ var operatorMotionArgs = copyArgs(command.operatorMotionArgs);
1043
+ if (operatorMotionArgs) {
1044
+ // Operator motions may have special behavior in visual mode.
1045
+ if (visualMode && operatorMotionArgs.visualLine) {
1046
+ vim.visualLine = true;
1047
+ }
1048
+ }
1049
+ this.processOperator(cm, vim, command);
1050
+ if (!visualMode) {
1051
+ this.processMotion(cm, vim, command);
1052
+ }
1053
+ },
1054
+ processAction: function(cm, vim, command) {
1055
+ var inputState = vim.inputState;
1056
+ var repeat = inputState.getRepeat();
1057
+ var repeatIsExplicit = !!repeat;
1058
+ var actionArgs = copyArgs(command.actionArgs) || {};
1059
+ if (inputState.selectedCharacter) {
1060
+ actionArgs.selectedCharacter = inputState.selectedCharacter;
1061
+ }
1062
+ // Actions may or may not have motions and operators. Do these first.
1063
+ if (command.operator) {
1064
+ this.processOperator(cm, vim, command);
1065
+ }
1066
+ if (command.motion) {
1067
+ this.processMotion(cm, vim, command);
1068
+ }
1069
+ if (command.motion || command.operator) {
1070
+ this.evalInput(cm, vim);
1071
+ }
1072
+ actionArgs.repeat = repeat || 1;
1073
+ actionArgs.repeatIsExplicit = repeatIsExplicit;
1074
+ actionArgs.registerName = inputState.registerName;
1075
+ clearInputState(cm);
1076
+ vim.lastMotion = null;
1077
+ if (command.isEdit) {
1078
+ this.recordLastEdit(vim, inputState, command);
1079
+ }
1080
+ actions[command.action](cm, actionArgs, vim);
1081
+ },
1082
+ processSearch: function(cm, vim, command) {
1083
+ if (!cm.getSearchCursor) {
1084
+ // Search depends on SearchCursor.
1085
+ return;
1086
+ }
1087
+ var forward = command.searchArgs.forward;
1088
+ var wholeWordOnly = command.searchArgs.wholeWordOnly;
1089
+ getSearchState(cm).setReversed(!forward);
1090
+ var promptPrefix = (forward) ? '/' : '?';
1091
+ var originalQuery = getSearchState(cm).getQuery();
1092
+ var originalScrollPos = cm.getScrollInfo();
1093
+ function handleQuery(query, ignoreCase, smartCase) {
1094
+ vimGlobalState.searchHistoryController.pushInput(query);
1095
+ vimGlobalState.searchHistoryController.reset();
1096
+ try {
1097
+ updateSearchQuery(cm, query, ignoreCase, smartCase);
1098
+ } catch (e) {
1099
+ showConfirm(cm, 'Invalid regex: ' + query);
1100
+ return;
1101
+ }
1102
+ commandDispatcher.processMotion(cm, vim, {
1103
+ type: 'motion',
1104
+ motion: 'findNext',
1105
+ motionArgs: { forward: true, toJumplist: command.searchArgs.toJumplist }
1106
+ });
1107
+ }
1108
+ function onPromptClose(query) {
1109
+ cm.scrollTo(originalScrollPos.left, originalScrollPos.top);
1110
+ handleQuery(query, true /** ignoreCase */, true /** smartCase */);
1111
+ var macroModeState = vimGlobalState.macroModeState;
1112
+ if (macroModeState.isRecording) {
1113
+ logSearchQuery(macroModeState, query);
1114
+ }
1115
+ }
1116
+ function onPromptKeyUp(e, query, close) {
1117
+ var keyName = CodeMirror.keyName(e), up;
1118
+ if (keyName == 'Up' || keyName == 'Down') {
1119
+ up = keyName == 'Up' ? true : false;
1120
+ query = vimGlobalState.searchHistoryController.nextMatch(query, up) || '';
1121
+ close(query);
1122
+ } else {
1123
+ if ( keyName != 'Left' && keyName != 'Right' && keyName != 'Ctrl' && keyName != 'Alt' && keyName != 'Shift')
1124
+ vimGlobalState.searchHistoryController.reset();
1125
+ }
1126
+ var parsedQuery;
1127
+ try {
1128
+ parsedQuery = updateSearchQuery(cm, query,
1129
+ true /** ignoreCase */, true /** smartCase */);
1130
+ } catch (e) {
1131
+ // Swallow bad regexes for incremental search.
1132
+ }
1133
+ if (parsedQuery) {
1134
+ cm.scrollIntoView(findNext(cm, !forward, parsedQuery), 30);
1135
+ } else {
1136
+ clearSearchHighlight(cm);
1137
+ cm.scrollTo(originalScrollPos.left, originalScrollPos.top);
1138
+ }
1139
+ }
1140
+ function onPromptKeyDown(e, query, close) {
1141
+ var keyName = CodeMirror.keyName(e);
1142
+ if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[') {
1143
+ vimGlobalState.searchHistoryController.pushInput(query);
1144
+ vimGlobalState.searchHistoryController.reset();
1145
+ updateSearchQuery(cm, originalQuery);
1146
+ clearSearchHighlight(cm);
1147
+ cm.scrollTo(originalScrollPos.left, originalScrollPos.top);
1148
+ CodeMirror.e_stop(e);
1149
+ close();
1150
+ cm.focus();
1151
+ }
1152
+ }
1153
+ switch (command.searchArgs.querySrc) {
1154
+ case 'prompt':
1155
+ var macroModeState = vimGlobalState.macroModeState;
1156
+ if (macroModeState.isPlaying) {
1157
+ var query = macroModeState.replaySearchQueries.shift();
1158
+ handleQuery(query, true /** ignoreCase */, false /** smartCase */);
1159
+ } else {
1160
+ showPrompt(cm, {
1161
+ onClose: onPromptClose,
1162
+ prefix: promptPrefix,
1163
+ desc: searchPromptDesc,
1164
+ onKeyUp: onPromptKeyUp,
1165
+ onKeyDown: onPromptKeyDown
1166
+ });
1167
+ }
1168
+ break;
1169
+ case 'wordUnderCursor':
1170
+ var word = expandWordUnderCursor(cm, false /** inclusive */,
1171
+ true /** forward */, false /** bigWord */,
1172
+ true /** noSymbol */);
1173
+ var isKeyword = true;
1174
+ if (!word) {
1175
+ word = expandWordUnderCursor(cm, false /** inclusive */,
1176
+ true /** forward */, false /** bigWord */,
1177
+ false /** noSymbol */);
1178
+ isKeyword = false;
1179
+ }
1180
+ if (!word) {
1181
+ return;
1182
+ }
1183
+ var query = cm.getLine(word.start.line).substring(word.start.ch,
1184
+ word.end.ch);
1185
+ if (isKeyword && wholeWordOnly) {
1186
+ query = '\\b' + query + '\\b';
1187
+ } else {
1188
+ query = escapeRegex(query);
1189
+ }
1190
+
1191
+ // cachedCursor is used to save the old position of the cursor
1192
+ // when * or # causes vim to seek for the nearest word and shift
1193
+ // the cursor before entering the motion.
1194
+ vimGlobalState.jumpList.cachedCursor = cm.getCursor();
1195
+ cm.setCursor(word.start);
1196
+
1197
+ handleQuery(query, true /** ignoreCase */, false /** smartCase */);
1198
+ break;
1199
+ }
1200
+ },
1201
+ processEx: function(cm, vim, command) {
1202
+ function onPromptClose(input) {
1203
+ // Give the prompt some time to close so that if processCommand shows
1204
+ // an error, the elements don't overlap.
1205
+ vimGlobalState.exCommandHistoryController.pushInput(input);
1206
+ vimGlobalState.exCommandHistoryController.reset();
1207
+ exCommandDispatcher.processCommand(cm, input);
1208
+ }
1209
+ function onPromptKeyDown(e, input, close) {
1210
+ var keyName = CodeMirror.keyName(e), up;
1211
+ if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[') {
1212
+ vimGlobalState.exCommandHistoryController.pushInput(input);
1213
+ vimGlobalState.exCommandHistoryController.reset();
1214
+ CodeMirror.e_stop(e);
1215
+ close();
1216
+ cm.focus();
1217
+ }
1218
+ if (keyName == 'Up' || keyName == 'Down') {
1219
+ up = keyName == 'Up' ? true : false;
1220
+ input = vimGlobalState.exCommandHistoryController.nextMatch(input, up) || '';
1221
+ close(input);
1222
+ } else {
1223
+ if ( keyName != 'Left' && keyName != 'Right' && keyName != 'Ctrl' && keyName != 'Alt' && keyName != 'Shift')
1224
+ vimGlobalState.exCommandHistoryController.reset();
1225
+ }
1226
+ }
1227
+ if (command.type == 'keyToEx') {
1228
+ // Handle user defined Ex to Ex mappings
1229
+ exCommandDispatcher.processCommand(cm, command.exArgs.input);
1230
+ } else {
1231
+ if (vim.visualMode) {
1232
+ showPrompt(cm, { onClose: onPromptClose, prefix: ':', value: '\'<,\'>',
1233
+ onKeyDown: onPromptKeyDown});
1234
+ } else {
1235
+ showPrompt(cm, { onClose: onPromptClose, prefix: ':',
1236
+ onKeyDown: onPromptKeyDown});
1237
+ }
1238
+ }
1239
+ },
1240
+ evalInput: function(cm, vim) {
1241
+ // If the motion comand is set, execute both the operator and motion.
1242
+ // Otherwise return.
1243
+ var inputState = vim.inputState;
1244
+ var motion = inputState.motion;
1245
+ var motionArgs = inputState.motionArgs || {};
1246
+ var operator = inputState.operator;
1247
+ var operatorArgs = inputState.operatorArgs || {};
1248
+ var registerName = inputState.registerName;
1249
+ var sel = vim.sel;
1250
+ // TODO: Make sure cm and vim selections are identical outside visual mode.
1251
+ var origHead = copyCursor(vim.visualMode ? sel.head: cm.getCursor('head'));
1252
+ var origAnchor = copyCursor(vim.visualMode ? sel.anchor : cm.getCursor('anchor'));
1253
+ var oldHead = copyCursor(origHead);
1254
+ var oldAnchor = copyCursor(origAnchor);
1255
+ var newHead, newAnchor;
1256
+ var repeat;
1257
+ if (operator) {
1258
+ this.recordLastEdit(vim, inputState);
1259
+ }
1260
+ if (inputState.repeatOverride !== undefined) {
1261
+ // If repeatOverride is specified, that takes precedence over the
1262
+ // input state's repeat. Used by Ex mode and can be user defined.
1263
+ repeat = inputState.repeatOverride;
1264
+ } else {
1265
+ repeat = inputState.getRepeat();
1266
+ }
1267
+ if (repeat > 0 && motionArgs.explicitRepeat) {
1268
+ motionArgs.repeatIsExplicit = true;
1269
+ } else if (motionArgs.noRepeat ||
1270
+ (!motionArgs.explicitRepeat && repeat === 0)) {
1271
+ repeat = 1;
1272
+ motionArgs.repeatIsExplicit = false;
1273
+ }
1274
+ if (inputState.selectedCharacter) {
1275
+ // If there is a character input, stick it in all of the arg arrays.
1276
+ motionArgs.selectedCharacter = operatorArgs.selectedCharacter =
1277
+ inputState.selectedCharacter;
1278
+ }
1279
+ motionArgs.repeat = repeat;
1280
+ clearInputState(cm);
1281
+ if (motion) {
1282
+ var motionResult = motions[motion](cm, origHead, motionArgs, vim);
1283
+ vim.lastMotion = motions[motion];
1284
+ if (!motionResult) {
1285
+ return;
1286
+ }
1287
+ if (motionArgs.toJumplist) {
1288
+ var jumpList = vimGlobalState.jumpList;
1289
+ // if the current motion is # or *, use cachedCursor
1290
+ var cachedCursor = jumpList.cachedCursor;
1291
+ if (cachedCursor) {
1292
+ recordJumpPosition(cm, cachedCursor, motionResult);
1293
+ delete jumpList.cachedCursor;
1294
+ } else {
1295
+ recordJumpPosition(cm, origHead, motionResult);
1296
+ }
1297
+ }
1298
+ if (motionResult instanceof Array) {
1299
+ newAnchor = motionResult[0];
1300
+ newHead = motionResult[1];
1301
+ } else {
1302
+ newHead = motionResult;
1303
+ }
1304
+ // TODO: Handle null returns from motion commands better.
1305
+ if (!newHead) {
1306
+ newHead = copyCursor(origHead);
1307
+ }
1308
+ if (vim.visualMode) {
1309
+ newHead = clipCursorToContent(cm, newHead, vim.visualBlock);
1310
+ if (newAnchor) {
1311
+ newAnchor = clipCursorToContent(cm, newAnchor, true);
1312
+ }
1313
+ newAnchor = newAnchor || oldAnchor;
1314
+ sel.anchor = newAnchor;
1315
+ sel.head = newHead;
1316
+ updateCmSelection(cm);
1317
+ updateMark(cm, vim, '<',
1318
+ cursorIsBefore(newAnchor, newHead) ? newAnchor
1319
+ : newHead);
1320
+ updateMark(cm, vim, '>',
1321
+ cursorIsBefore(newAnchor, newHead) ? newHead
1322
+ : newAnchor);
1323
+ } else if (!operator) {
1324
+ newHead = clipCursorToContent(cm, newHead);
1325
+ cm.setCursor(newHead.line, newHead.ch);
1326
+ }
1327
+ }
1328
+ if (operator) {
1329
+ if (operatorArgs.lastSel) {
1330
+ // Replaying a visual mode operation
1331
+ newAnchor = oldAnchor;
1332
+ var lastSel = operatorArgs.lastSel;
1333
+ var lineOffset = Math.abs(lastSel.head.line - lastSel.anchor.line);
1334
+ var chOffset = Math.abs(lastSel.head.ch - lastSel.anchor.ch);
1335
+ if (lastSel.visualLine) {
1336
+ // Linewise Visual mode: The same number of lines.
1337
+ newHead = Pos(oldAnchor.line + lineOffset, oldAnchor.ch);
1338
+ } else if (lastSel.visualBlock) {
1339
+ // Blockwise Visual mode: The same number of lines and columns.
1340
+ newHead = Pos(oldAnchor.line + lineOffset, oldAnchor.ch + chOffset);
1341
+ } else if (lastSel.head.line == lastSel.anchor.line) {
1342
+ // Normal Visual mode within one line: The same number of characters.
1343
+ newHead = Pos(oldAnchor.line, oldAnchor.ch + chOffset);
1344
+ } else {
1345
+ // Normal Visual mode with several lines: The same number of lines, in the
1346
+ // last line the same number of characters as in the last line the last time.
1347
+ newHead = Pos(oldAnchor.line + lineOffset, oldAnchor.ch);
1348
+ }
1349
+ vim.visualMode = true;
1350
+ vim.visualLine = lastSel.visualLine;
1351
+ vim.visualBlock = lastSel.visualBlock;
1352
+ sel = vim.sel = {
1353
+ anchor: newAnchor,
1354
+ head: newHead
1355
+ };
1356
+ updateCmSelection(cm);
1357
+ } else if (vim.visualMode) {
1358
+ operatorArgs.lastSel = {
1359
+ anchor: copyCursor(sel.anchor),
1360
+ head: copyCursor(sel.head),
1361
+ visualBlock: vim.visualBlock,
1362
+ visualLine: vim.visualLine
1363
+ };
1364
+ }
1365
+ var curStart, curEnd, linewise, mode;
1366
+ var cmSel;
1367
+ if (vim.visualMode) {
1368
+ // Init visual op
1369
+ curStart = cursorMin(sel.head, sel.anchor);
1370
+ curEnd = cursorMax(sel.head, sel.anchor);
1371
+ linewise = vim.visualLine || operatorArgs.linewise;
1372
+ mode = vim.visualBlock ? 'block' :
1373
+ linewise ? 'line' :
1374
+ 'char';
1375
+ cmSel = makeCmSelection(cm, {
1376
+ anchor: curStart,
1377
+ head: curEnd
1378
+ }, mode);
1379
+ if (linewise) {
1380
+ var ranges = cmSel.ranges;
1381
+ if (mode == 'block') {
1382
+ // Linewise operators in visual block mode extend to end of line
1383
+ for (var i = 0; i < ranges.length; i++) {
1384
+ ranges[i].head.ch = lineLength(cm, ranges[i].head.line);
1385
+ }
1386
+ } else if (mode == 'line') {
1387
+ ranges[0].head = Pos(ranges[0].head.line + 1, 0);
1388
+ }
1389
+ }
1390
+ } else {
1391
+ // Init motion op
1392
+ curStart = copyCursor(newAnchor || oldAnchor);
1393
+ curEnd = copyCursor(newHead || oldHead);
1394
+ if (cursorIsBefore(curEnd, curStart)) {
1395
+ var tmp = curStart;
1396
+ curStart = curEnd;
1397
+ curEnd = tmp;
1398
+ }
1399
+ linewise = motionArgs.linewise || operatorArgs.linewise;
1400
+ if (linewise) {
1401
+ // Expand selection to entire line.
1402
+ expandSelectionToLine(cm, curStart, curEnd);
1403
+ } else if (motionArgs.forward) {
1404
+ // Clip to trailing newlines only if the motion goes forward.
1405
+ clipToLine(cm, curStart, curEnd);
1406
+ }
1407
+ mode = 'char';
1408
+ var exclusive = !motionArgs.inclusive || linewise;
1409
+ cmSel = makeCmSelection(cm, {
1410
+ anchor: curStart,
1411
+ head: curEnd
1412
+ }, mode, exclusive);
1413
+ }
1414
+ cm.setSelections(cmSel.ranges, cmSel.primary);
1415
+ vim.lastMotion = null;
1416
+ operatorArgs.repeat = repeat; // For indent in visual mode.
1417
+ operatorArgs.registerName = registerName;
1418
+ // Keep track of linewise as it affects how paste and change behave.
1419
+ operatorArgs.linewise = linewise;
1420
+ var operatorMoveTo = operators[operator](
1421
+ cm, operatorArgs, cmSel.ranges, oldAnchor, newHead);
1422
+ if (vim.visualMode) {
1423
+ exitVisualMode(cm);
1424
+ }
1425
+ if (operatorMoveTo) {
1426
+ cm.setCursor(operatorMoveTo);
1427
+ }
1428
+ }
1429
+ },
1430
+ recordLastEdit: function(vim, inputState, actionCommand) {
1431
+ var macroModeState = vimGlobalState.macroModeState;
1432
+ if (macroModeState.isPlaying) { return; }
1433
+ vim.lastEditInputState = inputState;
1434
+ vim.lastEditActionCommand = actionCommand;
1435
+ macroModeState.lastInsertModeChanges.changes = [];
1436
+ macroModeState.lastInsertModeChanges.expectCursorActivityForChange = false;
1437
+ }
1438
+ };
1439
+
1440
+ /**
1441
+ * typedef {Object{line:number,ch:number}} Cursor An object containing the
1442
+ * position of the cursor.
1443
+ */
1444
+ // All of the functions below return Cursor objects.
1445
+ var motions = {
1446
+ moveToTopLine: function(cm, _head, motionArgs) {
1447
+ var line = getUserVisibleLines(cm).top + motionArgs.repeat -1;
1448
+ return Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));
1449
+ },
1450
+ moveToMiddleLine: function(cm) {
1451
+ var range = getUserVisibleLines(cm);
1452
+ var line = Math.floor((range.top + range.bottom) * 0.5);
1453
+ return Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));
1454
+ },
1455
+ moveToBottomLine: function(cm, _head, motionArgs) {
1456
+ var line = getUserVisibleLines(cm).bottom - motionArgs.repeat +1;
1457
+ return Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));
1458
+ },
1459
+ expandToLine: function(_cm, head, motionArgs) {
1460
+ // Expands forward to end of line, and then to next line if repeat is
1461
+ // >1. Does not handle backward motion!
1462
+ var cur = head;
1463
+ return Pos(cur.line + motionArgs.repeat - 1, Infinity);
1464
+ },
1465
+ findNext: function(cm, _head, motionArgs) {
1466
+ var state = getSearchState(cm);
1467
+ var query = state.getQuery();
1468
+ if (!query) {
1469
+ return;
1470
+ }
1471
+ var prev = !motionArgs.forward;
1472
+ // If search is initiated with ? instead of /, negate direction.
1473
+ prev = (state.isReversed()) ? !prev : prev;
1474
+ highlightSearchMatches(cm, query);
1475
+ return findNext(cm, prev/** prev */, query, motionArgs.repeat);
1476
+ },
1477
+ goToMark: function(cm, _head, motionArgs, vim) {
1478
+ var mark = vim.marks[motionArgs.selectedCharacter];
1479
+ if (mark) {
1480
+ var pos = mark.find();
1481
+ return motionArgs.linewise ? { line: pos.line, ch: findFirstNonWhiteSpaceCharacter(cm.getLine(pos.line)) } : pos;
1482
+ }
1483
+ return null;
1484
+ },
1485
+ moveToOtherHighlightedEnd: function(cm, _head, motionArgs, vim) {
1486
+ if (vim.visualBlock && motionArgs.sameLine) {
1487
+ var sel = vim.sel;
1488
+ return [
1489
+ clipCursorToContent(cm, Pos(sel.anchor.line, sel.head.ch)),
1490
+ clipCursorToContent(cm, Pos(sel.head.line, sel.anchor.ch))
1491
+ ];
1492
+ } else {
1493
+ return ([vim.sel.head, vim.sel.anchor]);
1494
+ }
1495
+ },
1496
+ jumpToMark: function(cm, head, motionArgs, vim) {
1497
+ var best = head;
1498
+ for (var i = 0; i < motionArgs.repeat; i++) {
1499
+ var cursor = best;
1500
+ for (var key in vim.marks) {
1501
+ if (!isLowerCase(key)) {
1502
+ continue;
1503
+ }
1504
+ var mark = vim.marks[key].find();
1505
+ var isWrongDirection = (motionArgs.forward) ?
1506
+ cursorIsBefore(mark, cursor) : cursorIsBefore(cursor, mark);
1507
+
1508
+ if (isWrongDirection) {
1509
+ continue;
1510
+ }
1511
+ if (motionArgs.linewise && (mark.line == cursor.line)) {
1512
+ continue;
1513
+ }
1514
+
1515
+ var equal = cursorEqual(cursor, best);
1516
+ var between = (motionArgs.forward) ?
1517
+ cursorIsBetween(cursor, mark, best) :
1518
+ cursorIsBetween(best, mark, cursor);
1519
+
1520
+ if (equal || between) {
1521
+ best = mark;
1522
+ }
1523
+ }
1524
+ }
1525
+
1526
+ if (motionArgs.linewise) {
1527
+ // Vim places the cursor on the first non-whitespace character of
1528
+ // the line if there is one, else it places the cursor at the end
1529
+ // of the line, regardless of whether a mark was found.
1530
+ best = Pos(best.line, findFirstNonWhiteSpaceCharacter(cm.getLine(best.line)));
1531
+ }
1532
+ return best;
1533
+ },
1534
+ moveByCharacters: function(_cm, head, motionArgs) {
1535
+ var cur = head;
1536
+ var repeat = motionArgs.repeat;
1537
+ var ch = motionArgs.forward ? cur.ch + repeat : cur.ch - repeat;
1538
+ return Pos(cur.line, ch);
1539
+ },
1540
+ moveByLines: function(cm, head, motionArgs, vim) {
1541
+ var cur = head;
1542
+ var endCh = cur.ch;
1543
+ // Depending what our last motion was, we may want to do different
1544
+ // things. If our last motion was moving vertically, we want to
1545
+ // preserve the HPos from our last horizontal move. If our last motion
1546
+ // was going to the end of a line, moving vertically we should go to
1547
+ // the end of the line, etc.
1548
+ switch (vim.lastMotion) {
1549
+ case this.moveByLines:
1550
+ case this.moveByDisplayLines:
1551
+ case this.moveByScroll:
1552
+ case this.moveToColumn:
1553
+ case this.moveToEol:
1554
+ endCh = vim.lastHPos;
1555
+ break;
1556
+ default:
1557
+ vim.lastHPos = endCh;
1558
+ }
1559
+ var repeat = motionArgs.repeat+(motionArgs.repeatOffset||0);
1560
+ var line = motionArgs.forward ? cur.line + repeat : cur.line - repeat;
1561
+ var first = cm.firstLine();
1562
+ var last = cm.lastLine();
1563
+ // Vim cancels linewise motions that start on an edge and move beyond
1564
+ // that edge. It does not cancel motions that do not start on an edge.
1565
+ if ((line < first && cur.line == first) ||
1566
+ (line > last && cur.line == last)) {
1567
+ return;
1568
+ }
1569
+ if (motionArgs.toFirstChar){
1570
+ endCh=findFirstNonWhiteSpaceCharacter(cm.getLine(line));
1571
+ vim.lastHPos = endCh;
1572
+ }
1573
+ vim.lastHSPos = cm.charCoords(Pos(line, endCh),'div').left;
1574
+ return Pos(line, endCh);
1575
+ },
1576
+ moveByDisplayLines: function(cm, head, motionArgs, vim) {
1577
+ var cur = head;
1578
+ switch (vim.lastMotion) {
1579
+ case this.moveByDisplayLines:
1580
+ case this.moveByScroll:
1581
+ case this.moveByLines:
1582
+ case this.moveToColumn:
1583
+ case this.moveToEol:
1584
+ break;
1585
+ default:
1586
+ vim.lastHSPos = cm.charCoords(cur,'div').left;
1587
+ }
1588
+ var repeat = motionArgs.repeat;
1589
+ var res=cm.findPosV(cur,(motionArgs.forward ? repeat : -repeat),'line',vim.lastHSPos);
1590
+ if (res.hitSide) {
1591
+ if (motionArgs.forward) {
1592
+ var lastCharCoords = cm.charCoords(res, 'div');
1593
+ var goalCoords = { top: lastCharCoords.top + 8, left: vim.lastHSPos };
1594
+ var res = cm.coordsChar(goalCoords, 'div');
1595
+ } else {
1596
+ var resCoords = cm.charCoords(Pos(cm.firstLine(), 0), 'div');
1597
+ resCoords.left = vim.lastHSPos;
1598
+ res = cm.coordsChar(resCoords, 'div');
1599
+ }
1600
+ }
1601
+ vim.lastHPos = res.ch;
1602
+ return res;
1603
+ },
1604
+ moveByPage: function(cm, head, motionArgs) {
1605
+ // CodeMirror only exposes functions that move the cursor page down, so
1606
+ // doing this bad hack to move the cursor and move it back. evalInput
1607
+ // will move the cursor to where it should be in the end.
1608
+ var curStart = head;
1609
+ var repeat = motionArgs.repeat;
1610
+ return cm.findPosV(curStart, (motionArgs.forward ? repeat : -repeat), 'page');
1611
+ },
1612
+ moveByParagraph: function(cm, head, motionArgs) {
1613
+ var line = head.line;
1614
+ var repeat = motionArgs.repeat;
1615
+ var inc = motionArgs.forward ? 1 : -1;
1616
+ for (var i = 0; i < repeat; i++) {
1617
+ if ((!motionArgs.forward && line === cm.firstLine() ) ||
1618
+ (motionArgs.forward && line == cm.lastLine())) {
1619
+ break;
1620
+ }
1621
+ line += inc;
1622
+ while (line !== cm.firstLine() && line != cm.lastLine() && cm.getLine(line)) {
1623
+ line += inc;
1624
+ }
1625
+ }
1626
+ return Pos(line, 0);
1627
+ },
1628
+ moveByScroll: function(cm, head, motionArgs, vim) {
1629
+ var scrollbox = cm.getScrollInfo();
1630
+ var curEnd = null;
1631
+ var repeat = motionArgs.repeat;
1632
+ if (!repeat) {
1633
+ repeat = scrollbox.clientHeight / (2 * cm.defaultTextHeight());
1634
+ }
1635
+ var orig = cm.charCoords(head, 'local');
1636
+ motionArgs.repeat = repeat;
1637
+ var curEnd = motions.moveByDisplayLines(cm, head, motionArgs, vim);
1638
+ if (!curEnd) {
1639
+ return null;
1640
+ }
1641
+ var dest = cm.charCoords(curEnd, 'local');
1642
+ cm.scrollTo(null, scrollbox.top + dest.top - orig.top);
1643
+ return curEnd;
1644
+ },
1645
+ moveByWords: function(cm, head, motionArgs) {
1646
+ return moveToWord(cm, head, motionArgs.repeat, !!motionArgs.forward,
1647
+ !!motionArgs.wordEnd, !!motionArgs.bigWord);
1648
+ },
1649
+ moveTillCharacter: function(cm, _head, motionArgs) {
1650
+ var repeat = motionArgs.repeat;
1651
+ var curEnd = moveToCharacter(cm, repeat, motionArgs.forward,
1652
+ motionArgs.selectedCharacter);
1653
+ var increment = motionArgs.forward ? -1 : 1;
1654
+ recordLastCharacterSearch(increment, motionArgs);
1655
+ if (!curEnd) return null;
1656
+ curEnd.ch += increment;
1657
+ return curEnd;
1658
+ },
1659
+ moveToCharacter: function(cm, head, motionArgs) {
1660
+ var repeat = motionArgs.repeat;
1661
+ recordLastCharacterSearch(0, motionArgs);
1662
+ return moveToCharacter(cm, repeat, motionArgs.forward,
1663
+ motionArgs.selectedCharacter) || head;
1664
+ },
1665
+ moveToSymbol: function(cm, head, motionArgs) {
1666
+ var repeat = motionArgs.repeat;
1667
+ return findSymbol(cm, repeat, motionArgs.forward,
1668
+ motionArgs.selectedCharacter) || head;
1669
+ },
1670
+ moveToColumn: function(cm, head, motionArgs, vim) {
1671
+ var repeat = motionArgs.repeat;
1672
+ // repeat is equivalent to which column we want to move to!
1673
+ vim.lastHPos = repeat - 1;
1674
+ vim.lastHSPos = cm.charCoords(head,'div').left;
1675
+ return moveToColumn(cm, repeat);
1676
+ },
1677
+ moveToEol: function(cm, head, motionArgs, vim) {
1678
+ var cur = head;
1679
+ vim.lastHPos = Infinity;
1680
+ var retval= Pos(cur.line + motionArgs.repeat - 1, Infinity);
1681
+ var end=cm.clipPos(retval);
1682
+ end.ch--;
1683
+ vim.lastHSPos = cm.charCoords(end,'div').left;
1684
+ return retval;
1685
+ },
1686
+ moveToFirstNonWhiteSpaceCharacter: function(cm, head) {
1687
+ // Go to the start of the line where the text begins, or the end for
1688
+ // whitespace-only lines
1689
+ var cursor = head;
1690
+ return Pos(cursor.line,
1691
+ findFirstNonWhiteSpaceCharacter(cm.getLine(cursor.line)));
1692
+ },
1693
+ moveToMatchedSymbol: function(cm, head) {
1694
+ var cursor = head;
1695
+ var line = cursor.line;
1696
+ var ch = cursor.ch;
1697
+ var lineText = cm.getLine(line);
1698
+ var symbol;
1699
+ do {
1700
+ symbol = lineText.charAt(ch++);
1701
+ if (symbol && isMatchableSymbol(symbol)) {
1702
+ var style = cm.getTokenTypeAt(Pos(line, ch));
1703
+ if (style !== "string" && style !== "comment") {
1704
+ break;
1705
+ }
1706
+ }
1707
+ } while (symbol);
1708
+ if (symbol) {
1709
+ var matched = cm.findMatchingBracket(Pos(line, ch));
1710
+ return matched.to;
1711
+ } else {
1712
+ return cursor;
1713
+ }
1714
+ },
1715
+ moveToStartOfLine: function(_cm, head) {
1716
+ return Pos(head.line, 0);
1717
+ },
1718
+ moveToLineOrEdgeOfDocument: function(cm, _head, motionArgs) {
1719
+ var lineNum = motionArgs.forward ? cm.lastLine() : cm.firstLine();
1720
+ if (motionArgs.repeatIsExplicit) {
1721
+ lineNum = motionArgs.repeat - cm.getOption('firstLineNumber');
1722
+ }
1723
+ return Pos(lineNum,
1724
+ findFirstNonWhiteSpaceCharacter(cm.getLine(lineNum)));
1725
+ },
1726
+ textObjectManipulation: function(cm, head, motionArgs) {
1727
+ // TODO: lots of possible exceptions that can be thrown here. Try da(
1728
+ // outside of a () block.
1729
+
1730
+ // TODO: adding <> >< to this map doesn't work, presumably because
1731
+ // they're operators
1732
+ var mirroredPairs = {'(': ')', ')': '(',
1733
+ '{': '}', '}': '{',
1734
+ '[': ']', ']': '['};
1735
+ var selfPaired = {'\'': true, '"': true};
1736
+
1737
+ var character = motionArgs.selectedCharacter;
1738
+ // 'b' refers to '()' block.
1739
+ // 'B' refers to '{}' block.
1740
+ if (character == 'b') {
1741
+ character = '(';
1742
+ } else if (character == 'B') {
1743
+ character = '{';
1744
+ }
1745
+
1746
+ // Inclusive is the difference between a and i
1747
+ // TODO: Instead of using the additional text object map to perform text
1748
+ // object operations, merge the map into the defaultKeyMap and use
1749
+ // motionArgs to define behavior. Define separate entries for 'aw',
1750
+ // 'iw', 'a[', 'i[', etc.
1751
+ var inclusive = !motionArgs.textObjectInner;
1752
+
1753
+ var tmp;
1754
+ if (mirroredPairs[character]) {
1755
+ tmp = selectCompanionObject(cm, head, character, inclusive);
1756
+ } else if (selfPaired[character]) {
1757
+ tmp = findBeginningAndEnd(cm, head, character, inclusive);
1758
+ } else if (character === 'W') {
1759
+ tmp = expandWordUnderCursor(cm, inclusive, true /** forward */,
1760
+ true /** bigWord */);
1761
+ } else if (character === 'w') {
1762
+ tmp = expandWordUnderCursor(cm, inclusive, true /** forward */,
1763
+ false /** bigWord */);
1764
+ } else {
1765
+ // No text object defined for this, don't move.
1766
+ return null;
1767
+ }
1768
+
1769
+ if (!cm.state.vim.visualMode) {
1770
+ return [tmp.start, tmp.end];
1771
+ } else {
1772
+ return expandSelection(cm, tmp.start, tmp.end);
1773
+ }
1774
+ },
1775
+
1776
+ repeatLastCharacterSearch: function(cm, head, motionArgs) {
1777
+ var lastSearch = vimGlobalState.lastChararacterSearch;
1778
+ var repeat = motionArgs.repeat;
1779
+ var forward = motionArgs.forward === lastSearch.forward;
1780
+ var increment = (lastSearch.increment ? 1 : 0) * (forward ? -1 : 1);
1781
+ cm.moveH(-increment, 'char');
1782
+ motionArgs.inclusive = forward ? true : false;
1783
+ var curEnd = moveToCharacter(cm, repeat, forward, lastSearch.selectedCharacter);
1784
+ if (!curEnd) {
1785
+ cm.moveH(increment, 'char');
1786
+ return head;
1787
+ }
1788
+ curEnd.ch += increment;
1789
+ return curEnd;
1790
+ }
1791
+ };
1792
+
1793
+ function fillArray(val, times) {
1794
+ var arr = [];
1795
+ for (var i = 0; i < times; i++) {
1796
+ arr.push(val);
1797
+ }
1798
+ return arr;
1799
+ }
1800
+ /**
1801
+ * An operator acts on a text selection. It receives the list of selections
1802
+ * as input. The corresponding CodeMirror selection is guaranteed to
1803
+ * match the input selection.
1804
+ */
1805
+ var operators = {
1806
+ change: function(cm, args, ranges) {
1807
+ var finalHead, text;
1808
+ var vim = cm.state.vim;
1809
+ vimGlobalState.macroModeState.lastInsertModeChanges.inVisualBlock = vim.visualBlock;
1810
+ if (!vim.visualMode) {
1811
+ var anchor = ranges[0].anchor,
1812
+ head = ranges[0].head;
1813
+ text = cm.getRange(anchor, head);
1814
+ if (!isWhiteSpaceString(text)) {
1815
+ // Exclude trailing whitespace if the range is not all whitespace.
1816
+ var match = (/\s+$/).exec(text);
1817
+ if (match) {
1818
+ head = offsetCursor(head, 0, - match[0].length);
1819
+ text = text.slice(0, - match[0].length);
1820
+ }
1821
+ }
1822
+ var wasLastLine = head.line - 1 == cm.lastLine();
1823
+ cm.replaceRange('', anchor, head);
1824
+ if (args.linewise && !wasLastLine) {
1825
+ // Push the next line back down, if there is a next line.
1826
+ CodeMirror.commands.newlineAndIndent(cm);
1827
+ // null ch so setCursor moves to end of line.
1828
+ anchor.ch = null;
1829
+ }
1830
+ finalHead = anchor;
1831
+ } else {
1832
+ text = cm.getSelection();
1833
+ var replacement = fillArray('', ranges.length);
1834
+ cm.replaceSelections(replacement);
1835
+ finalHead = cursorMin(ranges[0].head, ranges[0].anchor);
1836
+ }
1837
+ vimGlobalState.registerController.pushText(
1838
+ args.registerName, 'change', text,
1839
+ args.linewise, ranges.length > 1);
1840
+ actions.enterInsertMode(cm, {head: finalHead}, cm.state.vim);
1841
+ },
1842
+ // delete is a javascript keyword.
1843
+ 'delete': function(cm, args, ranges) {
1844
+ var finalHead, text;
1845
+ var vim = cm.state.vim;
1846
+ if (!vim.visualBlock) {
1847
+ var anchor = ranges[0].anchor,
1848
+ head = ranges[0].head;
1849
+ if (args.linewise &&
1850
+ head.line != cm.firstLine() &&
1851
+ anchor.line == cm.lastLine() &&
1852
+ anchor.line == head.line - 1) {
1853
+ // Special case for dd on last line (and first line).
1854
+ if (anchor.line == cm.firstLine()) {
1855
+ anchor.ch = 0;
1856
+ } else {
1857
+ anchor = Pos(anchor.line - 1, lineLength(cm, anchor.line - 1));
1858
+ }
1859
+ }
1860
+ text = cm.getRange(anchor, head);
1861
+ cm.replaceRange('', anchor, head);
1862
+ finalHead = anchor;
1863
+ if (args.linewise) {
1864
+ finalHead = motions.moveToFirstNonWhiteSpaceCharacter(cm, anchor);
1865
+ }
1866
+ } else {
1867
+ text = cm.getSelection();
1868
+ var replacement = fillArray('', ranges.length);
1869
+ cm.replaceSelections(replacement);
1870
+ finalHead = ranges[0].anchor;
1871
+ }
1872
+ vimGlobalState.registerController.pushText(
1873
+ args.registerName, 'delete', text,
1874
+ args.linewise, vim.visualBlock);
1875
+ return finalHead;
1876
+ },
1877
+ indent: function(cm, args, ranges) {
1878
+ var vim = cm.state.vim;
1879
+ var startLine = ranges[0].anchor.line;
1880
+ var endLine = vim.visualBlock ?
1881
+ ranges[ranges.length - 1].anchor.line :
1882
+ ranges[0].head.line;
1883
+ // In visual mode, n> shifts the selection right n times, instead of
1884
+ // shifting n lines right once.
1885
+ var repeat = (vim.visualMode) ? args.repeat : 1;
1886
+ if (args.linewise) {
1887
+ // The only way to delete a newline is to delete until the start of
1888
+ // the next line, so in linewise mode evalInput will include the next
1889
+ // line. We don't want this in indent, so we go back a line.
1890
+ endLine--;
1891
+ }
1892
+ for (var i = startLine; i <= endLine; i++) {
1893
+ for (var j = 0; j < repeat; j++) {
1894
+ cm.indentLine(i, args.indentRight);
1895
+ }
1896
+ }
1897
+ return motions.moveToFirstNonWhiteSpaceCharacter(cm, ranges[0].anchor);
1898
+ },
1899
+ changeCase: function(cm, args, ranges, oldAnchor, newHead) {
1900
+ var selections = cm.getSelections();
1901
+ var swapped = [];
1902
+ var toLower = args.toLower;
1903
+ for (var j = 0; j < selections.length; j++) {
1904
+ var toSwap = selections[j];
1905
+ var text = '';
1906
+ if (toLower === true) {
1907
+ text = toSwap.toLowerCase();
1908
+ } else if (toLower === false) {
1909
+ text = toSwap.toUpperCase();
1910
+ } else {
1911
+ for (var i = 0; i < toSwap.length; i++) {
1912
+ var character = toSwap.charAt(i);
1913
+ text += isUpperCase(character) ? character.toLowerCase() :
1914
+ character.toUpperCase();
1915
+ }
1916
+ }
1917
+ swapped.push(text);
1918
+ }
1919
+ cm.replaceSelections(swapped);
1920
+ if (args.shouldMoveCursor){
1921
+ return newHead;
1922
+ } else if (!cm.state.vim.visualMode && args.linewise && ranges[0].anchor.line + 1 == ranges[0].head.line) {
1923
+ return motions.moveToFirstNonWhiteSpaceCharacter(cm, oldAnchor);
1924
+ } else if (args.linewise){
1925
+ return oldAnchor;
1926
+ } else {
1927
+ return cursorMin(ranges[0].anchor, ranges[0].head);
1928
+ }
1929
+ },
1930
+ yank: function(cm, args, ranges, oldAnchor) {
1931
+ var vim = cm.state.vim;
1932
+ var text = cm.getSelection();
1933
+ var endPos = vim.visualMode
1934
+ ? cursorMin(vim.sel.anchor, vim.sel.head, ranges[0].head, ranges[0].anchor)
1935
+ : oldAnchor;
1936
+ vimGlobalState.registerController.pushText(
1937
+ args.registerName, 'yank',
1938
+ text, args.linewise, vim.visualBlock);
1939
+ return endPos;
1940
+ }
1941
+ };
1942
+
1943
+ var actions = {
1944
+ jumpListWalk: function(cm, actionArgs, vim) {
1945
+ if (vim.visualMode) {
1946
+ return;
1947
+ }
1948
+ var repeat = actionArgs.repeat;
1949
+ var forward = actionArgs.forward;
1950
+ var jumpList = vimGlobalState.jumpList;
1951
+
1952
+ var mark = jumpList.move(cm, forward ? repeat : -repeat);
1953
+ var markPos = mark ? mark.find() : undefined;
1954
+ markPos = markPos ? markPos : cm.getCursor();
1955
+ cm.setCursor(markPos);
1956
+ },
1957
+ scroll: function(cm, actionArgs, vim) {
1958
+ if (vim.visualMode) {
1959
+ return;
1960
+ }
1961
+ var repeat = actionArgs.repeat || 1;
1962
+ var lineHeight = cm.defaultTextHeight();
1963
+ var top = cm.getScrollInfo().top;
1964
+ var delta = lineHeight * repeat;
1965
+ var newPos = actionArgs.forward ? top + delta : top - delta;
1966
+ var cursor = copyCursor(cm.getCursor());
1967
+ var cursorCoords = cm.charCoords(cursor, 'local');
1968
+ if (actionArgs.forward) {
1969
+ if (newPos > cursorCoords.top) {
1970
+ cursor.line += (newPos - cursorCoords.top) / lineHeight;
1971
+ cursor.line = Math.ceil(cursor.line);
1972
+ cm.setCursor(cursor);
1973
+ cursorCoords = cm.charCoords(cursor, 'local');
1974
+ cm.scrollTo(null, cursorCoords.top);
1975
+ } else {
1976
+ // Cursor stays within bounds. Just reposition the scroll window.
1977
+ cm.scrollTo(null, newPos);
1978
+ }
1979
+ } else {
1980
+ var newBottom = newPos + cm.getScrollInfo().clientHeight;
1981
+ if (newBottom < cursorCoords.bottom) {
1982
+ cursor.line -= (cursorCoords.bottom - newBottom) / lineHeight;
1983
+ cursor.line = Math.floor(cursor.line);
1984
+ cm.setCursor(cursor);
1985
+ cursorCoords = cm.charCoords(cursor, 'local');
1986
+ cm.scrollTo(
1987
+ null, cursorCoords.bottom - cm.getScrollInfo().clientHeight);
1988
+ } else {
1989
+ // Cursor stays within bounds. Just reposition the scroll window.
1990
+ cm.scrollTo(null, newPos);
1991
+ }
1992
+ }
1993
+ },
1994
+ scrollToCursor: function(cm, actionArgs) {
1995
+ var lineNum = cm.getCursor().line;
1996
+ var charCoords = cm.charCoords(Pos(lineNum, 0), 'local');
1997
+ var height = cm.getScrollInfo().clientHeight;
1998
+ var y = charCoords.top;
1999
+ var lineHeight = charCoords.bottom - y;
2000
+ switch (actionArgs.position) {
2001
+ case 'center': y = y - (height / 2) + lineHeight;
2002
+ break;
2003
+ case 'bottom': y = y - height + lineHeight*1.4;
2004
+ break;
2005
+ case 'top': y = y + lineHeight*0.4;
2006
+ break;
2007
+ }
2008
+ cm.scrollTo(null, y);
2009
+ },
2010
+ replayMacro: function(cm, actionArgs, vim) {
2011
+ var registerName = actionArgs.selectedCharacter;
2012
+ var repeat = actionArgs.repeat;
2013
+ var macroModeState = vimGlobalState.macroModeState;
2014
+ if (registerName == '@') {
2015
+ registerName = macroModeState.latestRegister;
2016
+ }
2017
+ while(repeat--){
2018
+ executeMacroRegister(cm, vim, macroModeState, registerName);
2019
+ }
2020
+ },
2021
+ enterMacroRecordMode: function(cm, actionArgs) {
2022
+ var macroModeState = vimGlobalState.macroModeState;
2023
+ var registerName = actionArgs.selectedCharacter;
2024
+ macroModeState.enterMacroRecordMode(cm, registerName);
2025
+ },
2026
+ enterInsertMode: function(cm, actionArgs, vim) {
2027
+ if (cm.getOption('readOnly')) { return; }
2028
+ vim.insertMode = true;
2029
+ vim.insertModeRepeat = actionArgs && actionArgs.repeat || 1;
2030
+ var insertAt = (actionArgs) ? actionArgs.insertAt : null;
2031
+ var sel = vim.sel;
2032
+ var head = actionArgs.head || cm.getCursor('head');
2033
+ var height = cm.listSelections().length;
2034
+ if (insertAt == 'eol') {
2035
+ head = Pos(head.line, lineLength(cm, head.line));
2036
+ } else if (insertAt == 'charAfter') {
2037
+ head = offsetCursor(head, 0, 1);
2038
+ } else if (insertAt == 'firstNonBlank') {
2039
+ head = motions.moveToFirstNonWhiteSpaceCharacter(cm, head);
2040
+ } else if (insertAt == 'startOfSelectedArea') {
2041
+ if (!vim.visualBlock) {
2042
+ if (sel.head.line < sel.anchor.line) {
2043
+ head = sel.head;
2044
+ } else {
2045
+ head = Pos(sel.anchor.line, 0);
2046
+ }
2047
+ } else {
2048
+ head = Pos(
2049
+ Math.min(sel.head.line, sel.anchor.line),
2050
+ Math.min(sel.head.ch, sel.anchor.ch));
2051
+ height = Math.abs(sel.head.line - sel.anchor.line) + 1;
2052
+ }
2053
+ } else if (insertAt == 'endOfSelectedArea') {
2054
+ if (!vim.visualBlock) {
2055
+ if (sel.head.line >= sel.anchor.line) {
2056
+ head = offsetCursor(sel.head, 0, 1);
2057
+ } else {
2058
+ head = Pos(sel.anchor.line, 0);
2059
+ }
2060
+ } else {
2061
+ head = Pos(
2062
+ Math.min(sel.head.line, sel.anchor.line),
2063
+ Math.max(sel.head.ch + 1, sel.anchor.ch));
2064
+ height = Math.abs(sel.head.line - sel.anchor.line) + 1;
2065
+ }
2066
+ } else if (insertAt == 'inplace') {
2067
+ if (vim.visualMode){
2068
+ return;
2069
+ }
2070
+ }
2071
+ cm.setOption('keyMap', 'vim-insert');
2072
+ cm.setOption('disableInput', false);
2073
+ if (actionArgs && actionArgs.replace) {
2074
+ // Handle Replace-mode as a special case of insert mode.
2075
+ cm.toggleOverwrite(true);
2076
+ cm.setOption('keyMap', 'vim-replace');
2077
+ CodeMirror.signal(cm, "vim-mode-change", {mode: "replace"});
2078
+ } else {
2079
+ cm.setOption('keyMap', 'vim-insert');
2080
+ CodeMirror.signal(cm, "vim-mode-change", {mode: "insert"});
2081
+ }
2082
+ if (!vimGlobalState.macroModeState.isPlaying) {
2083
+ // Only record if not replaying.
2084
+ cm.on('change', onChange);
2085
+ CodeMirror.on(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown);
2086
+ }
2087
+ if (vim.visualMode) {
2088
+ exitVisualMode(cm);
2089
+ }
2090
+ selectForInsert(cm, head, height);
2091
+ },
2092
+ toggleVisualMode: function(cm, actionArgs, vim) {
2093
+ var repeat = actionArgs.repeat;
2094
+ var anchor = cm.getCursor();
2095
+ var head;
2096
+ // TODO: The repeat should actually select number of characters/lines
2097
+ // equal to the repeat times the size of the previous visual
2098
+ // operation.
2099
+ if (!vim.visualMode) {
2100
+ // Entering visual mode
2101
+ vim.visualMode = true;
2102
+ vim.visualLine = !!actionArgs.linewise;
2103
+ vim.visualBlock = !!actionArgs.blockwise;
2104
+ head = clipCursorToContent(
2105
+ cm, Pos(anchor.line, anchor.ch + repeat - 1),
2106
+ true /** includeLineBreak */);
2107
+ vim.sel = {
2108
+ anchor: anchor,
2109
+ head: head
2110
+ };
2111
+ CodeMirror.signal(cm, "vim-mode-change", {mode: "visual", subMode: vim.visualLine ? "linewise" : vim.visualBlock ? "blockwise" : ""});
2112
+ updateCmSelection(cm);
2113
+ updateMark(cm, vim, '<', cursorMin(anchor, head));
2114
+ updateMark(cm, vim, '>', cursorMax(anchor, head));
2115
+ } else if (vim.visualLine ^ actionArgs.linewise ||
2116
+ vim.visualBlock ^ actionArgs.blockwise) {
2117
+ // Toggling between modes
2118
+ vim.visualLine = !!actionArgs.linewise;
2119
+ vim.visualBlock = !!actionArgs.blockwise;
2120
+ CodeMirror.signal(cm, "vim-mode-change", {mode: "visual", subMode: vim.visualLine ? "linewise" : vim.visualBlock ? "blockwise" : ""});
2121
+ updateCmSelection(cm);
2122
+ } else {
2123
+ exitVisualMode(cm);
2124
+ }
2125
+ },
2126
+ reselectLastSelection: function(cm, _actionArgs, vim) {
2127
+ var lastSelection = vim.lastSelection;
2128
+ if (vim.visualMode) {
2129
+ updateLastSelection(cm, vim);
2130
+ }
2131
+ if (lastSelection) {
2132
+ var anchor = lastSelection.anchorMark.find();
2133
+ var head = lastSelection.headMark.find();
2134
+ if (!anchor || !head) {
2135
+ // If the marks have been destroyed due to edits, do nothing.
2136
+ return;
2137
+ }
2138
+ vim.sel = {
2139
+ anchor: anchor,
2140
+ head: head
2141
+ };
2142
+ vim.visualMode = true;
2143
+ vim.visualLine = lastSelection.visualLine;
2144
+ vim.visualBlock = lastSelection.visualBlock;
2145
+ updateCmSelection(cm);
2146
+ updateMark(cm, vim, '<', cursorMin(anchor, head));
2147
+ updateMark(cm, vim, '>', cursorMax(anchor, head));
2148
+ CodeMirror.signal(cm, 'vim-mode-change', {
2149
+ mode: 'visual',
2150
+ subMode: vim.visualLine ? 'linewise' :
2151
+ vim.visualBlock ? 'blockwise' : ''});
2152
+ }
2153
+ },
2154
+ joinLines: function(cm, actionArgs, vim) {
2155
+ var curStart, curEnd;
2156
+ if (vim.visualMode) {
2157
+ curStart = cm.getCursor('anchor');
2158
+ curEnd = cm.getCursor('head');
2159
+ curEnd.ch = lineLength(cm, curEnd.line) - 1;
2160
+ } else {
2161
+ // Repeat is the number of lines to join. Minimum 2 lines.
2162
+ var repeat = Math.max(actionArgs.repeat, 2);
2163
+ curStart = cm.getCursor();
2164
+ curEnd = clipCursorToContent(cm, Pos(curStart.line + repeat - 1,
2165
+ Infinity));
2166
+ }
2167
+ var finalCh = 0;
2168
+ for (var i = curStart.line; i < curEnd.line; i++) {
2169
+ finalCh = lineLength(cm, curStart.line);
2170
+ var tmp = Pos(curStart.line + 1,
2171
+ lineLength(cm, curStart.line + 1));
2172
+ var text = cm.getRange(curStart, tmp);
2173
+ text = text.replace(/\n\s*/g, ' ');
2174
+ cm.replaceRange(text, curStart, tmp);
2175
+ }
2176
+ var curFinalPos = Pos(curStart.line, finalCh);
2177
+ cm.setCursor(curFinalPos);
2178
+ if (vim.visualMode) {
2179
+ exitVisualMode(cm);
2180
+ }
2181
+ },
2182
+ newLineAndEnterInsertMode: function(cm, actionArgs, vim) {
2183
+ vim.insertMode = true;
2184
+ var insertAt = copyCursor(cm.getCursor());
2185
+ if (insertAt.line === cm.firstLine() && !actionArgs.after) {
2186
+ // Special case for inserting newline before start of document.
2187
+ cm.replaceRange('\n', Pos(cm.firstLine(), 0));
2188
+ cm.setCursor(cm.firstLine(), 0);
2189
+ } else {
2190
+ insertAt.line = (actionArgs.after) ? insertAt.line :
2191
+ insertAt.line - 1;
2192
+ insertAt.ch = lineLength(cm, insertAt.line);
2193
+ cm.setCursor(insertAt);
2194
+ var newlineFn = CodeMirror.commands.newlineAndIndentContinueComment ||
2195
+ CodeMirror.commands.newlineAndIndent;
2196
+ newlineFn(cm);
2197
+ }
2198
+ this.enterInsertMode(cm, { repeat: actionArgs.repeat }, vim);
2199
+ },
2200
+ paste: function(cm, actionArgs, vim) {
2201
+ var cur = copyCursor(cm.getCursor());
2202
+ var register = vimGlobalState.registerController.getRegister(
2203
+ actionArgs.registerName);
2204
+ var text = register.toString();
2205
+ if (!text) {
2206
+ return;
2207
+ }
2208
+ if (actionArgs.matchIndent) {
2209
+ var tabSize = cm.getOption("tabSize");
2210
+ // length that considers tabs and tabSize
2211
+ var whitespaceLength = function(str) {
2212
+ var tabs = (str.split("\t").length - 1);
2213
+ var spaces = (str.split(" ").length - 1);
2214
+ return tabs * tabSize + spaces * 1;
2215
+ };
2216
+ var currentLine = cm.getLine(cm.getCursor().line);
2217
+ var indent = whitespaceLength(currentLine.match(/^\s*/)[0]);
2218
+ // chomp last newline b/c don't want it to match /^\s*/gm
2219
+ var chompedText = text.replace(/\n$/, '');
2220
+ var wasChomped = text !== chompedText;
2221
+ var firstIndent = whitespaceLength(text.match(/^\s*/)[0]);
2222
+ var text = chompedText.replace(/^\s*/gm, function(wspace) {
2223
+ var newIndent = indent + (whitespaceLength(wspace) - firstIndent);
2224
+ if (newIndent < 0) {
2225
+ return "";
2226
+ }
2227
+ else if (cm.getOption("indentWithTabs")) {
2228
+ var quotient = Math.floor(newIndent / tabSize);
2229
+ return Array(quotient + 1).join('\t');
2230
+ }
2231
+ else {
2232
+ return Array(newIndent + 1).join(' ');
2233
+ }
2234
+ });
2235
+ text += wasChomped ? "\n" : "";
2236
+ }
2237
+ if (actionArgs.repeat > 1) {
2238
+ var text = Array(actionArgs.repeat + 1).join(text);
2239
+ }
2240
+ var linewise = register.linewise;
2241
+ var blockwise = register.blockwise;
2242
+ if (linewise) {
2243
+ if(vim.visualMode) {
2244
+ text = vim.visualLine ? text.slice(0, -1) : '\n' + text.slice(0, text.length - 1) + '\n';
2245
+ } else if (actionArgs.after) {
2246
+ // Move the newline at the end to the start instead, and paste just
2247
+ // before the newline character of the line we are on right now.
2248
+ text = '\n' + text.slice(0, text.length - 1);
2249
+ cur.ch = lineLength(cm, cur.line);
2250
+ } else {
2251
+ cur.ch = 0;
2252
+ }
2253
+ } else {
2254
+ if (blockwise) {
2255
+ text = text.split('\n');
2256
+ for (var i = 0; i < text.length; i++) {
2257
+ text[i] = (text[i] == '') ? ' ' : text[i];
2258
+ }
2259
+ }
2260
+ cur.ch += actionArgs.after ? 1 : 0;
2261
+ }
2262
+ var curPosFinal;
2263
+ var idx;
2264
+ if (vim.visualMode) {
2265
+ // save the pasted text for reselection if the need arises
2266
+ vim.lastPastedText = text;
2267
+ var lastSelectionCurEnd;
2268
+ var selectedArea = getSelectedAreaRange(cm, vim);
2269
+ var selectionStart = selectedArea[0];
2270
+ var selectionEnd = selectedArea[1];
2271
+ var selectedText = cm.getSelection();
2272
+ var selections = cm.listSelections();
2273
+ var emptyStrings = new Array(selections.length).join('1').split('1');
2274
+ // save the curEnd marker before it get cleared due to cm.replaceRange.
2275
+ if (vim.lastSelection) {
2276
+ lastSelectionCurEnd = vim.lastSelection.headMark.find();
2277
+ }
2278
+ // push the previously selected text to unnamed register
2279
+ vimGlobalState.registerController.unnamedRegister.setText(selectedText);
2280
+ if (blockwise) {
2281
+ // first delete the selected text
2282
+ cm.replaceSelections(emptyStrings);
2283
+ // Set new selections as per the block length of the yanked text
2284
+ selectionEnd = Pos(selectionStart.line + text.length-1, selectionStart.ch);
2285
+ cm.setCursor(selectionStart);
2286
+ selectBlock(cm, selectionEnd);
2287
+ cm.replaceSelections(text);
2288
+ curPosFinal = selectionStart;
2289
+ } else if (vim.visualBlock) {
2290
+ cm.replaceSelections(emptyStrings);
2291
+ cm.setCursor(selectionStart);
2292
+ cm.replaceRange(text, selectionStart, selectionStart);
2293
+ curPosFinal = selectionStart;
2294
+ } else {
2295
+ cm.replaceRange(text, selectionStart, selectionEnd);
2296
+ curPosFinal = cm.posFromIndex(cm.indexFromPos(selectionStart) + text.length - 1);
2297
+ }
2298
+ // restore the the curEnd marker
2299
+ if(lastSelectionCurEnd) {
2300
+ vim.lastSelection.headMark = cm.setBookmark(lastSelectionCurEnd);
2301
+ }
2302
+ if (linewise) {
2303
+ curPosFinal.ch=0;
2304
+ }
2305
+ } else {
2306
+ if (blockwise) {
2307
+ cm.setCursor(cur);
2308
+ for (var i = 0; i < text.length; i++) {
2309
+ var line = cur.line+i;
2310
+ if (line > cm.lastLine()) {
2311
+ cm.replaceRange('\n', Pos(line, 0));
2312
+ }
2313
+ var lastCh = lineLength(cm, line);
2314
+ if (lastCh < cur.ch) {
2315
+ extendLineToColumn(cm, line, cur.ch);
2316
+ }
2317
+ }
2318
+ cm.setCursor(cur);
2319
+ selectBlock(cm, Pos(cur.line + text.length-1, cur.ch));
2320
+ cm.replaceSelections(text);
2321
+ curPosFinal = cur;
2322
+ } else {
2323
+ cm.replaceRange(text, cur);
2324
+ // Now fine tune the cursor to where we want it.
2325
+ if (linewise && actionArgs.after) {
2326
+ curPosFinal = Pos(
2327
+ cur.line + 1,
2328
+ findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line + 1)));
2329
+ } else if (linewise && !actionArgs.after) {
2330
+ curPosFinal = Pos(
2331
+ cur.line,
2332
+ findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line)));
2333
+ } else if (!linewise && actionArgs.after) {
2334
+ idx = cm.indexFromPos(cur);
2335
+ curPosFinal = cm.posFromIndex(idx + text.length - 1);
2336
+ } else {
2337
+ idx = cm.indexFromPos(cur);
2338
+ curPosFinal = cm.posFromIndex(idx + text.length);
2339
+ }
2340
+ }
2341
+ }
2342
+ if (vim.visualMode) {
2343
+ exitVisualMode(cm);
2344
+ }
2345
+ cm.setCursor(curPosFinal);
2346
+ },
2347
+ undo: function(cm, actionArgs) {
2348
+ cm.operation(function() {
2349
+ repeatFn(cm, CodeMirror.commands.undo, actionArgs.repeat)();
2350
+ cm.setCursor(cm.getCursor('anchor'));
2351
+ });
2352
+ },
2353
+ redo: function(cm, actionArgs) {
2354
+ repeatFn(cm, CodeMirror.commands.redo, actionArgs.repeat)();
2355
+ },
2356
+ setRegister: function(_cm, actionArgs, vim) {
2357
+ vim.inputState.registerName = actionArgs.selectedCharacter;
2358
+ },
2359
+ setMark: function(cm, actionArgs, vim) {
2360
+ var markName = actionArgs.selectedCharacter;
2361
+ updateMark(cm, vim, markName, cm.getCursor());
2362
+ },
2363
+ replace: function(cm, actionArgs, vim) {
2364
+ var replaceWith = actionArgs.selectedCharacter;
2365
+ var curStart = cm.getCursor();
2366
+ var replaceTo;
2367
+ var curEnd;
2368
+ var selections = cm.listSelections();
2369
+ if (vim.visualMode) {
2370
+ curStart = cm.getCursor('start');
2371
+ curEnd = cm.getCursor('end');
2372
+ } else {
2373
+ var line = cm.getLine(curStart.line);
2374
+ replaceTo = curStart.ch + actionArgs.repeat;
2375
+ if (replaceTo > line.length) {
2376
+ replaceTo=line.length;
2377
+ }
2378
+ curEnd = Pos(curStart.line, replaceTo);
2379
+ }
2380
+ if (replaceWith=='\n') {
2381
+ if (!vim.visualMode) cm.replaceRange('', curStart, curEnd);
2382
+ // special case, where vim help says to replace by just one line-break
2383
+ (CodeMirror.commands.newlineAndIndentContinueComment || CodeMirror.commands.newlineAndIndent)(cm);
2384
+ } else {
2385
+ var replaceWithStr = cm.getRange(curStart, curEnd);
2386
+ //replace all characters in range by selected, but keep linebreaks
2387
+ replaceWithStr = replaceWithStr.replace(/[^\n]/g, replaceWith);
2388
+ if (vim.visualBlock) {
2389
+ // Tabs are split in visua block before replacing
2390
+ var spaces = new Array(cm.getOption("tabSize")+1).join(' ');
2391
+ replaceWithStr = cm.getSelection();
2392
+ replaceWithStr = replaceWithStr.replace(/\t/g, spaces).replace(/[^\n]/g, replaceWith).split('\n');
2393
+ cm.replaceSelections(replaceWithStr);
2394
+ } else {
2395
+ cm.replaceRange(replaceWithStr, curStart, curEnd);
2396
+ }
2397
+ if (vim.visualMode) {
2398
+ curStart = cursorIsBefore(selections[0].anchor, selections[0].head) ?
2399
+ selections[0].anchor : selections[0].head;
2400
+ cm.setCursor(curStart);
2401
+ exitVisualMode(cm);
2402
+ } else {
2403
+ cm.setCursor(offsetCursor(curEnd, 0, -1));
2404
+ }
2405
+ }
2406
+ },
2407
+ incrementNumberToken: function(cm, actionArgs) {
2408
+ var cur = cm.getCursor();
2409
+ var lineStr = cm.getLine(cur.line);
2410
+ var re = /-?\d+/g;
2411
+ var match;
2412
+ var start;
2413
+ var end;
2414
+ var numberStr;
2415
+ var token;
2416
+ while ((match = re.exec(lineStr)) !== null) {
2417
+ token = match[0];
2418
+ start = match.index;
2419
+ end = start + token.length;
2420
+ if (cur.ch < end)break;
2421
+ }
2422
+ if (!actionArgs.backtrack && (end <= cur.ch))return;
2423
+ if (token) {
2424
+ var increment = actionArgs.increase ? 1 : -1;
2425
+ var number = parseInt(token) + (increment * actionArgs.repeat);
2426
+ var from = Pos(cur.line, start);
2427
+ var to = Pos(cur.line, end);
2428
+ numberStr = number.toString();
2429
+ cm.replaceRange(numberStr, from, to);
2430
+ } else {
2431
+ return;
2432
+ }
2433
+ cm.setCursor(Pos(cur.line, start + numberStr.length - 1));
2434
+ },
2435
+ repeatLastEdit: function(cm, actionArgs, vim) {
2436
+ var lastEditInputState = vim.lastEditInputState;
2437
+ if (!lastEditInputState) { return; }
2438
+ var repeat = actionArgs.repeat;
2439
+ if (repeat && actionArgs.repeatIsExplicit) {
2440
+ vim.lastEditInputState.repeatOverride = repeat;
2441
+ } else {
2442
+ repeat = vim.lastEditInputState.repeatOverride || repeat;
2443
+ }
2444
+ repeatLastEdit(cm, vim, repeat, false /** repeatForInsert */);
2445
+ },
2446
+ exitInsertMode: exitInsertMode
2447
+ };
2448
+
2449
+ /*
2450
+ * Below are miscellaneous utility functions used by vim.js
2451
+ */
2452
+
2453
+ /**
2454
+ * Clips cursor to ensure that line is within the buffer's range
2455
+ * If includeLineBreak is true, then allow cur.ch == lineLength.
2456
+ */
2457
+ function clipCursorToContent(cm, cur, includeLineBreak) {
2458
+ var line = Math.min(Math.max(cm.firstLine(), cur.line), cm.lastLine() );
2459
+ var maxCh = lineLength(cm, line) - 1;
2460
+ maxCh = (includeLineBreak) ? maxCh + 1 : maxCh;
2461
+ var ch = Math.min(Math.max(0, cur.ch), maxCh);
2462
+ return Pos(line, ch);
2463
+ }
2464
+ function copyArgs(args) {
2465
+ var ret = {};
2466
+ for (var prop in args) {
2467
+ if (args.hasOwnProperty(prop)) {
2468
+ ret[prop] = args[prop];
2469
+ }
2470
+ }
2471
+ return ret;
2472
+ }
2473
+ function offsetCursor(cur, offsetLine, offsetCh) {
2474
+ if (typeof offsetLine === 'object') {
2475
+ offsetCh = offsetLine.ch;
2476
+ offsetLine = offsetLine.line;
2477
+ }
2478
+ return Pos(cur.line + offsetLine, cur.ch + offsetCh);
2479
+ }
2480
+ function getOffset(anchor, head) {
2481
+ return {
2482
+ line: head.line - anchor.line,
2483
+ ch: head.line - anchor.line
2484
+ };
2485
+ }
2486
+ function commandMatches(keys, keyMap, context, inputState) {
2487
+ // Partial matches are not applied. They inform the key handler
2488
+ // that the current key sequence is a subsequence of a valid key
2489
+ // sequence, so that the key buffer is not cleared.
2490
+ var match, partial = [], full = [];
2491
+ for (var i = 0; i < keyMap.length; i++) {
2492
+ var command = keyMap[i];
2493
+ if (context == 'insert' && command.context != 'insert' ||
2494
+ command.context && command.context != context ||
2495
+ inputState.operator && command.type == 'action' ||
2496
+ !(match = commandMatch(keys, command.keys))) { continue; }
2497
+ if (match == 'partial') { partial.push(command); }
2498
+ if (match == 'full') { full.push(command); }
2499
+ }
2500
+ return {
2501
+ partial: partial.length && partial,
2502
+ full: full.length && full
2503
+ };
2504
+ }
2505
+ function commandMatch(pressed, mapped) {
2506
+ if (mapped.slice(-11) == '<character>') {
2507
+ // Last character matches anything.
2508
+ var prefixLen = mapped.length - 11;
2509
+ var pressedPrefix = pressed.slice(0, prefixLen);
2510
+ var mappedPrefix = mapped.slice(0, prefixLen);
2511
+ return pressedPrefix == mappedPrefix && pressed.length > prefixLen ? 'full' :
2512
+ mappedPrefix.indexOf(pressedPrefix) == 0 ? 'partial' : false;
2513
+ } else {
2514
+ return pressed == mapped ? 'full' :
2515
+ mapped.indexOf(pressed) == 0 ? 'partial' : false;
2516
+ }
2517
+ }
2518
+ function lastChar(keys) {
2519
+ var match = /^.*(<[\w\-]+>)$/.exec(keys);
2520
+ var selectedCharacter = match ? match[1] : keys.slice(-1);
2521
+ if (selectedCharacter.length > 1){
2522
+ switch(selectedCharacter){
2523
+ case '<CR>':
2524
+ selectedCharacter='\n';
2525
+ break;
2526
+ case '<Space>':
2527
+ selectedCharacter=' ';
2528
+ break;
2529
+ default:
2530
+ break;
2531
+ }
2532
+ }
2533
+ return selectedCharacter;
2534
+ }
2535
+ function repeatFn(cm, fn, repeat) {
2536
+ return function() {
2537
+ for (var i = 0; i < repeat; i++) {
2538
+ fn(cm);
2539
+ }
2540
+ };
2541
+ }
2542
+ function copyCursor(cur) {
2543
+ return Pos(cur.line, cur.ch);
2544
+ }
2545
+ function cursorEqual(cur1, cur2) {
2546
+ return cur1.ch == cur2.ch && cur1.line == cur2.line;
2547
+ }
2548
+ function cursorIsBefore(cur1, cur2) {
2549
+ if (cur1.line < cur2.line) {
2550
+ return true;
2551
+ }
2552
+ if (cur1.line == cur2.line && cur1.ch < cur2.ch) {
2553
+ return true;
2554
+ }
2555
+ return false;
2556
+ }
2557
+ function cursorMin(cur1, cur2) {
2558
+ if (arguments.length > 2) {
2559
+ cur2 = cursorMin.apply(undefined, Array.prototype.slice.call(arguments, 1));
2560
+ }
2561
+ return cursorIsBefore(cur1, cur2) ? cur1 : cur2;
2562
+ }
2563
+ function cursorMax(cur1, cur2) {
2564
+ if (arguments.length > 2) {
2565
+ cur2 = cursorMax.apply(undefined, Array.prototype.slice.call(arguments, 1));
2566
+ }
2567
+ return cursorIsBefore(cur1, cur2) ? cur2 : cur1;
2568
+ }
2569
+ function cursorIsBetween(cur1, cur2, cur3) {
2570
+ // returns true if cur2 is between cur1 and cur3.
2571
+ var cur1before2 = cursorIsBefore(cur1, cur2);
2572
+ var cur2before3 = cursorIsBefore(cur2, cur3);
2573
+ return cur1before2 && cur2before3;
2574
+ }
2575
+ function lineLength(cm, lineNum) {
2576
+ return cm.getLine(lineNum).length;
2577
+ }
2578
+ function reverse(s){
2579
+ return s.split('').reverse().join('');
2580
+ }
2581
+ function trim(s) {
2582
+ if (s.trim) {
2583
+ return s.trim();
2584
+ }
2585
+ return s.replace(/^\s+|\s+$/g, '');
2586
+ }
2587
+ function escapeRegex(s) {
2588
+ return s.replace(/([.?*+$\[\]\/\\(){}|\-])/g, '\\$1');
2589
+ }
2590
+ function extendLineToColumn(cm, lineNum, column) {
2591
+ var endCh = lineLength(cm, lineNum);
2592
+ var spaces = new Array(column-endCh+1).join(' ');
2593
+ cm.setCursor(Pos(lineNum, endCh));
2594
+ cm.replaceRange(spaces, cm.getCursor());
2595
+ }
2596
+ // This functions selects a rectangular block
2597
+ // of text with selectionEnd as any of its corner
2598
+ // Height of block:
2599
+ // Difference in selectionEnd.line and first/last selection.line
2600
+ // Width of the block:
2601
+ // Distance between selectionEnd.ch and any(first considered here) selection.ch
2602
+ function selectBlock(cm, selectionEnd) {
2603
+ var selections = [], ranges = cm.listSelections();
2604
+ var head = copyCursor(cm.clipPos(selectionEnd));
2605
+ var isClipped = !cursorEqual(selectionEnd, head);
2606
+ var curHead = cm.getCursor('head');
2607
+ var primIndex = getIndex(ranges, curHead);
2608
+ var wasClipped = cursorEqual(ranges[primIndex].head, ranges[primIndex].anchor);
2609
+ var max = ranges.length - 1;
2610
+ var index = max - primIndex > primIndex ? max : 0;
2611
+ var base = ranges[index].anchor;
2612
+
2613
+ var firstLine = Math.min(base.line, head.line);
2614
+ var lastLine = Math.max(base.line, head.line);
2615
+ var baseCh = base.ch, headCh = head.ch;
2616
+
2617
+ var dir = ranges[index].head.ch - baseCh;
2618
+ var newDir = headCh - baseCh;
2619
+ if (dir > 0 && newDir <= 0) {
2620
+ baseCh++;
2621
+ if (!isClipped) { headCh--; }
2622
+ } else if (dir < 0 && newDir >= 0) {
2623
+ baseCh--;
2624
+ if (!wasClipped) { headCh++; }
2625
+ } else if (dir < 0 && newDir == -1) {
2626
+ baseCh--;
2627
+ headCh++;
2628
+ }
2629
+ for (var line = firstLine; line <= lastLine; line++) {
2630
+ var range = {anchor: new Pos(line, baseCh), head: new Pos(line, headCh)};
2631
+ selections.push(range);
2632
+ }
2633
+ primIndex = head.line == lastLine ? selections.length - 1 : 0;
2634
+ cm.setSelections(selections);
2635
+ selectionEnd.ch = headCh;
2636
+ base.ch = baseCh;
2637
+ return base;
2638
+ }
2639
+ function selectForInsert(cm, head, height) {
2640
+ var sel = [];
2641
+ for (var i = 0; i < height; i++) {
2642
+ var lineHead = offsetCursor(head, i, 0);
2643
+ sel.push({anchor: lineHead, head: lineHead});
2644
+ }
2645
+ cm.setSelections(sel, 0);
2646
+ }
2647
+ // getIndex returns the index of the cursor in the selections.
2648
+ function getIndex(ranges, cursor, end) {
2649
+ for (var i = 0; i < ranges.length; i++) {
2650
+ var atAnchor = end != 'head' && cursorEqual(ranges[i].anchor, cursor);
2651
+ var atHead = end != 'anchor' && cursorEqual(ranges[i].head, cursor);
2652
+ if (atAnchor || atHead) {
2653
+ return i;
2654
+ }
2655
+ }
2656
+ return -1;
2657
+ }
2658
+ function getSelectedAreaRange(cm, vim) {
2659
+ var lastSelection = vim.lastSelection;
2660
+ var getCurrentSelectedAreaRange = function() {
2661
+ var selections = cm.listSelections();
2662
+ var start = selections[0];
2663
+ var end = selections[selections.length-1];
2664
+ var selectionStart = cursorIsBefore(start.anchor, start.head) ? start.anchor : start.head;
2665
+ var selectionEnd = cursorIsBefore(end.anchor, end.head) ? end.head : end.anchor;
2666
+ return [selectionStart, selectionEnd];
2667
+ };
2668
+ var getLastSelectedAreaRange = function() {
2669
+ var selectionStart = cm.getCursor();
2670
+ var selectionEnd = cm.getCursor();
2671
+ var block = lastSelection.visualBlock;
2672
+ if (block) {
2673
+ var width = block.width;
2674
+ var height = block.height;
2675
+ selectionEnd = Pos(selectionStart.line + height, selectionStart.ch + width);
2676
+ var selections = [];
2677
+ // selectBlock creates a 'proper' rectangular block.
2678
+ // We do not want that in all cases, so we manually set selections.
2679
+ for (var i = selectionStart.line; i < selectionEnd.line; i++) {
2680
+ var anchor = Pos(i, selectionStart.ch);
2681
+ var head = Pos(i, selectionEnd.ch);
2682
+ var range = {anchor: anchor, head: head};
2683
+ selections.push(range);
2684
+ }
2685
+ cm.setSelections(selections);
2686
+ } else {
2687
+ var start = lastSelection.anchorMark.find();
2688
+ var end = lastSelection.headMark.find();
2689
+ var line = end.line - start.line;
2690
+ var ch = end.ch - start.ch;
2691
+ selectionEnd = {line: selectionEnd.line + line, ch: line ? selectionEnd.ch : ch + selectionEnd.ch};
2692
+ if (lastSelection.visualLine) {
2693
+ selectionStart = Pos(selectionStart.line, 0);
2694
+ selectionEnd = Pos(selectionEnd.line, lineLength(cm, selectionEnd.line));
2695
+ }
2696
+ cm.setSelection(selectionStart, selectionEnd);
2697
+ }
2698
+ return [selectionStart, selectionEnd];
2699
+ };
2700
+ if (!vim.visualMode) {
2701
+ // In case of replaying the action.
2702
+ return getLastSelectedAreaRange();
2703
+ } else {
2704
+ return getCurrentSelectedAreaRange();
2705
+ }
2706
+ }
2707
+ // Updates the previous selection with the current selection's values. This
2708
+ // should only be called in visual mode.
2709
+ function updateLastSelection(cm, vim) {
2710
+ var anchor = vim.sel.anchor;
2711
+ var head = vim.sel.head;
2712
+ // To accommodate the effect of lastPastedText in the last selection
2713
+ if (vim.lastPastedText) {
2714
+ head = cm.posFromIndex(cm.indexFromPos(anchor) + vim.lastPastedText.length);
2715
+ vim.lastPastedText = null;
2716
+ }
2717
+ vim.lastSelection = {'anchorMark': cm.setBookmark(anchor),
2718
+ 'headMark': cm.setBookmark(head),
2719
+ 'anchor': copyCursor(anchor),
2720
+ 'head': copyCursor(head),
2721
+ 'visualMode': vim.visualMode,
2722
+ 'visualLine': vim.visualLine,
2723
+ 'visualBlock': vim.visualBlock};
2724
+ }
2725
+ function expandSelection(cm, start, end) {
2726
+ var sel = cm.state.vim.sel;
2727
+ var head = sel.head;
2728
+ var anchor = sel.anchor;
2729
+ var tmp;
2730
+ if (cursorIsBefore(end, start)) {
2731
+ tmp = end;
2732
+ end = start;
2733
+ start = tmp;
2734
+ }
2735
+ if (cursorIsBefore(head, anchor)) {
2736
+ head = cursorMin(start, head);
2737
+ anchor = cursorMax(anchor, end);
2738
+ } else {
2739
+ anchor = cursorMin(start, anchor);
2740
+ head = cursorMax(head, end);
2741
+ head = offsetCursor(head, 0, -1);
2742
+ if (head.ch == -1 && head.line != cm.firstLine()) {
2743
+ head = Pos(head.line - 1, lineLength(cm, head.line - 1));
2744
+ }
2745
+ }
2746
+ return [anchor, head];
2747
+ }
2748
+ /**
2749
+ * Updates the CodeMirror selection to match the provided vim selection.
2750
+ * If no arguments are given, it uses the current vim selection state.
2751
+ */
2752
+ function updateCmSelection(cm, sel, mode) {
2753
+ var vim = cm.state.vim;
2754
+ sel = sel || vim.sel;
2755
+ var mode = mode ||
2756
+ vim.visualLine ? 'line' : vim.visualBlock ? 'block' : 'char';
2757
+ var cmSel = makeCmSelection(cm, sel, mode);
2758
+ cm.setSelections(cmSel.ranges, cmSel.primary);
2759
+ updateFakeCursor(cm);
2760
+ }
2761
+ function makeCmSelection(cm, sel, mode, exclusive) {
2762
+ var head = copyCursor(sel.head);
2763
+ var anchor = copyCursor(sel.anchor);
2764
+ if (mode == 'char') {
2765
+ var headOffset = !exclusive && !cursorIsBefore(sel.head, sel.anchor) ? 1 : 0;
2766
+ var anchorOffset = cursorIsBefore(sel.head, sel.anchor) ? 1 : 0;
2767
+ head = offsetCursor(sel.head, 0, headOffset);
2768
+ anchor = offsetCursor(sel.anchor, 0, anchorOffset);
2769
+ return {
2770
+ ranges: [{anchor: anchor, head: head}],
2771
+ primary: 0
2772
+ };
2773
+ } else if (mode == 'line') {
2774
+ if (!cursorIsBefore(sel.head, sel.anchor)) {
2775
+ anchor.ch = 0;
2776
+
2777
+ var lastLine = cm.lastLine();
2778
+ if (head.line > lastLine) {
2779
+ head.line = lastLine;
2780
+ }
2781
+ head.ch = lineLength(cm, head.line);
2782
+ } else {
2783
+ head.ch = 0;
2784
+ anchor.ch = lineLength(cm, anchor.line);
2785
+ }
2786
+ return {
2787
+ ranges: [{anchor: anchor, head: head}],
2788
+ primary: 0
2789
+ };
2790
+ } else if (mode == 'block') {
2791
+ var top = Math.min(anchor.line, head.line),
2792
+ left = Math.min(anchor.ch, head.ch),
2793
+ bottom = Math.max(anchor.line, head.line),
2794
+ right = Math.max(anchor.ch, head.ch) + 1;
2795
+ var height = bottom - top + 1;
2796
+ var primary = head.line == top ? 0 : height - 1;
2797
+ var ranges = [];
2798
+ for (var i = 0; i < height; i++) {
2799
+ ranges.push({
2800
+ anchor: Pos(top + i, left),
2801
+ head: Pos(top + i, right)
2802
+ });
2803
+ }
2804
+ return {
2805
+ ranges: ranges,
2806
+ primary: primary
2807
+ };
2808
+ }
2809
+ }
2810
+ function getHead(cm) {
2811
+ var cur = cm.getCursor('head');
2812
+ if (cm.getSelection().length == 1) {
2813
+ // Small corner case when only 1 character is selected. The "real"
2814
+ // head is the left of head and anchor.
2815
+ cur = cursorMin(cur, cm.getCursor('anchor'));
2816
+ }
2817
+ return cur;
2818
+ }
2819
+
2820
+ /**
2821
+ * If moveHead is set to false, the CodeMirror selection will not be
2822
+ * touched. The caller assumes the responsibility of putting the cursor
2823
+ * in the right place.
2824
+ */
2825
+ function exitVisualMode(cm, moveHead) {
2826
+ var vim = cm.state.vim;
2827
+ if (moveHead !== false) {
2828
+ cm.setCursor(clipCursorToContent(cm, vim.sel.head));
2829
+ }
2830
+ updateLastSelection(cm, vim);
2831
+ vim.visualMode = false;
2832
+ vim.visualLine = false;
2833
+ vim.visualBlock = false;
2834
+ CodeMirror.signal(cm, "vim-mode-change", {mode: "normal"});
2835
+ if (vim.fakeCursor) {
2836
+ vim.fakeCursor.clear();
2837
+ }
2838
+ }
2839
+
2840
+ // Remove any trailing newlines from the selection. For
2841
+ // example, with the caret at the start of the last word on the line,
2842
+ // 'dw' should word, but not the newline, while 'w' should advance the
2843
+ // caret to the first character of the next line.
2844
+ function clipToLine(cm, curStart, curEnd) {
2845
+ var selection = cm.getRange(curStart, curEnd);
2846
+ // Only clip if the selection ends with trailing newline + whitespace
2847
+ if (/\n\s*$/.test(selection)) {
2848
+ var lines = selection.split('\n');
2849
+ // We know this is all whitepsace.
2850
+ lines.pop();
2851
+
2852
+ // Cases:
2853
+ // 1. Last word is an empty line - do not clip the trailing '\n'
2854
+ // 2. Last word is not an empty line - clip the trailing '\n'
2855
+ var line;
2856
+ // Find the line containing the last word, and clip all whitespace up
2857
+ // to it.
2858
+ for (var line = lines.pop(); lines.length > 0 && line && isWhiteSpaceString(line); line = lines.pop()) {
2859
+ curEnd.line--;
2860
+ curEnd.ch = 0;
2861
+ }
2862
+ // If the last word is not an empty line, clip an additional newline
2863
+ if (line) {
2864
+ curEnd.line--;
2865
+ curEnd.ch = lineLength(cm, curEnd.line);
2866
+ } else {
2867
+ curEnd.ch = 0;
2868
+ }
2869
+ }
2870
+ }
2871
+
2872
+ // Expand the selection to line ends.
2873
+ function expandSelectionToLine(_cm, curStart, curEnd) {
2874
+ curStart.ch = 0;
2875
+ curEnd.ch = 0;
2876
+ curEnd.line++;
2877
+ }
2878
+
2879
+ function findFirstNonWhiteSpaceCharacter(text) {
2880
+ if (!text) {
2881
+ return 0;
2882
+ }
2883
+ var firstNonWS = text.search(/\S/);
2884
+ return firstNonWS == -1 ? text.length : firstNonWS;
2885
+ }
2886
+
2887
+ function expandWordUnderCursor(cm, inclusive, _forward, bigWord, noSymbol) {
2888
+ var cur = getHead(cm);
2889
+ var line = cm.getLine(cur.line);
2890
+ var idx = cur.ch;
2891
+
2892
+ // Seek to first word or non-whitespace character, depending on if
2893
+ // noSymbol is true.
2894
+ var textAfterIdx = line.substring(idx);
2895
+ var firstMatchedChar;
2896
+ if (noSymbol) {
2897
+ firstMatchedChar = textAfterIdx.search(/\w/);
2898
+ } else {
2899
+ firstMatchedChar = textAfterIdx.search(/\S/);
2900
+ }
2901
+ if (firstMatchedChar == -1) {
2902
+ return null;
2903
+ }
2904
+ idx += firstMatchedChar;
2905
+ textAfterIdx = line.substring(idx);
2906
+ var textBeforeIdx = line.substring(0, idx);
2907
+
2908
+ var matchRegex;
2909
+ // Greedy matchers for the "word" we are trying to expand.
2910
+ if (bigWord) {
2911
+ matchRegex = /^\S+/;
2912
+ } else {
2913
+ if ((/\w/).test(line.charAt(idx))) {
2914
+ matchRegex = /^\w+/;
2915
+ } else {
2916
+ matchRegex = /^[^\w\s]+/;
2917
+ }
2918
+ }
2919
+
2920
+ var wordAfterRegex = matchRegex.exec(textAfterIdx);
2921
+ var wordStart = idx;
2922
+ var wordEnd = idx + wordAfterRegex[0].length;
2923
+ // TODO: Find a better way to do this. It will be slow on very long lines.
2924
+ var revTextBeforeIdx = reverse(textBeforeIdx);
2925
+ var wordBeforeRegex = matchRegex.exec(revTextBeforeIdx);
2926
+ if (wordBeforeRegex) {
2927
+ wordStart -= wordBeforeRegex[0].length;
2928
+ }
2929
+
2930
+ if (inclusive) {
2931
+ // If present, trim all whitespace after word.
2932
+ // Otherwise, trim all whitespace before word.
2933
+ var textAfterWordEnd = line.substring(wordEnd);
2934
+ var whitespacesAfterWord = textAfterWordEnd.match(/^\s*/)[0].length;
2935
+ if (whitespacesAfterWord > 0) {
2936
+ wordEnd += whitespacesAfterWord;
2937
+ } else {
2938
+ var revTrim = revTextBeforeIdx.length - wordStart;
2939
+ var textBeforeWordStart = revTextBeforeIdx.substring(revTrim);
2940
+ var whitespacesBeforeWord = textBeforeWordStart.match(/^\s*/)[0].length;
2941
+ wordStart -= whitespacesBeforeWord;
2942
+ }
2943
+ }
2944
+
2945
+ return { start: Pos(cur.line, wordStart),
2946
+ end: Pos(cur.line, wordEnd) };
2947
+ }
2948
+
2949
+ function recordJumpPosition(cm, oldCur, newCur) {
2950
+ if (!cursorEqual(oldCur, newCur)) {
2951
+ vimGlobalState.jumpList.add(cm, oldCur, newCur);
2952
+ }
2953
+ }
2954
+
2955
+ function recordLastCharacterSearch(increment, args) {
2956
+ vimGlobalState.lastChararacterSearch.increment = increment;
2957
+ vimGlobalState.lastChararacterSearch.forward = args.forward;
2958
+ vimGlobalState.lastChararacterSearch.selectedCharacter = args.selectedCharacter;
2959
+ }
2960
+
2961
+ var symbolToMode = {
2962
+ '(': 'bracket', ')': 'bracket', '{': 'bracket', '}': 'bracket',
2963
+ '[': 'section', ']': 'section',
2964
+ '*': 'comment', '/': 'comment',
2965
+ 'm': 'method', 'M': 'method',
2966
+ '#': 'preprocess'
2967
+ };
2968
+ var findSymbolModes = {
2969
+ bracket: {
2970
+ isComplete: function(state) {
2971
+ if (state.nextCh === state.symb) {
2972
+ state.depth++;
2973
+ if (state.depth >= 1)return true;
2974
+ } else if (state.nextCh === state.reverseSymb) {
2975
+ state.depth--;
2976
+ }
2977
+ return false;
2978
+ }
2979
+ },
2980
+ section: {
2981
+ init: function(state) {
2982
+ state.curMoveThrough = true;
2983
+ state.symb = (state.forward ? ']' : '[') === state.symb ? '{' : '}';
2984
+ },
2985
+ isComplete: function(state) {
2986
+ return state.index === 0 && state.nextCh === state.symb;
2987
+ }
2988
+ },
2989
+ comment: {
2990
+ isComplete: function(state) {
2991
+ var found = state.lastCh === '*' && state.nextCh === '/';
2992
+ state.lastCh = state.nextCh;
2993
+ return found;
2994
+ }
2995
+ },
2996
+ // TODO: The original Vim implementation only operates on level 1 and 2.
2997
+ // The current implementation doesn't check for code block level and
2998
+ // therefore it operates on any levels.
2999
+ method: {
3000
+ init: function(state) {
3001
+ state.symb = (state.symb === 'm' ? '{' : '}');
3002
+ state.reverseSymb = state.symb === '{' ? '}' : '{';
3003
+ },
3004
+ isComplete: function(state) {
3005
+ if (state.nextCh === state.symb)return true;
3006
+ return false;
3007
+ }
3008
+ },
3009
+ preprocess: {
3010
+ init: function(state) {
3011
+ state.index = 0;
3012
+ },
3013
+ isComplete: function(state) {
3014
+ if (state.nextCh === '#') {
3015
+ var token = state.lineText.match(/#(\w+)/)[1];
3016
+ if (token === 'endif') {
3017
+ if (state.forward && state.depth === 0) {
3018
+ return true;
3019
+ }
3020
+ state.depth++;
3021
+ } else if (token === 'if') {
3022
+ if (!state.forward && state.depth === 0) {
3023
+ return true;
3024
+ }
3025
+ state.depth--;
3026
+ }
3027
+ if (token === 'else' && state.depth === 0)return true;
3028
+ }
3029
+ return false;
3030
+ }
3031
+ }
3032
+ };
3033
+ function findSymbol(cm, repeat, forward, symb) {
3034
+ var cur = copyCursor(cm.getCursor());
3035
+ var increment = forward ? 1 : -1;
3036
+ var endLine = forward ? cm.lineCount() : -1;
3037
+ var curCh = cur.ch;
3038
+ var line = cur.line;
3039
+ var lineText = cm.getLine(line);
3040
+ var state = {
3041
+ lineText: lineText,
3042
+ nextCh: lineText.charAt(curCh),
3043
+ lastCh: null,
3044
+ index: curCh,
3045
+ symb: symb,
3046
+ reverseSymb: (forward ? { ')': '(', '}': '{' } : { '(': ')', '{': '}' })[symb],
3047
+ forward: forward,
3048
+ depth: 0,
3049
+ curMoveThrough: false
3050
+ };
3051
+ var mode = symbolToMode[symb];
3052
+ if (!mode)return cur;
3053
+ var init = findSymbolModes[mode].init;
3054
+ var isComplete = findSymbolModes[mode].isComplete;
3055
+ if (init) { init(state); }
3056
+ while (line !== endLine && repeat) {
3057
+ state.index += increment;
3058
+ state.nextCh = state.lineText.charAt(state.index);
3059
+ if (!state.nextCh) {
3060
+ line += increment;
3061
+ state.lineText = cm.getLine(line) || '';
3062
+ if (increment > 0) {
3063
+ state.index = 0;
3064
+ } else {
3065
+ var lineLen = state.lineText.length;
3066
+ state.index = (lineLen > 0) ? (lineLen-1) : 0;
3067
+ }
3068
+ state.nextCh = state.lineText.charAt(state.index);
3069
+ }
3070
+ if (isComplete(state)) {
3071
+ cur.line = line;
3072
+ cur.ch = state.index;
3073
+ repeat--;
3074
+ }
3075
+ }
3076
+ if (state.nextCh || state.curMoveThrough) {
3077
+ return Pos(line, state.index);
3078
+ }
3079
+ return cur;
3080
+ }
3081
+
3082
+ /*
3083
+ * Returns the boundaries of the next word. If the cursor in the middle of
3084
+ * the word, then returns the boundaries of the current word, starting at
3085
+ * the cursor. If the cursor is at the start/end of a word, and we are going
3086
+ * forward/backward, respectively, find the boundaries of the next word.
3087
+ *
3088
+ * @param {CodeMirror} cm CodeMirror object.
3089
+ * @param {Cursor} cur The cursor position.
3090
+ * @param {boolean} forward True to search forward. False to search
3091
+ * backward.
3092
+ * @param {boolean} bigWord True if punctuation count as part of the word.
3093
+ * False if only [a-zA-Z0-9] characters count as part of the word.
3094
+ * @param {boolean} emptyLineIsWord True if empty lines should be treated
3095
+ * as words.
3096
+ * @return {Object{from:number, to:number, line: number}} The boundaries of
3097
+ * the word, or null if there are no more words.
3098
+ */
3099
+ function findWord(cm, cur, forward, bigWord, emptyLineIsWord) {
3100
+ var lineNum = cur.line;
3101
+ var pos = cur.ch;
3102
+ var line = cm.getLine(lineNum);
3103
+ var dir = forward ? 1 : -1;
3104
+ var regexps = bigWord ? bigWordRegexp : wordRegexp;
3105
+
3106
+ if (emptyLineIsWord && line == '') {
3107
+ lineNum += dir;
3108
+ line = cm.getLine(lineNum);
3109
+ if (!isLine(cm, lineNum)) {
3110
+ return null;
3111
+ }
3112
+ pos = (forward) ? 0 : line.length;
3113
+ }
3114
+
3115
+ while (true) {
3116
+ if (emptyLineIsWord && line == '') {
3117
+ return { from: 0, to: 0, line: lineNum };
3118
+ }
3119
+ var stop = (dir > 0) ? line.length : -1;
3120
+ var wordStart = stop, wordEnd = stop;
3121
+ // Find bounds of next word.
3122
+ while (pos != stop) {
3123
+ var foundWord = false;
3124
+ for (var i = 0; i < regexps.length && !foundWord; ++i) {
3125
+ if (regexps[i].test(line.charAt(pos))) {
3126
+ wordStart = pos;
3127
+ // Advance to end of word.
3128
+ while (pos != stop && regexps[i].test(line.charAt(pos))) {
3129
+ pos += dir;
3130
+ }
3131
+ wordEnd = pos;
3132
+ foundWord = wordStart != wordEnd;
3133
+ if (wordStart == cur.ch && lineNum == cur.line &&
3134
+ wordEnd == wordStart + dir) {
3135
+ // We started at the end of a word. Find the next one.
3136
+ continue;
3137
+ } else {
3138
+ return {
3139
+ from: Math.min(wordStart, wordEnd + 1),
3140
+ to: Math.max(wordStart, wordEnd),
3141
+ line: lineNum };
3142
+ }
3143
+ }
3144
+ }
3145
+ if (!foundWord) {
3146
+ pos += dir;
3147
+ }
3148
+ }
3149
+ // Advance to next/prev line.
3150
+ lineNum += dir;
3151
+ if (!isLine(cm, lineNum)) {
3152
+ return null;
3153
+ }
3154
+ line = cm.getLine(lineNum);
3155
+ pos = (dir > 0) ? 0 : line.length;
3156
+ }
3157
+ // Should never get here.
3158
+ throw new Error('The impossible happened.');
3159
+ }
3160
+
3161
+ /**
3162
+ * @param {CodeMirror} cm CodeMirror object.
3163
+ * @param {Pos} cur The position to start from.
3164
+ * @param {int} repeat Number of words to move past.
3165
+ * @param {boolean} forward True to search forward. False to search
3166
+ * backward.
3167
+ * @param {boolean} wordEnd True to move to end of word. False to move to
3168
+ * beginning of word.
3169
+ * @param {boolean} bigWord True if punctuation count as part of the word.
3170
+ * False if only alphabet characters count as part of the word.
3171
+ * @return {Cursor} The position the cursor should move to.
3172
+ */
3173
+ function moveToWord(cm, cur, repeat, forward, wordEnd, bigWord) {
3174
+ var curStart = copyCursor(cur);
3175
+ var words = [];
3176
+ if (forward && !wordEnd || !forward && wordEnd) {
3177
+ repeat++;
3178
+ }
3179
+ // For 'e', empty lines are not considered words, go figure.
3180
+ var emptyLineIsWord = !(forward && wordEnd);
3181
+ for (var i = 0; i < repeat; i++) {
3182
+ var word = findWord(cm, cur, forward, bigWord, emptyLineIsWord);
3183
+ if (!word) {
3184
+ var eodCh = lineLength(cm, cm.lastLine());
3185
+ words.push(forward
3186
+ ? {line: cm.lastLine(), from: eodCh, to: eodCh}
3187
+ : {line: 0, from: 0, to: 0});
3188
+ break;
3189
+ }
3190
+ words.push(word);
3191
+ cur = Pos(word.line, forward ? (word.to - 1) : word.from);
3192
+ }
3193
+ var shortCircuit = words.length != repeat;
3194
+ var firstWord = words[0];
3195
+ var lastWord = words.pop();
3196
+ if (forward && !wordEnd) {
3197
+ // w
3198
+ if (!shortCircuit && (firstWord.from != curStart.ch || firstWord.line != curStart.line)) {
3199
+ // We did not start in the middle of a word. Discard the extra word at the end.
3200
+ lastWord = words.pop();
3201
+ }
3202
+ return Pos(lastWord.line, lastWord.from);
3203
+ } else if (forward && wordEnd) {
3204
+ return Pos(lastWord.line, lastWord.to - 1);
3205
+ } else if (!forward && wordEnd) {
3206
+ // ge
3207
+ if (!shortCircuit && (firstWord.to != curStart.ch || firstWord.line != curStart.line)) {
3208
+ // We did not start in the middle of a word. Discard the extra word at the end.
3209
+ lastWord = words.pop();
3210
+ }
3211
+ return Pos(lastWord.line, lastWord.to);
3212
+ } else {
3213
+ // b
3214
+ return Pos(lastWord.line, lastWord.from);
3215
+ }
3216
+ }
3217
+
3218
+ function moveToCharacter(cm, repeat, forward, character) {
3219
+ var cur = cm.getCursor();
3220
+ var start = cur.ch;
3221
+ var idx;
3222
+ for (var i = 0; i < repeat; i ++) {
3223
+ var line = cm.getLine(cur.line);
3224
+ idx = charIdxInLine(start, line, character, forward, true);
3225
+ if (idx == -1) {
3226
+ return null;
3227
+ }
3228
+ start = idx;
3229
+ }
3230
+ return Pos(cm.getCursor().line, idx);
3231
+ }
3232
+
3233
+ function moveToColumn(cm, repeat) {
3234
+ // repeat is always >= 1, so repeat - 1 always corresponds
3235
+ // to the column we want to go to.
3236
+ var line = cm.getCursor().line;
3237
+ return clipCursorToContent(cm, Pos(line, repeat - 1));
3238
+ }
3239
+
3240
+ function updateMark(cm, vim, markName, pos) {
3241
+ if (!inArray(markName, validMarks)) {
3242
+ return;
3243
+ }
3244
+ if (vim.marks[markName]) {
3245
+ vim.marks[markName].clear();
3246
+ }
3247
+ vim.marks[markName] = cm.setBookmark(pos);
3248
+ }
3249
+
3250
+ function charIdxInLine(start, line, character, forward, includeChar) {
3251
+ // Search for char in line.
3252
+ // motion_options: {forward, includeChar}
3253
+ // If includeChar = true, include it too.
3254
+ // If forward = true, search forward, else search backwards.
3255
+ // If char is not found on this line, do nothing
3256
+ var idx;
3257
+ if (forward) {
3258
+ idx = line.indexOf(character, start + 1);
3259
+ if (idx != -1 && !includeChar) {
3260
+ idx -= 1;
3261
+ }
3262
+ } else {
3263
+ idx = line.lastIndexOf(character, start - 1);
3264
+ if (idx != -1 && !includeChar) {
3265
+ idx += 1;
3266
+ }
3267
+ }
3268
+ return idx;
3269
+ }
3270
+
3271
+ // TODO: perhaps this finagling of start and end positions belonds
3272
+ // in codmirror/replaceRange?
3273
+ function selectCompanionObject(cm, head, symb, inclusive) {
3274
+ var cur = head, start, end;
3275
+
3276
+ var bracketRegexp = ({
3277
+ '(': /[()]/, ')': /[()]/,
3278
+ '[': /[[\]]/, ']': /[[\]]/,
3279
+ '{': /[{}]/, '}': /[{}]/})[symb];
3280
+ var openSym = ({
3281
+ '(': '(', ')': '(',
3282
+ '[': '[', ']': '[',
3283
+ '{': '{', '}': '{'})[symb];
3284
+ var curChar = cm.getLine(cur.line).charAt(cur.ch);
3285
+ // Due to the behavior of scanForBracket, we need to add an offset if the
3286
+ // cursor is on a matching open bracket.
3287
+ var offset = curChar === openSym ? 1 : 0;
3288
+
3289
+ start = cm.scanForBracket(Pos(cur.line, cur.ch + offset), -1, null, {'bracketRegex': bracketRegexp});
3290
+ end = cm.scanForBracket(Pos(cur.line, cur.ch + offset), 1, null, {'bracketRegex': bracketRegexp});
3291
+
3292
+ if (!start || !end) {
3293
+ return { start: cur, end: cur };
3294
+ }
3295
+
3296
+ start = start.pos;
3297
+ end = end.pos;
3298
+
3299
+ if ((start.line == end.line && start.ch > end.ch)
3300
+ || (start.line > end.line)) {
3301
+ var tmp = start;
3302
+ start = end;
3303
+ end = tmp;
3304
+ }
3305
+
3306
+ if (inclusive) {
3307
+ end.ch += 1;
3308
+ } else {
3309
+ start.ch += 1;
3310
+ }
3311
+
3312
+ return { start: start, end: end };
3313
+ }
3314
+
3315
+ // Takes in a symbol and a cursor and tries to simulate text objects that
3316
+ // have identical opening and closing symbols
3317
+ // TODO support across multiple lines
3318
+ function findBeginningAndEnd(cm, head, symb, inclusive) {
3319
+ var cur = copyCursor(head);
3320
+ var line = cm.getLine(cur.line);
3321
+ var chars = line.split('');
3322
+ var start, end, i, len;
3323
+ var firstIndex = chars.indexOf(symb);
3324
+
3325
+ // the decision tree is to always look backwards for the beginning first,
3326
+ // but if the cursor is in front of the first instance of the symb,
3327
+ // then move the cursor forward
3328
+ if (cur.ch < firstIndex) {
3329
+ cur.ch = firstIndex;
3330
+ // Why is this line even here???
3331
+ // cm.setCursor(cur.line, firstIndex+1);
3332
+ }
3333
+ // otherwise if the cursor is currently on the closing symbol
3334
+ else if (firstIndex < cur.ch && chars[cur.ch] == symb) {
3335
+ end = cur.ch; // assign end to the current cursor
3336
+ --cur.ch; // make sure to look backwards
3337
+ }
3338
+
3339
+ // if we're currently on the symbol, we've got a start
3340
+ if (chars[cur.ch] == symb && !end) {
3341
+ start = cur.ch + 1; // assign start to ahead of the cursor
3342
+ } else {
3343
+ // go backwards to find the start
3344
+ for (i = cur.ch; i > -1 && !start; i--) {
3345
+ if (chars[i] == symb) {
3346
+ start = i + 1;
3347
+ }
3348
+ }
3349
+ }
3350
+
3351
+ // look forwards for the end symbol
3352
+ if (start && !end) {
3353
+ for (i = start, len = chars.length; i < len && !end; i++) {
3354
+ if (chars[i] == symb) {
3355
+ end = i;
3356
+ }
3357
+ }
3358
+ }
3359
+
3360
+ // nothing found
3361
+ if (!start || !end) {
3362
+ return { start: cur, end: cur };
3363
+ }
3364
+
3365
+ // include the symbols
3366
+ if (inclusive) {
3367
+ --start; ++end;
3368
+ }
3369
+
3370
+ return {
3371
+ start: Pos(cur.line, start),
3372
+ end: Pos(cur.line, end)
3373
+ };
3374
+ }
3375
+
3376
+ // Search functions
3377
+ defineOption('pcre', true, 'boolean');
3378
+ function SearchState() {}
3379
+ SearchState.prototype = {
3380
+ getQuery: function() {
3381
+ return vimGlobalState.query;
3382
+ },
3383
+ setQuery: function(query) {
3384
+ vimGlobalState.query = query;
3385
+ },
3386
+ getOverlay: function() {
3387
+ return this.searchOverlay;
3388
+ },
3389
+ setOverlay: function(overlay) {
3390
+ this.searchOverlay = overlay;
3391
+ },
3392
+ isReversed: function() {
3393
+ return vimGlobalState.isReversed;
3394
+ },
3395
+ setReversed: function(reversed) {
3396
+ vimGlobalState.isReversed = reversed;
3397
+ }
3398
+ };
3399
+ function getSearchState(cm) {
3400
+ var vim = cm.state.vim;
3401
+ return vim.searchState_ || (vim.searchState_ = new SearchState());
3402
+ }
3403
+ function dialog(cm, template, shortText, onClose, options) {
3404
+ if (cm.openDialog) {
3405
+ cm.openDialog(template, onClose, { bottom: true, value: options.value,
3406
+ onKeyDown: options.onKeyDown, onKeyUp: options.onKeyUp });
3407
+ }
3408
+ else {
3409
+ onClose(prompt(shortText, ''));
3410
+ }
3411
+ }
3412
+ function splitBySlash(argString) {
3413
+ var slashes = findUnescapedSlashes(argString) || [];
3414
+ if (!slashes.length) return [];
3415
+ var tokens = [];
3416
+ // in case of strings like foo/bar
3417
+ if (slashes[0] !== 0) return;
3418
+ for (var i = 0; i < slashes.length; i++) {
3419
+ if (typeof slashes[i] == 'number')
3420
+ tokens.push(argString.substring(slashes[i] + 1, slashes[i+1]));
3421
+ }
3422
+ return tokens;
3423
+ }
3424
+
3425
+ function findUnescapedSlashes(str) {
3426
+ var escapeNextChar = false;
3427
+ var slashes = [];
3428
+ for (var i = 0; i < str.length; i++) {
3429
+ var c = str.charAt(i);
3430
+ if (!escapeNextChar && c == '/') {
3431
+ slashes.push(i);
3432
+ }
3433
+ escapeNextChar = !escapeNextChar && (c == '\\');
3434
+ }
3435
+ return slashes;
3436
+ }
3437
+
3438
+ // Translates a search string from ex (vim) syntax into javascript form.
3439
+ function translateRegex(str) {
3440
+ // When these match, add a '\' if unescaped or remove one if escaped.
3441
+ var specials = '|(){';
3442
+ // Remove, but never add, a '\' for these.
3443
+ var unescape = '}';
3444
+ var escapeNextChar = false;
3445
+ var out = [];
3446
+ for (var i = -1; i < str.length; i++) {
3447
+ var c = str.charAt(i) || '';
3448
+ var n = str.charAt(i+1) || '';
3449
+ var specialComesNext = (n && specials.indexOf(n) != -1);
3450
+ if (escapeNextChar) {
3451
+ if (c !== '\\' || !specialComesNext) {
3452
+ out.push(c);
3453
+ }
3454
+ escapeNextChar = false;
3455
+ } else {
3456
+ if (c === '\\') {
3457
+ escapeNextChar = true;
3458
+ // Treat the unescape list as special for removing, but not adding '\'.
3459
+ if (n && unescape.indexOf(n) != -1) {
3460
+ specialComesNext = true;
3461
+ }
3462
+ // Not passing this test means removing a '\'.
3463
+ if (!specialComesNext || n === '\\') {
3464
+ out.push(c);
3465
+ }
3466
+ } else {
3467
+ out.push(c);
3468
+ if (specialComesNext && n !== '\\') {
3469
+ out.push('\\');
3470
+ }
3471
+ }
3472
+ }
3473
+ }
3474
+ return out.join('');
3475
+ }
3476
+
3477
+ // Translates the replace part of a search and replace from ex (vim) syntax into
3478
+ // javascript form. Similar to translateRegex, but additionally fixes back references
3479
+ // (translates '\[0..9]' to '$[0..9]') and follows different rules for escaping '$'.
3480
+ function translateRegexReplace(str) {
3481
+ var escapeNextChar = false;
3482
+ var out = [];
3483
+ for (var i = -1; i < str.length; i++) {
3484
+ var c = str.charAt(i) || '';
3485
+ var n = str.charAt(i+1) || '';
3486
+ if (escapeNextChar) {
3487
+ // At any point in the loop, escapeNextChar is true if the previous
3488
+ // character was a '\' and was not escaped.
3489
+ out.push(c);
3490
+ escapeNextChar = false;
3491
+ } else {
3492
+ if (c === '\\') {
3493
+ escapeNextChar = true;
3494
+ if ((isNumber(n) || n === '$')) {
3495
+ out.push('$');
3496
+ } else if (n !== '/' && n !== '\\') {
3497
+ out.push('\\');
3498
+ }
3499
+ } else {
3500
+ if (c === '$') {
3501
+ out.push('$');
3502
+ }
3503
+ out.push(c);
3504
+ if (n === '/') {
3505
+ out.push('\\');
3506
+ }
3507
+ }
3508
+ }
3509
+ }
3510
+ return out.join('');
3511
+ }
3512
+
3513
+ // Unescape \ and / in the replace part, for PCRE mode.
3514
+ function unescapeRegexReplace(str) {
3515
+ var stream = new CodeMirror.StringStream(str);
3516
+ var output = [];
3517
+ while (!stream.eol()) {
3518
+ // Search for \.
3519
+ while (stream.peek() && stream.peek() != '\\') {
3520
+ output.push(stream.next());
3521
+ }
3522
+ if (stream.match('\\/', true)) {
3523
+ // \/ => /
3524
+ output.push('/');
3525
+ } else if (stream.match('\\\\', true)) {
3526
+ // \\ => \
3527
+ output.push('\\');
3528
+ } else {
3529
+ // Don't change anything
3530
+ output.push(stream.next());
3531
+ }
3532
+ }
3533
+ return output.join('');
3534
+ }
3535
+
3536
+ /**
3537
+ * Extract the regular expression from the query and return a Regexp object.
3538
+ * Returns null if the query is blank.
3539
+ * If ignoreCase is passed in, the Regexp object will have the 'i' flag set.
3540
+ * If smartCase is passed in, and the query contains upper case letters,
3541
+ * then ignoreCase is overridden, and the 'i' flag will not be set.
3542
+ * If the query contains the /i in the flag part of the regular expression,
3543
+ * then both ignoreCase and smartCase are ignored, and 'i' will be passed
3544
+ * through to the Regex object.
3545
+ */
3546
+ function parseQuery(query, ignoreCase, smartCase) {
3547
+ // First update the last search register
3548
+ var lastSearchRegister = vimGlobalState.registerController.getRegister('/');
3549
+ lastSearchRegister.setText(query);
3550
+ // Check if the query is already a regex.
3551
+ if (query instanceof RegExp) { return query; }
3552
+ // First try to extract regex + flags from the input. If no flags found,
3553
+ // extract just the regex. IE does not accept flags directly defined in
3554
+ // the regex string in the form /regex/flags
3555
+ var slashes = findUnescapedSlashes(query);
3556
+ var regexPart;
3557
+ var forceIgnoreCase;
3558
+ if (!slashes.length) {
3559
+ // Query looks like 'regexp'
3560
+ regexPart = query;
3561
+ } else {
3562
+ // Query looks like 'regexp/...'
3563
+ regexPart = query.substring(0, slashes[0]);
3564
+ var flagsPart = query.substring(slashes[0]);
3565
+ forceIgnoreCase = (flagsPart.indexOf('i') != -1);
3566
+ }
3567
+ if (!regexPart) {
3568
+ return null;
3569
+ }
3570
+ if (!getOption('pcre')) {
3571
+ regexPart = translateRegex(regexPart);
3572
+ }
3573
+ if (smartCase) {
3574
+ ignoreCase = (/^[^A-Z]*$/).test(regexPart);
3575
+ }
3576
+ var regexp = new RegExp(regexPart,
3577
+ (ignoreCase || forceIgnoreCase) ? 'i' : undefined);
3578
+ return regexp;
3579
+ }
3580
+ function showConfirm(cm, text) {
3581
+ if (cm.openNotification) {
3582
+ cm.openNotification('<span style="color: red">' + text + '</span>',
3583
+ {bottom: true, duration: 5000});
3584
+ } else {
3585
+ alert(text);
3586
+ }
3587
+ }
3588
+ function makePrompt(prefix, desc) {
3589
+ var raw = '';
3590
+ if (prefix) {
3591
+ raw += '<span style="font-family: monospace">' + prefix + '</span>';
3592
+ }
3593
+ raw += '<input type="text"/> ' +
3594
+ '<span style="color: #888">';
3595
+ if (desc) {
3596
+ raw += '<span style="color: #888">';
3597
+ raw += desc;
3598
+ raw += '</span>';
3599
+ }
3600
+ return raw;
3601
+ }
3602
+ var searchPromptDesc = '(Javascript regexp)';
3603
+ function showPrompt(cm, options) {
3604
+ var shortText = (options.prefix || '') + ' ' + (options.desc || '');
3605
+ var prompt = makePrompt(options.prefix, options.desc);
3606
+ dialog(cm, prompt, shortText, options.onClose, options);
3607
+ }
3608
+ function regexEqual(r1, r2) {
3609
+ if (r1 instanceof RegExp && r2 instanceof RegExp) {
3610
+ var props = ['global', 'multiline', 'ignoreCase', 'source'];
3611
+ for (var i = 0; i < props.length; i++) {
3612
+ var prop = props[i];
3613
+ if (r1[prop] !== r2[prop]) {
3614
+ return false;
3615
+ }
3616
+ }
3617
+ return true;
3618
+ }
3619
+ return false;
3620
+ }
3621
+ // Returns true if the query is valid.
3622
+ function updateSearchQuery(cm, rawQuery, ignoreCase, smartCase) {
3623
+ if (!rawQuery) {
3624
+ return;
3625
+ }
3626
+ var state = getSearchState(cm);
3627
+ var query = parseQuery(rawQuery, !!ignoreCase, !!smartCase);
3628
+ if (!query) {
3629
+ return;
3630
+ }
3631
+ highlightSearchMatches(cm, query);
3632
+ if (regexEqual(query, state.getQuery())) {
3633
+ return query;
3634
+ }
3635
+ state.setQuery(query);
3636
+ return query;
3637
+ }
3638
+ function searchOverlay(query) {
3639
+ if (query.source.charAt(0) == '^') {
3640
+ var matchSol = true;
3641
+ }
3642
+ return {
3643
+ token: function(stream) {
3644
+ if (matchSol && !stream.sol()) {
3645
+ stream.skipToEnd();
3646
+ return;
3647
+ }
3648
+ var match = stream.match(query, false);
3649
+ if (match) {
3650
+ if (match[0].length == 0) {
3651
+ // Matched empty string, skip to next.
3652
+ stream.next();
3653
+ return 'searching';
3654
+ }
3655
+ if (!stream.sol()) {
3656
+ // Backtrack 1 to match \b
3657
+ stream.backUp(1);
3658
+ if (!query.exec(stream.next() + match[0])) {
3659
+ stream.next();
3660
+ return null;
3661
+ }
3662
+ }
3663
+ stream.match(query);
3664
+ return 'searching';
3665
+ }
3666
+ while (!stream.eol()) {
3667
+ stream.next();
3668
+ if (stream.match(query, false)) break;
3669
+ }
3670
+ },
3671
+ query: query
3672
+ };
3673
+ }
3674
+ function highlightSearchMatches(cm, query) {
3675
+ var overlay = getSearchState(cm).getOverlay();
3676
+ if (!overlay || query != overlay.query) {
3677
+ if (overlay) {
3678
+ cm.removeOverlay(overlay);
3679
+ }
3680
+ overlay = searchOverlay(query);
3681
+ cm.addOverlay(overlay);
3682
+ getSearchState(cm).setOverlay(overlay);
3683
+ }
3684
+ }
3685
+ function findNext(cm, prev, query, repeat) {
3686
+ if (repeat === undefined) { repeat = 1; }
3687
+ return cm.operation(function() {
3688
+ var pos = cm.getCursor();
3689
+ var cursor = cm.getSearchCursor(query, pos);
3690
+ for (var i = 0; i < repeat; i++) {
3691
+ var found = cursor.find(prev);
3692
+ if (i == 0 && found && cursorEqual(cursor.from(), pos)) { found = cursor.find(prev); }
3693
+ if (!found) {
3694
+ // SearchCursor may have returned null because it hit EOF, wrap
3695
+ // around and try again.
3696
+ cursor = cm.getSearchCursor(query,
3697
+ (prev) ? Pos(cm.lastLine()) : Pos(cm.firstLine(), 0) );
3698
+ if (!cursor.find(prev)) {
3699
+ return;
3700
+ }
3701
+ }
3702
+ }
3703
+ return cursor.from();
3704
+ });
3705
+ }
3706
+ function clearSearchHighlight(cm) {
3707
+ cm.removeOverlay(getSearchState(cm).getOverlay());
3708
+ getSearchState(cm).setOverlay(null);
3709
+ }
3710
+ /**
3711
+ * Check if pos is in the specified range, INCLUSIVE.
3712
+ * Range can be specified with 1 or 2 arguments.
3713
+ * If the first range argument is an array, treat it as an array of line
3714
+ * numbers. Match pos against any of the lines.
3715
+ * If the first range argument is a number,
3716
+ * if there is only 1 range argument, check if pos has the same line
3717
+ * number
3718
+ * if there are 2 range arguments, then check if pos is in between the two
3719
+ * range arguments.
3720
+ */
3721
+ function isInRange(pos, start, end) {
3722
+ if (typeof pos != 'number') {
3723
+ // Assume it is a cursor position. Get the line number.
3724
+ pos = pos.line;
3725
+ }
3726
+ if (start instanceof Array) {
3727
+ return inArray(pos, start);
3728
+ } else {
3729
+ if (end) {
3730
+ return (pos >= start && pos <= end);
3731
+ } else {
3732
+ return pos == start;
3733
+ }
3734
+ }
3735
+ }
3736
+ function getUserVisibleLines(cm) {
3737
+ var scrollInfo = cm.getScrollInfo();
3738
+ var occludeToleranceTop = 6;
3739
+ var occludeToleranceBottom = 10;
3740
+ var from = cm.coordsChar({left:0, top: occludeToleranceTop + scrollInfo.top}, 'local');
3741
+ var bottomY = scrollInfo.clientHeight - occludeToleranceBottom + scrollInfo.top;
3742
+ var to = cm.coordsChar({left:0, top: bottomY}, 'local');
3743
+ return {top: from.line, bottom: to.line};
3744
+ }
3745
+
3746
+ // Ex command handling
3747
+ // Care must be taken when adding to the default Ex command map. For any
3748
+ // pair of commands that have a shared prefix, at least one of their
3749
+ // shortNames must not match the prefix of the other command.
3750
+ var defaultExCommandMap = [
3751
+ { name: 'map' },
3752
+ { name: 'imap', shortName: 'im' },
3753
+ { name: 'nmap', shortName: 'nm' },
3754
+ { name: 'vmap', shortName: 'vm' },
3755
+ { name: 'unmap' },
3756
+ { name: 'write', shortName: 'w' },
3757
+ { name: 'undo', shortName: 'u' },
3758
+ { name: 'redo', shortName: 'red' },
3759
+ { name: 'set', shortName: 'set' },
3760
+ { name: 'sort', shortName: 'sor' },
3761
+ { name: 'substitute', shortName: 's', possiblyAsync: true },
3762
+ { name: 'nohlsearch', shortName: 'noh' },
3763
+ { name: 'delmarks', shortName: 'delm' },
3764
+ { name: 'registers', shortName: 'reg', excludeFromCommandHistory: true },
3765
+ { name: 'global', shortName: 'g' }
3766
+ ];
3767
+ var ExCommandDispatcher = function() {
3768
+ this.buildCommandMap_();
3769
+ };
3770
+ ExCommandDispatcher.prototype = {
3771
+ processCommand: function(cm, input, opt_params) {
3772
+ var vim = cm.state.vim;
3773
+ var commandHistoryRegister = vimGlobalState.registerController.getRegister(':');
3774
+ var previousCommand = commandHistoryRegister.toString();
3775
+ if (vim.visualMode) {
3776
+ exitVisualMode(cm);
3777
+ }
3778
+ var inputStream = new CodeMirror.StringStream(input);
3779
+ // update ": with the latest command whether valid or invalid
3780
+ commandHistoryRegister.setText(input);
3781
+ var params = opt_params || {};
3782
+ params.input = input;
3783
+ try {
3784
+ this.parseInput_(cm, inputStream, params);
3785
+ } catch(e) {
3786
+ showConfirm(cm, e);
3787
+ throw e;
3788
+ }
3789
+ var command;
3790
+ var commandName;
3791
+ if (!params.commandName) {
3792
+ // If only a line range is defined, move to the line.
3793
+ if (params.line !== undefined) {
3794
+ commandName = 'move';
3795
+ }
3796
+ } else {
3797
+ command = this.matchCommand_(params.commandName);
3798
+ if (command) {
3799
+ commandName = command.name;
3800
+ if (command.excludeFromCommandHistory) {
3801
+ commandHistoryRegister.setText(previousCommand);
3802
+ }
3803
+ this.parseCommandArgs_(inputStream, params, command);
3804
+ if (command.type == 'exToKey') {
3805
+ // Handle Ex to Key mapping.
3806
+ for (var i = 0; i < command.toKeys.length; i++) {
3807
+ CodeMirror.Vim.handleKey(cm, command.toKeys[i], 'mapping');
3808
+ }
3809
+ return;
3810
+ } else if (command.type == 'exToEx') {
3811
+ // Handle Ex to Ex mapping.
3812
+ this.processCommand(cm, command.toInput);
3813
+ return;
3814
+ }
3815
+ }
3816
+ }
3817
+ if (!commandName) {
3818
+ showConfirm(cm, 'Not an editor command ":' + input + '"');
3819
+ return;
3820
+ }
3821
+ try {
3822
+ exCommands[commandName](cm, params);
3823
+ // Possibly asynchronous commands (e.g. substitute, which might have a
3824
+ // user confirmation), are responsible for calling the callback when
3825
+ // done. All others have it taken care of for them here.
3826
+ if ((!command || !command.possiblyAsync) && params.callback) {
3827
+ params.callback();
3828
+ }
3829
+ } catch(e) {
3830
+ showConfirm(cm, e);
3831
+ throw e;
3832
+ }
3833
+ },
3834
+ parseInput_: function(cm, inputStream, result) {
3835
+ inputStream.eatWhile(':');
3836
+ // Parse range.
3837
+ if (inputStream.eat('%')) {
3838
+ result.line = cm.firstLine();
3839
+ result.lineEnd = cm.lastLine();
3840
+ } else {
3841
+ result.line = this.parseLineSpec_(cm, inputStream);
3842
+ if (result.line !== undefined && inputStream.eat(',')) {
3843
+ result.lineEnd = this.parseLineSpec_(cm, inputStream);
3844
+ }
3845
+ }
3846
+
3847
+ // Parse command name.
3848
+ var commandMatch = inputStream.match(/^(\w+)/);
3849
+ if (commandMatch) {
3850
+ result.commandName = commandMatch[1];
3851
+ } else {
3852
+ result.commandName = inputStream.match(/.*/)[0];
3853
+ }
3854
+
3855
+ return result;
3856
+ },
3857
+ parseLineSpec_: function(cm, inputStream) {
3858
+ var numberMatch = inputStream.match(/^(\d+)/);
3859
+ if (numberMatch) {
3860
+ return parseInt(numberMatch[1], 10) - 1;
3861
+ }
3862
+ switch (inputStream.next()) {
3863
+ case '.':
3864
+ return cm.getCursor().line;
3865
+ case '$':
3866
+ return cm.lastLine();
3867
+ case '\'':
3868
+ var mark = cm.state.vim.marks[inputStream.next()];
3869
+ if (mark && mark.find()) {
3870
+ return mark.find().line;
3871
+ }
3872
+ throw new Error('Mark not set');
3873
+ default:
3874
+ inputStream.backUp(1);
3875
+ return undefined;
3876
+ }
3877
+ },
3878
+ parseCommandArgs_: function(inputStream, params, command) {
3879
+ if (inputStream.eol()) {
3880
+ return;
3881
+ }
3882
+ params.argString = inputStream.match(/.*/)[0];
3883
+ // Parse command-line arguments
3884
+ var delim = command.argDelimiter || /\s+/;
3885
+ var args = trim(params.argString).split(delim);
3886
+ if (args.length && args[0]) {
3887
+ params.args = args;
3888
+ }
3889
+ },
3890
+ matchCommand_: function(commandName) {
3891
+ // Return the command in the command map that matches the shortest
3892
+ // prefix of the passed in command name. The match is guaranteed to be
3893
+ // unambiguous if the defaultExCommandMap's shortNames are set up
3894
+ // correctly. (see @code{defaultExCommandMap}).
3895
+ for (var i = commandName.length; i > 0; i--) {
3896
+ var prefix = commandName.substring(0, i);
3897
+ if (this.commandMap_[prefix]) {
3898
+ var command = this.commandMap_[prefix];
3899
+ if (command.name.indexOf(commandName) === 0) {
3900
+ return command;
3901
+ }
3902
+ }
3903
+ }
3904
+ return null;
3905
+ },
3906
+ buildCommandMap_: function() {
3907
+ this.commandMap_ = {};
3908
+ for (var i = 0; i < defaultExCommandMap.length; i++) {
3909
+ var command = defaultExCommandMap[i];
3910
+ var key = command.shortName || command.name;
3911
+ this.commandMap_[key] = command;
3912
+ }
3913
+ },
3914
+ map: function(lhs, rhs, ctx) {
3915
+ if (lhs != ':' && lhs.charAt(0) == ':') {
3916
+ if (ctx) { throw Error('Mode not supported for ex mappings'); }
3917
+ var commandName = lhs.substring(1);
3918
+ if (rhs != ':' && rhs.charAt(0) == ':') {
3919
+ // Ex to Ex mapping
3920
+ this.commandMap_[commandName] = {
3921
+ name: commandName,
3922
+ type: 'exToEx',
3923
+ toInput: rhs.substring(1),
3924
+ user: true
3925
+ };
3926
+ } else {
3927
+ // Ex to key mapping
3928
+ this.commandMap_[commandName] = {
3929
+ name: commandName,
3930
+ type: 'exToKey',
3931
+ toKeys: rhs,
3932
+ user: true
3933
+ };
3934
+ }
3935
+ } else {
3936
+ if (rhs != ':' && rhs.charAt(0) == ':') {
3937
+ // Key to Ex mapping.
3938
+ var mapping = {
3939
+ keys: lhs,
3940
+ type: 'keyToEx',
3941
+ exArgs: { input: rhs.substring(1) },
3942
+ user: true};
3943
+ if (ctx) { mapping.context = ctx; }
3944
+ defaultKeymap.unshift(mapping);
3945
+ } else {
3946
+ // Key to key mapping
3947
+ var mapping = {
3948
+ keys: lhs,
3949
+ type: 'keyToKey',
3950
+ toKeys: rhs,
3951
+ user: true
3952
+ };
3953
+ if (ctx) { mapping.context = ctx; }
3954
+ defaultKeymap.unshift(mapping);
3955
+ }
3956
+ }
3957
+ },
3958
+ unmap: function(lhs, ctx) {
3959
+ if (lhs != ':' && lhs.charAt(0) == ':') {
3960
+ // Ex to Ex or Ex to key mapping
3961
+ if (ctx) { throw Error('Mode not supported for ex mappings'); }
3962
+ var commandName = lhs.substring(1);
3963
+ if (this.commandMap_[commandName] && this.commandMap_[commandName].user) {
3964
+ delete this.commandMap_[commandName];
3965
+ return;
3966
+ }
3967
+ } else {
3968
+ // Key to Ex or key to key mapping
3969
+ var keys = lhs;
3970
+ for (var i = 0; i < defaultKeymap.length; i++) {
3971
+ if (keys == defaultKeymap[i].keys
3972
+ && defaultKeymap[i].context === ctx
3973
+ && defaultKeymap[i].user) {
3974
+ defaultKeymap.splice(i, 1);
3975
+ return;
3976
+ }
3977
+ }
3978
+ }
3979
+ throw Error('No such mapping.');
3980
+ }
3981
+ };
3982
+
3983
+ var exCommands = {
3984
+ map: function(cm, params, ctx) {
3985
+ var mapArgs = params.args;
3986
+ if (!mapArgs || mapArgs.length < 2) {
3987
+ if (cm) {
3988
+ showConfirm(cm, 'Invalid mapping: ' + params.input);
3989
+ }
3990
+ return;
3991
+ }
3992
+ exCommandDispatcher.map(mapArgs[0], mapArgs[1], ctx);
3993
+ },
3994
+ imap: function(cm, params) { this.map(cm, params, 'insert'); },
3995
+ nmap: function(cm, params) { this.map(cm, params, 'normal'); },
3996
+ vmap: function(cm, params) { this.map(cm, params, 'visual'); },
3997
+ unmap: function(cm, params, ctx) {
3998
+ var mapArgs = params.args;
3999
+ if (!mapArgs || mapArgs.length < 1) {
4000
+ if (cm) {
4001
+ showConfirm(cm, 'No such mapping: ' + params.input);
4002
+ }
4003
+ return;
4004
+ }
4005
+ exCommandDispatcher.unmap(mapArgs[0], ctx);
4006
+ },
4007
+ move: function(cm, params) {
4008
+ commandDispatcher.processCommand(cm, cm.state.vim, {
4009
+ type: 'motion',
4010
+ motion: 'moveToLineOrEdgeOfDocument',
4011
+ motionArgs: { forward: false, explicitRepeat: true,
4012
+ linewise: true },
4013
+ repeatOverride: params.line+1});
4014
+ },
4015
+ set: function(cm, params) {
4016
+ var setArgs = params.args;
4017
+ if (!setArgs || setArgs.length < 1) {
4018
+ if (cm) {
4019
+ showConfirm(cm, 'Invalid mapping: ' + params.input);
4020
+ }
4021
+ return;
4022
+ }
4023
+ var expr = setArgs[0].split('=');
4024
+ var optionName = expr[0];
4025
+ var value = expr[1];
4026
+ var forceGet = false;
4027
+
4028
+ if (optionName.charAt(optionName.length - 1) == '?') {
4029
+ // If post-fixed with ?, then the set is actually a get.
4030
+ if (value) { throw Error('Trailing characters: ' + params.argString); }
4031
+ optionName = optionName.substring(0, optionName.length - 1);
4032
+ forceGet = true;
4033
+ }
4034
+ if (value === undefined && optionName.substring(0, 2) == 'no') {
4035
+ // To set boolean options to false, the option name is prefixed with
4036
+ // 'no'.
4037
+ optionName = optionName.substring(2);
4038
+ value = false;
4039
+ }
4040
+ var optionIsBoolean = options[optionName] && options[optionName].type == 'boolean';
4041
+ if (optionIsBoolean && value == undefined) {
4042
+ // Calling set with a boolean option sets it to true.
4043
+ value = true;
4044
+ }
4045
+ if (!optionIsBoolean && !value || forceGet) {
4046
+ var oldValue = getOption(optionName);
4047
+ // If no value is provided, then we assume this is a get.
4048
+ if (oldValue === true || oldValue === false) {
4049
+ showConfirm(cm, ' ' + (oldValue ? '' : 'no') + optionName);
4050
+ } else {
4051
+ showConfirm(cm, ' ' + optionName + '=' + oldValue);
4052
+ }
4053
+ } else {
4054
+ setOption(optionName, value);
4055
+ }
4056
+ },
4057
+ registers: function(cm,params) {
4058
+ var regArgs = params.args;
4059
+ var registers = vimGlobalState.registerController.registers;
4060
+ var regInfo = '----------Registers----------<br><br>';
4061
+ if (!regArgs) {
4062
+ for (var registerName in registers) {
4063
+ var text = registers[registerName].toString();
4064
+ if (text.length) {
4065
+ regInfo += '"' + registerName + ' ' + text + '<br>';
4066
+ }
4067
+ }
4068
+ } else {
4069
+ var registerName;
4070
+ regArgs = regArgs.join('');
4071
+ for (var i = 0; i < regArgs.length; i++) {
4072
+ registerName = regArgs.charAt(i);
4073
+ if (!vimGlobalState.registerController.isValidRegister(registerName)) {
4074
+ continue;
4075
+ }
4076
+ var register = registers[registerName] || new Register();
4077
+ regInfo += '"' + registerName + ' ' + register.toString() + '<br>';
4078
+ }
4079
+ }
4080
+ showConfirm(cm, regInfo);
4081
+ },
4082
+ sort: function(cm, params) {
4083
+ var reverse, ignoreCase, unique, number;
4084
+ function parseArgs() {
4085
+ if (params.argString) {
4086
+ var args = new CodeMirror.StringStream(params.argString);
4087
+ if (args.eat('!')) { reverse = true; }
4088
+ if (args.eol()) { return; }
4089
+ if (!args.eatSpace()) { return 'Invalid arguments'; }
4090
+ var opts = args.match(/[a-z]+/);
4091
+ if (opts) {
4092
+ opts = opts[0];
4093
+ ignoreCase = opts.indexOf('i') != -1;
4094
+ unique = opts.indexOf('u') != -1;
4095
+ var decimal = opts.indexOf('d') != -1 && 1;
4096
+ var hex = opts.indexOf('x') != -1 && 1;
4097
+ var octal = opts.indexOf('o') != -1 && 1;
4098
+ if (decimal + hex + octal > 1) { return 'Invalid arguments'; }
4099
+ number = decimal && 'decimal' || hex && 'hex' || octal && 'octal';
4100
+ }
4101
+ if (args.eatSpace() && args.match(/\/.*\//)) { 'patterns not supported'; }
4102
+ }
4103
+ }
4104
+ var err = parseArgs();
4105
+ if (err) {
4106
+ showConfirm(cm, err + ': ' + params.argString);
4107
+ return;
4108
+ }
4109
+ var lineStart = params.line || cm.firstLine();
4110
+ var lineEnd = params.lineEnd || params.line || cm.lastLine();
4111
+ if (lineStart == lineEnd) { return; }
4112
+ var curStart = Pos(lineStart, 0);
4113
+ var curEnd = Pos(lineEnd, lineLength(cm, lineEnd));
4114
+ var text = cm.getRange(curStart, curEnd).split('\n');
4115
+ var numberRegex = (number == 'decimal') ? /(-?)([\d]+)/ :
4116
+ (number == 'hex') ? /(-?)(?:0x)?([0-9a-f]+)/i :
4117
+ (number == 'octal') ? /([0-7]+)/ : null;
4118
+ var radix = (number == 'decimal') ? 10 : (number == 'hex') ? 16 : (number == 'octal') ? 8 : null;
4119
+ var numPart = [], textPart = [];
4120
+ if (number) {
4121
+ for (var i = 0; i < text.length; i++) {
4122
+ if (numberRegex.exec(text[i])) {
4123
+ numPart.push(text[i]);
4124
+ } else {
4125
+ textPart.push(text[i]);
4126
+ }
4127
+ }
4128
+ } else {
4129
+ textPart = text;
4130
+ }
4131
+ function compareFn(a, b) {
4132
+ if (reverse) { var tmp; tmp = a; a = b; b = tmp; }
4133
+ if (ignoreCase) { a = a.toLowerCase(); b = b.toLowerCase(); }
4134
+ var anum = number && numberRegex.exec(a);
4135
+ var bnum = number && numberRegex.exec(b);
4136
+ if (!anum) { return a < b ? -1 : 1; }
4137
+ anum = parseInt((anum[1] + anum[2]).toLowerCase(), radix);
4138
+ bnum = parseInt((bnum[1] + bnum[2]).toLowerCase(), radix);
4139
+ return anum - bnum;
4140
+ }
4141
+ numPart.sort(compareFn);
4142
+ textPart.sort(compareFn);
4143
+ text = (!reverse) ? textPart.concat(numPart) : numPart.concat(textPart);
4144
+ if (unique) { // Remove duplicate lines
4145
+ var textOld = text;
4146
+ var lastLine;
4147
+ text = [];
4148
+ for (var i = 0; i < textOld.length; i++) {
4149
+ if (textOld[i] != lastLine) {
4150
+ text.push(textOld[i]);
4151
+ }
4152
+ lastLine = textOld[i];
4153
+ }
4154
+ }
4155
+ cm.replaceRange(text.join('\n'), curStart, curEnd);
4156
+ },
4157
+ global: function(cm, params) {
4158
+ // a global command is of the form
4159
+ // :[range]g/pattern/[cmd]
4160
+ // argString holds the string /pattern/[cmd]
4161
+ var argString = params.argString;
4162
+ if (!argString) {
4163
+ showConfirm(cm, 'Regular Expression missing from global');
4164
+ return;
4165
+ }
4166
+ // range is specified here
4167
+ var lineStart = (params.line !== undefined) ? params.line : cm.firstLine();
4168
+ var lineEnd = params.lineEnd || params.line || cm.lastLine();
4169
+ // get the tokens from argString
4170
+ var tokens = splitBySlash(argString);
4171
+ var regexPart = argString, cmd;
4172
+ if (tokens.length) {
4173
+ regexPart = tokens[0];
4174
+ cmd = tokens.slice(1, tokens.length).join('/');
4175
+ }
4176
+ if (regexPart) {
4177
+ // If regex part is empty, then use the previous query. Otherwise
4178
+ // use the regex part as the new query.
4179
+ try {
4180
+ updateSearchQuery(cm, regexPart, true /** ignoreCase */,
4181
+ true /** smartCase */);
4182
+ } catch (e) {
4183
+ showConfirm(cm, 'Invalid regex: ' + regexPart);
4184
+ return;
4185
+ }
4186
+ }
4187
+ // now that we have the regexPart, search for regex matches in the
4188
+ // specified range of lines
4189
+ var query = getSearchState(cm).getQuery();
4190
+ var matchedLines = [], content = '';
4191
+ for (var i = lineStart; i <= lineEnd; i++) {
4192
+ var matched = query.test(cm.getLine(i));
4193
+ if (matched) {
4194
+ matchedLines.push(i+1);
4195
+ content+= cm.getLine(i) + '<br>';
4196
+ }
4197
+ }
4198
+ // if there is no [cmd], just display the list of matched lines
4199
+ if (!cmd) {
4200
+ showConfirm(cm, content);
4201
+ return;
4202
+ }
4203
+ var index = 0;
4204
+ var nextCommand = function() {
4205
+ if (index < matchedLines.length) {
4206
+ var command = matchedLines[index] + cmd;
4207
+ exCommandDispatcher.processCommand(cm, command, {
4208
+ callback: nextCommand
4209
+ });
4210
+ }
4211
+ index++;
4212
+ };
4213
+ nextCommand();
4214
+ },
4215
+ substitute: function(cm, params) {
4216
+ if (!cm.getSearchCursor) {
4217
+ throw new Error('Search feature not available. Requires searchcursor.js or ' +
4218
+ 'any other getSearchCursor implementation.');
4219
+ }
4220
+ var argString = params.argString;
4221
+ var tokens = argString ? splitBySlash(argString) : [];
4222
+ var regexPart, replacePart = '', trailing, flagsPart, count;
4223
+ var confirm = false; // Whether to confirm each replace.
4224
+ var global = false; // True to replace all instances on a line, false to replace only 1.
4225
+ if (tokens.length) {
4226
+ regexPart = tokens[0];
4227
+ replacePart = tokens[1];
4228
+ if (replacePart !== undefined) {
4229
+ if (getOption('pcre')) {
4230
+ replacePart = unescapeRegexReplace(replacePart);
4231
+ } else {
4232
+ replacePart = translateRegexReplace(replacePart);
4233
+ }
4234
+ vimGlobalState.lastSubstituteReplacePart = replacePart;
4235
+ }
4236
+ trailing = tokens[2] ? tokens[2].split(' ') : [];
4237
+ } else {
4238
+ // either the argString is empty or its of the form ' hello/world'
4239
+ // actually splitBySlash returns a list of tokens
4240
+ // only if the string starts with a '/'
4241
+ if (argString && argString.length) {
4242
+ showConfirm(cm, 'Substitutions should be of the form ' +
4243
+ ':s/pattern/replace/');
4244
+ return;
4245
+ }
4246
+ }
4247
+ // After the 3rd slash, we can have flags followed by a space followed
4248
+ // by count.
4249
+ if (trailing) {
4250
+ flagsPart = trailing[0];
4251
+ count = parseInt(trailing[1]);
4252
+ if (flagsPart) {
4253
+ if (flagsPart.indexOf('c') != -1) {
4254
+ confirm = true;
4255
+ flagsPart.replace('c', '');
4256
+ }
4257
+ if (flagsPart.indexOf('g') != -1) {
4258
+ global = true;
4259
+ flagsPart.replace('g', '');
4260
+ }
4261
+ regexPart = regexPart + '/' + flagsPart;
4262
+ }
4263
+ }
4264
+ if (regexPart) {
4265
+ // If regex part is empty, then use the previous query. Otherwise use
4266
+ // the regex part as the new query.
4267
+ try {
4268
+ updateSearchQuery(cm, regexPart, true /** ignoreCase */,
4269
+ true /** smartCase */);
4270
+ } catch (e) {
4271
+ showConfirm(cm, 'Invalid regex: ' + regexPart);
4272
+ return;
4273
+ }
4274
+ }
4275
+ replacePart = replacePart || vimGlobalState.lastSubstituteReplacePart;
4276
+ if (replacePart === undefined) {
4277
+ showConfirm(cm, 'No previous substitute regular expression');
4278
+ return;
4279
+ }
4280
+ var state = getSearchState(cm);
4281
+ var query = state.getQuery();
4282
+ var lineStart = (params.line !== undefined) ? params.line : cm.getCursor().line;
4283
+ var lineEnd = params.lineEnd || lineStart;
4284
+ if (count) {
4285
+ lineStart = lineEnd;
4286
+ lineEnd = lineStart + count - 1;
4287
+ }
4288
+ var startPos = clipCursorToContent(cm, Pos(lineStart, 0));
4289
+ var cursor = cm.getSearchCursor(query, startPos);
4290
+ doReplace(cm, confirm, global, lineStart, lineEnd, cursor, query, replacePart, params.callback);
4291
+ },
4292
+ redo: CodeMirror.commands.redo,
4293
+ undo: CodeMirror.commands.undo,
4294
+ write: function(cm) {
4295
+ if (CodeMirror.commands.save) {
4296
+ // If a save command is defined, call it.
4297
+ CodeMirror.commands.save(cm);
4298
+ } else {
4299
+ // Saves to text area if no save command is defined.
4300
+ cm.save();
4301
+ }
4302
+ },
4303
+ nohlsearch: function(cm) {
4304
+ clearSearchHighlight(cm);
4305
+ },
4306
+ delmarks: function(cm, params) {
4307
+ if (!params.argString || !trim(params.argString)) {
4308
+ showConfirm(cm, 'Argument required');
4309
+ return;
4310
+ }
4311
+
4312
+ var state = cm.state.vim;
4313
+ var stream = new CodeMirror.StringStream(trim(params.argString));
4314
+ while (!stream.eol()) {
4315
+ stream.eatSpace();
4316
+
4317
+ // Record the streams position at the beginning of the loop for use
4318
+ // in error messages.
4319
+ var count = stream.pos;
4320
+
4321
+ if (!stream.match(/[a-zA-Z]/, false)) {
4322
+ showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));
4323
+ return;
4324
+ }
4325
+
4326
+ var sym = stream.next();
4327
+ // Check if this symbol is part of a range
4328
+ if (stream.match('-', true)) {
4329
+ // This symbol is part of a range.
4330
+
4331
+ // The range must terminate at an alphabetic character.
4332
+ if (!stream.match(/[a-zA-Z]/, false)) {
4333
+ showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));
4334
+ return;
4335
+ }
4336
+
4337
+ var startMark = sym;
4338
+ var finishMark = stream.next();
4339
+ // The range must terminate at an alphabetic character which
4340
+ // shares the same case as the start of the range.
4341
+ if (isLowerCase(startMark) && isLowerCase(finishMark) ||
4342
+ isUpperCase(startMark) && isUpperCase(finishMark)) {
4343
+ var start = startMark.charCodeAt(0);
4344
+ var finish = finishMark.charCodeAt(0);
4345
+ if (start >= finish) {
4346
+ showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));
4347
+ return;
4348
+ }
4349
+
4350
+ // Because marks are always ASCII values, and we have
4351
+ // determined that they are the same case, we can use
4352
+ // their char codes to iterate through the defined range.
4353
+ for (var j = 0; j <= finish - start; j++) {
4354
+ var mark = String.fromCharCode(start + j);
4355
+ delete state.marks[mark];
4356
+ }
4357
+ } else {
4358
+ showConfirm(cm, 'Invalid argument: ' + startMark + '-');
4359
+ return;
4360
+ }
4361
+ } else {
4362
+ // This symbol is a valid mark, and is not part of a range.
4363
+ delete state.marks[sym];
4364
+ }
4365
+ }
4366
+ }
4367
+ };
4368
+
4369
+ var exCommandDispatcher = new ExCommandDispatcher();
4370
+
4371
+ /**
4372
+ * @param {CodeMirror} cm CodeMirror instance we are in.
4373
+ * @param {boolean} confirm Whether to confirm each replace.
4374
+ * @param {Cursor} lineStart Line to start replacing from.
4375
+ * @param {Cursor} lineEnd Line to stop replacing at.
4376
+ * @param {RegExp} query Query for performing matches with.
4377
+ * @param {string} replaceWith Text to replace matches with. May contain $1,
4378
+ * $2, etc for replacing captured groups using Javascript replace.
4379
+ * @param {function()} callback A callback for when the replace is done.
4380
+ */
4381
+ function doReplace(cm, confirm, global, lineStart, lineEnd, searchCursor, query,
4382
+ replaceWith, callback) {
4383
+ // Set up all the functions.
4384
+ cm.state.vim.exMode = true;
4385
+ var done = false;
4386
+ var lastPos = searchCursor.from();
4387
+ function replaceAll() {
4388
+ cm.operation(function() {
4389
+ while (!done) {
4390
+ replace();
4391
+ next();
4392
+ }
4393
+ stop();
4394
+ });
4395
+ }
4396
+ function replace() {
4397
+ var text = cm.getRange(searchCursor.from(), searchCursor.to());
4398
+ var newText = text.replace(query, replaceWith);
4399
+ searchCursor.replace(newText);
4400
+ }
4401
+ function next() {
4402
+ var found;
4403
+ // The below only loops to skip over multiple occurrences on the same
4404
+ // line when 'global' is not true.
4405
+ while(found = searchCursor.findNext() &&
4406
+ isInRange(searchCursor.from(), lineStart, lineEnd)) {
4407
+ if (!global && lastPos && searchCursor.from().line == lastPos.line) {
4408
+ continue;
4409
+ }
4410
+ cm.scrollIntoView(searchCursor.from(), 30);
4411
+ cm.setSelection(searchCursor.from(), searchCursor.to());
4412
+ lastPos = searchCursor.from();
4413
+ done = false;
4414
+ return;
4415
+ }
4416
+ done = true;
4417
+ }
4418
+ function stop(close) {
4419
+ if (close) { close(); }
4420
+ cm.focus();
4421
+ if (lastPos) {
4422
+ cm.setCursor(lastPos);
4423
+ var vim = cm.state.vim;
4424
+ vim.exMode = false;
4425
+ vim.lastHPos = vim.lastHSPos = lastPos.ch;
4426
+ }
4427
+ if (callback) { callback(); }
4428
+ }
4429
+ function onPromptKeyDown(e, _value, close) {
4430
+ // Swallow all keys.
4431
+ CodeMirror.e_stop(e);
4432
+ var keyName = CodeMirror.keyName(e);
4433
+ switch (keyName) {
4434
+ case 'Y':
4435
+ replace(); next(); break;
4436
+ case 'N':
4437
+ next(); break;
4438
+ case 'A':
4439
+ // replaceAll contains a call to close of its own. We don't want it
4440
+ // to fire too early or multiple times.
4441
+ var savedCallback = callback;
4442
+ callback = undefined;
4443
+ cm.operation(replaceAll);
4444
+ callback = savedCallback;
4445
+ break;
4446
+ case 'L':
4447
+ replace();
4448
+ // fall through and exit.
4449
+ case 'Q':
4450
+ case 'Esc':
4451
+ case 'Ctrl-C':
4452
+ case 'Ctrl-[':
4453
+ stop(close);
4454
+ break;
4455
+ }
4456
+ if (done) { stop(close); }
4457
+ return true;
4458
+ }
4459
+
4460
+ // Actually do replace.
4461
+ next();
4462
+ if (done) {
4463
+ showConfirm(cm, 'No matches for ' + query.source);
4464
+ return;
4465
+ }
4466
+ if (!confirm) {
4467
+ replaceAll();
4468
+ if (callback) { callback(); };
4469
+ return;
4470
+ }
4471
+ showPrompt(cm, {
4472
+ prefix: 'replace with <strong>' + replaceWith + '</strong> (y/n/a/q/l)',
4473
+ onKeyDown: onPromptKeyDown
4474
+ });
4475
+ }
4476
+
4477
+ CodeMirror.keyMap.vim = {
4478
+ attach: attachVimMap,
4479
+ detach: detachVimMap
4480
+ };
4481
+
4482
+ function exitInsertMode(cm) {
4483
+ var vim = cm.state.vim;
4484
+ var macroModeState = vimGlobalState.macroModeState;
4485
+ var insertModeChangeRegister = vimGlobalState.registerController.getRegister('.');
4486
+ var isPlaying = macroModeState.isPlaying;
4487
+ var lastChange = macroModeState.lastInsertModeChanges;
4488
+ // In case of visual block, the insertModeChanges are not saved as a
4489
+ // single word, so we convert them to a single word
4490
+ // so as to update the ". register as expected in real vim.
4491
+ var text = [];
4492
+ if (!isPlaying) {
4493
+ var selLength = lastChange.inVisualBlock ? vim.lastSelection.visualBlock.height : 1;
4494
+ var changes = lastChange.changes;
4495
+ var text = [];
4496
+ var i = 0;
4497
+ // In case of multiple selections in blockwise visual,
4498
+ // the inserted text, for example: 'f<Backspace>oo', is stored as
4499
+ // 'f', 'f', InsertModeKey 'o', 'o', 'o', 'o'. (if you have a block with 2 lines).
4500
+ // We push the contents of the changes array as per the following:
4501
+ // 1. In case of InsertModeKey, just increment by 1.
4502
+ // 2. In case of a character, jump by selLength (2 in the example).
4503
+ while (i < changes.length) {
4504
+ // This loop will convert 'ff<bs>oooo' to 'f<bs>oo'.
4505
+ text.push(changes[i]);
4506
+ if (changes[i] instanceof InsertModeKey) {
4507
+ i++;
4508
+ } else {
4509
+ i+= selLength;
4510
+ }
4511
+ }
4512
+ lastChange.changes = text;
4513
+ cm.off('change', onChange);
4514
+ CodeMirror.off(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown);
4515
+ }
4516
+ if (!isPlaying && vim.insertModeRepeat > 1) {
4517
+ // Perform insert mode repeat for commands like 3,a and 3,o.
4518
+ repeatLastEdit(cm, vim, vim.insertModeRepeat - 1,
4519
+ true /** repeatForInsert */);
4520
+ vim.lastEditInputState.repeatOverride = vim.insertModeRepeat;
4521
+ }
4522
+ delete vim.insertModeRepeat;
4523
+ vim.insertMode = false;
4524
+ cm.setCursor(cm.getCursor().line, cm.getCursor().ch-1);
4525
+ cm.setOption('keyMap', 'vim');
4526
+ cm.setOption('disableInput', true);
4527
+ cm.toggleOverwrite(false); // exit replace mode if we were in it.
4528
+ // update the ". register before exiting insert mode
4529
+ insertModeChangeRegister.setText(lastChange.changes.join(''));
4530
+ CodeMirror.signal(cm, "vim-mode-change", {mode: "normal"});
4531
+ if (macroModeState.isRecording) {
4532
+ logInsertModeChange(macroModeState);
4533
+ }
4534
+ }
4535
+
4536
+ // The timeout in milliseconds for the two-character ESC keymap should be
4537
+ // adjusted according to your typing speed to prevent false positives.
4538
+ defineOption('insertModeEscKeysTimeout', 200, 'number');
4539
+
4540
+ CodeMirror.keyMap['vim-insert'] = {
4541
+ // TODO: override navigation keys so that Esc will cancel automatic
4542
+ // indentation from o, O, i_<CR>
4543
+ 'Ctrl-N': 'autocomplete',
4544
+ 'Ctrl-P': 'autocomplete',
4545
+ 'Enter': function(cm) {
4546
+ var fn = CodeMirror.commands.newlineAndIndentContinueComment ||
4547
+ CodeMirror.commands.newlineAndIndent;
4548
+ fn(cm);
4549
+ },
4550
+ fallthrough: ['default'],
4551
+ attach: attachVimMap,
4552
+ detach: detachVimMap
4553
+ };
4554
+
4555
+ CodeMirror.keyMap['await-second'] = {
4556
+ fallthrough: ['vim-insert'],
4557
+ attach: attachVimMap,
4558
+ detach: detachVimMap
4559
+ };
4560
+
4561
+ CodeMirror.keyMap['vim-replace'] = {
4562
+ 'Backspace': 'goCharLeft',
4563
+ fallthrough: ['vim-insert'],
4564
+ attach: attachVimMap,
4565
+ detach: detachVimMap
4566
+ };
4567
+
4568
+ function executeMacroRegister(cm, vim, macroModeState, registerName) {
4569
+ var register = vimGlobalState.registerController.getRegister(registerName);
4570
+ var keyBuffer = register.keyBuffer;
4571
+ var imc = 0;
4572
+ macroModeState.isPlaying = true;
4573
+ macroModeState.replaySearchQueries = register.searchQueries.slice(0);
4574
+ for (var i = 0; i < keyBuffer.length; i++) {
4575
+ var text = keyBuffer[i];
4576
+ var match, key;
4577
+ while (text) {
4578
+ // Pull off one command key, which is either a single character
4579
+ // or a special sequence wrapped in '<' and '>', e.g. '<Space>'.
4580
+ match = (/<\w+-.+?>|<\w+>|./).exec(text);
4581
+ key = match[0];
4582
+ text = text.substring(match.index + key.length);
4583
+ CodeMirror.Vim.handleKey(cm, key, 'macro');
4584
+ if (vim.insertMode) {
4585
+ var changes = register.insertModeChanges[imc++].changes;
4586
+ vimGlobalState.macroModeState.lastInsertModeChanges.changes =
4587
+ changes;
4588
+ repeatInsertModeChanges(cm, changes, 1);
4589
+ exitInsertMode(cm);
4590
+ }
4591
+ }
4592
+ };
4593
+ macroModeState.isPlaying = false;
4594
+ }
4595
+
4596
+ function logKey(macroModeState, key) {
4597
+ if (macroModeState.isPlaying) { return; }
4598
+ var registerName = macroModeState.latestRegister;
4599
+ var register = vimGlobalState.registerController.getRegister(registerName);
4600
+ if (register) {
4601
+ register.pushText(key);
4602
+ }
4603
+ }
4604
+
4605
+ function logInsertModeChange(macroModeState) {
4606
+ if (macroModeState.isPlaying) { return; }
4607
+ var registerName = macroModeState.latestRegister;
4608
+ var register = vimGlobalState.registerController.getRegister(registerName);
4609
+ if (register) {
4610
+ register.pushInsertModeChanges(macroModeState.lastInsertModeChanges);
4611
+ }
4612
+ }
4613
+
4614
+ function logSearchQuery(macroModeState, query) {
4615
+ if (macroModeState.isPlaying) { return; }
4616
+ var registerName = macroModeState.latestRegister;
4617
+ var register = vimGlobalState.registerController.getRegister(registerName);
4618
+ if (register) {
4619
+ register.pushSearchQuery(query);
4620
+ }
4621
+ }
4622
+
4623
+ /**
4624
+ * Listens for changes made in insert mode.
4625
+ * Should only be active in insert mode.
4626
+ */
4627
+ function onChange(_cm, changeObj) {
4628
+ var macroModeState = vimGlobalState.macroModeState;
4629
+ var lastChange = macroModeState.lastInsertModeChanges;
4630
+ if (!macroModeState.isPlaying) {
4631
+ while(changeObj) {
4632
+ lastChange.expectCursorActivityForChange = true;
4633
+ if (changeObj.origin == '+input' || changeObj.origin == 'paste'
4634
+ || changeObj.origin === undefined /* only in testing */) {
4635
+ var text = changeObj.text.join('\n');
4636
+ lastChange.changes.push(text);
4637
+ }
4638
+ // Change objects may be chained with next.
4639
+ changeObj = changeObj.next;
4640
+ }
4641
+ }
4642
+ }
4643
+
4644
+ /**
4645
+ * Listens for any kind of cursor activity on CodeMirror.
4646
+ */
4647
+ function onCursorActivity(cm) {
4648
+ var vim = cm.state.vim;
4649
+ if (vim.insertMode) {
4650
+ // Tracking cursor activity in insert mode (for macro support).
4651
+ var macroModeState = vimGlobalState.macroModeState;
4652
+ if (macroModeState.isPlaying) { return; }
4653
+ var lastChange = macroModeState.lastInsertModeChanges;
4654
+ if (lastChange.expectCursorActivityForChange) {
4655
+ lastChange.expectCursorActivityForChange = false;
4656
+ } else {
4657
+ // Cursor moved outside the context of an edit. Reset the change.
4658
+ lastChange.changes = [];
4659
+ }
4660
+ } else if (!cm.curOp.isVimOp) {
4661
+ handleExternalSelection(cm, vim);
4662
+ }
4663
+ if (vim.visualMode) {
4664
+ updateFakeCursor(cm);
4665
+ }
4666
+ }
4667
+ function updateFakeCursor(cm) {
4668
+ var vim = cm.state.vim;
4669
+ var from = copyCursor(vim.sel.head);
4670
+ var to = offsetCursor(from, 0, 1);
4671
+ if (vim.fakeCursor) {
4672
+ vim.fakeCursor.clear();
4673
+ }
4674
+ vim.fakeCursor = cm.markText(from, to, {className: 'cm-animate-fat-cursor'});
4675
+ }
4676
+ function handleExternalSelection(cm, vim) {
4677
+ var anchor = cm.getCursor('anchor');
4678
+ var head = cm.getCursor('head');
4679
+ // Enter or exit visual mode to match mouse selection.
4680
+ if (vim.visualMode && cursorEqual(head, anchor) && lineLength(cm, head.line) > head.ch) {
4681
+ exitVisualMode(cm, false);
4682
+ } else if (!vim.visualMode && !vim.insertMode && cm.somethingSelected()) {
4683
+ vim.visualMode = true;
4684
+ vim.visualLine = false;
4685
+ CodeMirror.signal(cm, "vim-mode-change", {mode: "visual"});
4686
+ }
4687
+ if (vim.visualMode) {
4688
+ // Bind CodeMirror selection model to vim selection model.
4689
+ // Mouse selections are considered visual characterwise.
4690
+ var headOffset = !cursorIsBefore(head, anchor) ? -1 : 0;
4691
+ var anchorOffset = cursorIsBefore(head, anchor) ? -1 : 0;
4692
+ head = offsetCursor(head, 0, headOffset);
4693
+ anchor = offsetCursor(anchor, 0, anchorOffset);
4694
+ vim.sel = {
4695
+ anchor: anchor,
4696
+ head: head
4697
+ };
4698
+ updateMark(cm, vim, '<', cursorMin(head, anchor));
4699
+ updateMark(cm, vim, '>', cursorMax(head, anchor));
4700
+ } else if (!vim.insertMode) {
4701
+ // Reset lastHPos if selection was modified by something outside of vim mode e.g. by mouse.
4702
+ vim.lastHPos = cm.getCursor().ch;
4703
+ }
4704
+ }
4705
+
4706
+ /** Wrapper for special keys pressed in insert mode */
4707
+ function InsertModeKey(keyName) {
4708
+ this.keyName = keyName;
4709
+ }
4710
+
4711
+ /**
4712
+ * Handles raw key down events from the text area.
4713
+ * - Should only be active in insert mode.
4714
+ * - For recording deletes in insert mode.
4715
+ */
4716
+ function onKeyEventTargetKeyDown(e) {
4717
+ var macroModeState = vimGlobalState.macroModeState;
4718
+ var lastChange = macroModeState.lastInsertModeChanges;
4719
+ var keyName = CodeMirror.keyName(e);
4720
+ function onKeyFound() {
4721
+ lastChange.changes.push(new InsertModeKey(keyName));
4722
+ return true;
4723
+ }
4724
+ if (keyName.indexOf('Delete') != -1 || keyName.indexOf('Backspace') != -1) {
4725
+ CodeMirror.lookupKey(keyName, 'vim-insert', onKeyFound);
4726
+ }
4727
+ }
4728
+
4729
+ /**
4730
+ * Repeats the last edit, which includes exactly 1 command and at most 1
4731
+ * insert. Operator and motion commands are read from lastEditInputState,
4732
+ * while action commands are read from lastEditActionCommand.
4733
+ *
4734
+ * If repeatForInsert is true, then the function was called by
4735
+ * exitInsertMode to repeat the insert mode changes the user just made. The
4736
+ * corresponding enterInsertMode call was made with a count.
4737
+ */
4738
+ function repeatLastEdit(cm, vim, repeat, repeatForInsert) {
4739
+ var macroModeState = vimGlobalState.macroModeState;
4740
+ macroModeState.isPlaying = true;
4741
+ var isAction = !!vim.lastEditActionCommand;
4742
+ var cachedInputState = vim.inputState;
4743
+ function repeatCommand() {
4744
+ if (isAction) {
4745
+ commandDispatcher.processAction(cm, vim, vim.lastEditActionCommand);
4746
+ } else {
4747
+ commandDispatcher.evalInput(cm, vim);
4748
+ }
4749
+ }
4750
+ function repeatInsert(repeat) {
4751
+ if (macroModeState.lastInsertModeChanges.changes.length > 0) {
4752
+ // For some reason, repeat cw in desktop VIM does not repeat
4753
+ // insert mode changes. Will conform to that behavior.
4754
+ repeat = !vim.lastEditActionCommand ? 1 : repeat;
4755
+ var changeObject = macroModeState.lastInsertModeChanges;
4756
+ repeatInsertModeChanges(cm, changeObject.changes, repeat);
4757
+ }
4758
+ }
4759
+ vim.inputState = vim.lastEditInputState;
4760
+ if (isAction && vim.lastEditActionCommand.interlaceInsertRepeat) {
4761
+ // o and O repeat have to be interlaced with insert repeats so that the
4762
+ // insertions appear on separate lines instead of the last line.
4763
+ for (var i = 0; i < repeat; i++) {
4764
+ repeatCommand();
4765
+ repeatInsert(1);
4766
+ }
4767
+ } else {
4768
+ if (!repeatForInsert) {
4769
+ // Hack to get the cursor to end up at the right place. If I is
4770
+ // repeated in insert mode repeat, cursor will be 1 insert
4771
+ // change set left of where it should be.
4772
+ repeatCommand();
4773
+ }
4774
+ repeatInsert(repeat);
4775
+ }
4776
+ vim.inputState = cachedInputState;
4777
+ if (vim.insertMode && !repeatForInsert) {
4778
+ // Don't exit insert mode twice. If repeatForInsert is set, then we
4779
+ // were called by an exitInsertMode call lower on the stack.
4780
+ exitInsertMode(cm);
4781
+ }
4782
+ macroModeState.isPlaying = false;
4783
+ };
4784
+
4785
+ function repeatInsertModeChanges(cm, changes, repeat) {
4786
+ function keyHandler(binding) {
4787
+ if (typeof binding == 'string') {
4788
+ CodeMirror.commands[binding](cm);
4789
+ } else {
4790
+ binding(cm);
4791
+ }
4792
+ return true;
4793
+ }
4794
+ var head = cm.getCursor('head');
4795
+ var inVisualBlock = vimGlobalState.macroModeState.lastInsertModeChanges.inVisualBlock;
4796
+ if (inVisualBlock) {
4797
+ // Set up block selection again for repeating the changes.
4798
+ var vim = cm.state.vim;
4799
+ var lastSel = vim.lastSelection;
4800
+ var offset = getOffset(lastSel.anchor, lastSel.head);
4801
+ selectForInsert(cm, head, offset.line + 1);
4802
+ repeat = cm.listSelections().length;
4803
+ cm.setCursor(head);
4804
+ }
4805
+ for (var i = 0; i < repeat; i++) {
4806
+ if (inVisualBlock) {
4807
+ cm.setCursor(offsetCursor(head, i, 0));
4808
+ }
4809
+ for (var j = 0; j < changes.length; j++) {
4810
+ var change = changes[j];
4811
+ if (change instanceof InsertModeKey) {
4812
+ CodeMirror.lookupKey(change.keyName, 'vim-insert', keyHandler);
4813
+ } else {
4814
+ var cur = cm.getCursor();
4815
+ cm.replaceRange(change, cur, cur);
4816
+ }
4817
+ }
4818
+ }
4819
+ if (inVisualBlock) {
4820
+ cm.setCursor(offsetCursor(head, 0, 1));
4821
+ }
4822
+ }
4823
+
4824
+ resetVimGlobalState();
4825
+ return vimApi;
4826
+ };
4827
+ // Initialize Vim and make it available as an API.
4828
+ CodeMirror.Vim = Vim();
4829
+ });