kms 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
+ });