burp_cms 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (412) hide show
  1. data/LICENSE.txt +165 -0
  2. data/README.markdown +11 -0
  3. data/Rakefile +56 -0
  4. data/app/assets/images/burp/add-group-to-menu-1.png +0 -0
  5. data/app/assets/images/burp/add-group-to-menu-2.png +0 -0
  6. data/app/assets/images/burp/add-group-to-menu-3.png +0 -0
  7. data/app/assets/images/burp/add-group-to-menu-4.png +0 -0
  8. data/app/assets/images/burp/add-image-1.png +0 -0
  9. data/app/assets/images/burp/add-image-2.png +0 -0
  10. data/app/assets/images/burp/add-image-3.png +0 -0
  11. data/app/assets/images/burp/add-image-4.png +0 -0
  12. data/app/assets/images/burp/add-image-5.png +0 -0
  13. data/app/assets/images/burp/add-link-to-group-1.png +0 -0
  14. data/app/assets/images/burp/add-link-to-group-2.png +0 -0
  15. data/app/assets/images/burp/add-link-to-group-3.png +0 -0
  16. data/app/assets/images/burp/add-link-to-menu-1.png +0 -0
  17. data/app/assets/images/burp/add-link-to-menu-2.png +0 -0
  18. data/app/assets/images/burp/add-link-to-menu-3.png +0 -0
  19. data/app/assets/images/burp/add-link-to-menu-4.png +0 -0
  20. data/app/assets/images/burp/add-page-to-menu-1.png +0 -0
  21. data/app/assets/images/burp/add-page-to-menu-2.png +0 -0
  22. data/app/assets/images/burp/add-page-to-menu-3.png +0 -0
  23. data/app/assets/images/burp/add-page-to-menu-4.png +0 -0
  24. data/app/assets/images/burp/add-page-to-menu-5.png +0 -0
  25. data/app/assets/images/burp/adding-a-page-1.png +0 -0
  26. data/app/assets/images/burp/adding-a-page-2.png +0 -0
  27. data/app/assets/images/burp/adding-a-page-3.png +0 -0
  28. data/app/assets/images/burp/adding-a-page-4.png +0 -0
  29. data/app/assets/images/burp/change-page-title-1.png +0 -0
  30. data/app/assets/images/burp/change-page-title-2.png +0 -0
  31. data/app/assets/images/burp/change-page-title-3.png +0 -0
  32. data/app/assets/images/burp/change-page-title-4.png +0 -0
  33. data/app/assets/images/burp/change-the-text-1.png +0 -0
  34. data/app/assets/images/burp/change-the-text-2.png +0 -0
  35. data/app/assets/images/burp/change-the-text-3.png +0 -0
  36. data/app/assets/images/burp/enter-page-edit-mode-1.png +0 -0
  37. data/app/assets/images/burp/enter-page-edit-mode-2.png +0 -0
  38. data/app/assets/images/burp/enter-page-edit-mode-3.png +0 -0
  39. data/app/assets/images/burp/enter-page-edit-mode-4.jpg +0 -0
  40. data/app/assets/images/burp/enter-page-edit-mode-4.png +0 -0
  41. data/app/assets/images/burp/img/glyphicons-halflings-white.png +0 -0
  42. data/app/assets/images/burp/img/glyphicons-halflings.png +0 -0
  43. data/app/assets/images/burp/move-link-to-bottom-of-menu-1.png +0 -0
  44. data/app/assets/images/burp/move-link-to-bottom-of-menu-2.png +0 -0
  45. data/app/assets/images/burp/move-link-to-bottom-of-menu-3.png +0 -0
  46. data/app/assets/images/burp/remove-a-page-1.png +0 -0
  47. data/app/assets/images/burp/remove-a-page-2.png +0 -0
  48. data/app/assets/images/burp/remove-a-page-3.png +0 -0
  49. data/app/assets/images/burp/remove-a-page-4.png +0 -0
  50. data/app/assets/images/burp/remove-image-1.png +0 -0
  51. data/app/assets/images/burp/remove-image-2.png +0 -0
  52. data/app/assets/images/burp/remove-image-3.png +0 -0
  53. data/app/assets/images/burp/remove-image-4.png +0 -0
  54. data/app/assets/images/burp/remove-image-5.png +0 -0
  55. data/app/assets/images/burp/remove-page-from-menu-1.png +0 -0
  56. data/app/assets/images/burp/remove-page-from-menu-2.png +0 -0
  57. data/app/assets/images/burp/remove-page-from-menu-3.png +0 -0
  58. data/app/assets/images/burp/remove-page-from-menu-4.png +0 -0
  59. data/app/assets/javascripts/burp/application.js +22 -0
  60. data/app/assets/javascripts/burp/burp.js +2 -0
  61. data/app/assets/javascripts/burp/cms_helper.js +49 -0
  62. data/app/assets/javascripts/burp/edit-page.js +22 -0
  63. data/app/assets/javascripts/burp/lib/bootstrap.min.js +6 -0
  64. data/app/assets/javascripts/burp/lib/debug.js +222 -0
  65. data/app/assets/javascripts/burp/lib/fileupload.js +1255 -0
  66. data/app/assets/javascripts/burp/lib/missing-restful-verbs.js +46 -0
  67. data/app/assets/javascripts/burp/menu-functions.js +28 -0
  68. data/app/assets/javascripts/burp/pages-drag-and-drop.js +151 -0
  69. data/app/assets/packages/burp/editing/css/dropzone.css +15 -0
  70. data/app/assets/packages/burp/editing/css/edit-content.less +126 -0
  71. data/app/assets/packages/burp/editing/css/gallery.css +167 -0
  72. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/LICENSE +23 -0
  73. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/README.md +8 -0
  74. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/demo/activeline.html +72 -0
  75. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/demo/changemode.html +50 -0
  76. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/demo/closetag.html +65 -0
  77. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/demo/complete.html +70 -0
  78. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/demo/emacs.html +59 -0
  79. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/demo/folding.html +61 -0
  80. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/demo/formatting.html +80 -0
  81. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/demo/fullscreen.html +152 -0
  82. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/demo/loadmode.html +39 -0
  83. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/demo/marker.html +52 -0
  84. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/demo/matchhighlighter.html +37 -0
  85. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/demo/multiplex.html +59 -0
  86. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/demo/mustache.html +57 -0
  87. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/demo/preview.html +76 -0
  88. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/demo/resize.html +41 -0
  89. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/demo/runmode.html +49 -0
  90. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/demo/search.html +83 -0
  91. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/demo/theme.html +78 -0
  92. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/demo/vim.html +50 -0
  93. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/demo/visibletabs.html +61 -0
  94. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/doc/baboon.png +0 -0
  95. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/doc/baboon_vector.svg +153 -0
  96. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/doc/compress.html +148 -0
  97. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/doc/docs.css +154 -0
  98. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/doc/internals.html +494 -0
  99. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/doc/manual.html +1128 -0
  100. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/doc/oldrelease.html +267 -0
  101. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/doc/reporting.html +57 -0
  102. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/doc/upgrade_v2.2.html +95 -0
  103. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/index.html +417 -0
  104. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/keymap/emacs.js +29 -0
  105. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/keymap/vim.js +766 -0
  106. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/lib/codemirror.css +168 -0
  107. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/lib/codemirror.js +3181 -0
  108. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/lib/util/closetag.js +146 -0
  109. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/lib/util/dialog.css +23 -0
  110. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/lib/util/dialog.js +63 -0
  111. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/lib/util/foldcode.js +196 -0
  112. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/lib/util/formatting.js +297 -0
  113. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/lib/util/javascript-hint.js +134 -0
  114. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/lib/util/loadmode.js +51 -0
  115. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/lib/util/match-highlighter.js +44 -0
  116. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/lib/util/multiplex.js +72 -0
  117. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/lib/util/overlay.js +52 -0
  118. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/lib/util/pig-hint.js +123 -0
  119. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/lib/util/runmode.js +49 -0
  120. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/lib/util/search.js +118 -0
  121. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/lib/util/searchcursor.js +117 -0
  122. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/lib/util/simple-hint.css +16 -0
  123. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/lib/util/simple-hint.js +72 -0
  124. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/clike/clike.js +271 -0
  125. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/clike/index.html +101 -0
  126. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/clike/scala.html +765 -0
  127. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/clojure/clojure.js +207 -0
  128. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/clojure/index.html +66 -0
  129. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/coffeescript/LICENSE +22 -0
  130. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/coffeescript/coffeescript.js +347 -0
  131. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/coffeescript/index.html +727 -0
  132. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/css/css.js +124 -0
  133. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/css/index.html +55 -0
  134. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/diff/diff.js +32 -0
  135. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/diff/index.html +104 -0
  136. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/ecl/ecl.js +203 -0
  137. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/ecl/index.html +42 -0
  138. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/erlang/erlang.js +251 -0
  139. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/erlang/index.html +61 -0
  140. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/gfm/gfm.js +144 -0
  141. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/gfm/index.html +47 -0
  142. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/go/go.js +170 -0
  143. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/go/index.html +72 -0
  144. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/groovy/groovy.js +210 -0
  145. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/groovy/index.html +71 -0
  146. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/haskell/haskell.js +242 -0
  147. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/haskell/index.html +60 -0
  148. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/htmlembedded/htmlembedded.js +68 -0
  149. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/htmlembedded/index.html +49 -0
  150. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/htmlmixed/htmlmixed.js +85 -0
  151. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/htmlmixed/index.html +51 -0
  152. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/javascript/index.html +77 -0
  153. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/javascript/javascript.js +361 -0
  154. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/jinja2/index.html +37 -0
  155. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/jinja2/jinja2.js +42 -0
  156. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/less/index.html +618 -0
  157. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/less/less.js +232 -0
  158. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/lua/index.html +72 -0
  159. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/lua/lua.js +140 -0
  160. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/markdown/index.html +338 -0
  161. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/markdown/markdown.js +245 -0
  162. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/mysql/index.html +41 -0
  163. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/mysql/mysql.js +188 -0
  164. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/ntriples/index.html +32 -0
  165. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/ntriples/ntriples.js +172 -0
  166. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/pascal/LICENSE +7 -0
  167. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/pascal/index.html +48 -0
  168. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/pascal/pascal.js +94 -0
  169. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/perl/LICENSE +19 -0
  170. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/perl/index.html +62 -0
  171. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/perl/perl.js +816 -0
  172. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/php/index.html +48 -0
  173. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/php/php.js +150 -0
  174. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/pig/index.html +42 -0
  175. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/pig/pig.js +172 -0
  176. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/plsql/index.html +62 -0
  177. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/plsql/plsql.js +217 -0
  178. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/properties/index.html +40 -0
  179. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/properties/properties.js +63 -0
  180. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/python/LICENSE.txt +21 -0
  181. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/python/index.html +122 -0
  182. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/python/python.js +338 -0
  183. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/r/LICENSE +24 -0
  184. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/r/index.html +73 -0
  185. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/r/r.js +141 -0
  186. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/rpm/changes/changes.js +19 -0
  187. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/rpm/changes/index.html +53 -0
  188. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/rpm/spec/index.html +99 -0
  189. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/rpm/spec/spec.css +5 -0
  190. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/rpm/spec/spec.js +66 -0
  191. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/rst/index.html +525 -0
  192. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/rst/rst.js +326 -0
  193. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/ruby/LICENSE +24 -0
  194. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/ruby/index.html +171 -0
  195. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/ruby/ruby.js +195 -0
  196. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/rust/index.html +48 -0
  197. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/rust/rust.js +432 -0
  198. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/scheme/index.html +64 -0
  199. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/scheme/scheme.js +230 -0
  200. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/shell/index.html +50 -0
  201. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/shell/shell.js +103 -0
  202. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/smalltalk/index.html +55 -0
  203. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/smalltalk/smalltalk.js +139 -0
  204. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/smarty/index.html +82 -0
  205. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/smarty/smarty.js +148 -0
  206. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/sparql/index.html +40 -0
  207. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/sparql/sparql.js +143 -0
  208. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/stex/index.html +95 -0
  209. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/stex/stex.js +182 -0
  210. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/stex/test.html +263 -0
  211. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/tiddlywiki/index.html +140 -0
  212. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/tiddlywiki/tiddlywiki.css +14 -0
  213. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/tiddlywiki/tiddlywiki.js +384 -0
  214. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/tiki/index.html +82 -0
  215. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/tiki/tiki.css +26 -0
  216. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/tiki/tiki.js +316 -0
  217. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/vbscript/index.html +42 -0
  218. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/vbscript/vbscript.js +26 -0
  219. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/velocity/index.html +103 -0
  220. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/velocity/velocity.js +146 -0
  221. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/verilog/index.html +210 -0
  222. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/verilog/verilog.js +194 -0
  223. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/xml/index.html +44 -0
  224. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/xml/xml.js +325 -0
  225. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/xquery/LICENSE +20 -0
  226. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/xquery/index.html +222 -0
  227. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/xquery/test/index.html +27 -0
  228. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/xquery/test/testBase.js +42 -0
  229. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/xquery/test/testEmptySequenceKeyword.js +16 -0
  230. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/xquery/test/testMultiAttr.js +16 -0
  231. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/xquery/test/testNamespaces.js +91 -0
  232. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/xquery/test/testProcessingInstructions.js +16 -0
  233. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/xquery/test/testQuotes.js +19 -0
  234. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/xquery/xquery.js +448 -0
  235. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/yaml/index.html +67 -0
  236. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/mode/yaml/yaml.js +95 -0
  237. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/package.json +29 -0
  238. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/test/index.html +28 -0
  239. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/test/mode_test.css +22 -0
  240. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/test/mode_test.js +164 -0
  241. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/test/test.js +344 -0
  242. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/theme/ambiance.css +81 -0
  243. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/theme/blackboard.css +25 -0
  244. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/theme/cobalt.css +18 -0
  245. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/theme/eclipse.css +25 -0
  246. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/theme/elegant.css +10 -0
  247. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/theme/erlang-dark.css +21 -0
  248. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/theme/lesser-dark.css +44 -0
  249. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/theme/monokai.css +28 -0
  250. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/theme/neat.css +9 -0
  251. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/theme/night.css +21 -0
  252. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/theme/rubyblue.css +21 -0
  253. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/theme/vibrant-ink.css +27 -0
  254. data/app/assets/packages/burp/editing/dep/CodeMirror-2.3/theme/xq-dark.css +46 -0
  255. data/app/assets/packages/burp/editing/dep/FontAwesome/FontAwesome-Vectors.pdf +3180 -7
  256. data/app/assets/packages/burp/editing/dep/FontAwesome/FontAwesome.ttf +0 -0
  257. data/app/assets/packages/burp/editing/dep/FontAwesome/README.md +18 -0
  258. data/app/assets/packages/burp/editing/dep/FontAwesome/css/font-awesome-ie7.css +645 -0
  259. data/app/assets/packages/burp/editing/dep/FontAwesome/css/font-awesome.less +309 -0
  260. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/css/font-awesome-ie7.css +213 -0
  261. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/css/font-awesome.css +303 -0
  262. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/css/prettify.css +30 -0
  263. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/css/site.css +4904 -0
  264. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/font/fontawesome-webfont.eot +0 -0
  265. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/font/fontawesome-webfont.svg +255 -0
  266. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/font/fontawesome-webfont.ttf +0 -0
  267. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/font/fontawesome-webfont.woff +0 -0
  268. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/font/museo_slab_300-webfont.eot +0 -0
  269. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/font/museo_slab_300-webfont.ttf +0 -0
  270. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/font/museo_slab_500-webfont.eot +0 -0
  271. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/font/museo_slab_500-webfont.ttf +0 -0
  272. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/font/proximanova-webfont.eot +0 -0
  273. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/font/proximanova-webfont.ttf +0 -0
  274. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/ico/favicon.ico +0 -0
  275. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/js/backbone.min.js +37 -0
  276. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/js/index/index.js +89 -0
  277. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/js/jquery-1.7.1.min.js +4 -0
  278. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/js/prettify.min.js +28 -0
  279. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/js/tw-bs-201/bootstrap-alert.js +94 -0
  280. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/js/tw-bs-201/bootstrap-button.js +98 -0
  281. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/js/tw-bs-201/bootstrap-carousel.js +157 -0
  282. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/js/tw-bs-201/bootstrap-collapse.js +136 -0
  283. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/js/tw-bs-201/bootstrap-dropdown.js +92 -0
  284. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/js/tw-bs-201/bootstrap-modal.js +210 -0
  285. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/js/tw-bs-201/bootstrap-popover.js +95 -0
  286. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/js/tw-bs-201/bootstrap-scrollspy.js +125 -0
  287. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/js/tw-bs-201/bootstrap-tab.js +130 -0
  288. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/js/tw-bs-201/bootstrap-tooltip.js +270 -0
  289. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/js/tw-bs-201/bootstrap-transition.js +51 -0
  290. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/js/tw-bs-201/bootstrap-typeahead.js +271 -0
  291. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/js/underscore.min.js +31 -0
  292. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/font-awesome-ie7.less +245 -0
  293. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/font-awesome.less +327 -0
  294. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/font-site.less +26 -0
  295. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/mixins.less +43 -0
  296. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/site.less +300 -0
  297. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/accordion.less +33 -0
  298. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/alerts.less +58 -0
  299. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/bootstrap.less +62 -0
  300. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/breadcrumbs.less +24 -0
  301. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/button-groups.less +191 -0
  302. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/buttons.less +191 -0
  303. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/carousel.less +121 -0
  304. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/close.less +29 -0
  305. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/code.less +57 -0
  306. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/component-animations.less +20 -0
  307. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/dropdowns.less +143 -0
  308. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/forms.less +584 -0
  309. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/grid.less +5 -0
  310. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/hero-unit.less +22 -0
  311. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/labels-badges.less +55 -0
  312. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/layouts.less +17 -0
  313. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/mixins.less +631 -0
  314. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/modals.less +90 -0
  315. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/navbar.less +364 -0
  316. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/navs.less +363 -0
  317. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/pager.less +36 -0
  318. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/pagination.less +56 -0
  319. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/popovers.less +49 -0
  320. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/progress-bars.less +117 -0
  321. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/reset.less +126 -0
  322. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/responsive-1200px-min.less +26 -0
  323. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/responsive-767px-max.less +149 -0
  324. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/responsive-768px-979px.less +17 -0
  325. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/responsive-navbar.less +146 -0
  326. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/responsive-utilities.less +41 -0
  327. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/responsive.less +48 -0
  328. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/scaffolding.less +29 -0
  329. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/sprites.less +191 -0
  330. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/tables.less +176 -0
  331. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/thumbnails.less +47 -0
  332. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/tooltip.less +35 -0
  333. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/type.less +235 -0
  334. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/utilities.less +23 -0
  335. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/variables.less +205 -0
  336. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/twbs-203/wells.less +27 -0
  337. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/assets/less/variables.less +206 -0
  338. data/app/assets/packages/burp/editing/dep/FontAwesome/docs/index.html +1087 -0
  339. data/app/assets/packages/burp/editing/dep/FontAwesome/font/fontawesome-webfont.eot +0 -0
  340. data/app/assets/packages/burp/editing/dep/FontAwesome/font/fontawesome-webfont.svg +255 -0
  341. data/app/assets/packages/burp/editing/dep/FontAwesome/font/fontawesome-webfont.ttf +0 -0
  342. data/app/assets/packages/burp/editing/dep/FontAwesome/font/fontawesome-webfont.woff +0 -0
  343. data/app/assets/packages/burp/editing/dep/FontAwesome/less/font-awesome-ie7.less +245 -0
  344. data/app/assets/packages/burp/editing/dep/FontAwesome/less/font-awesome.less +329 -0
  345. data/app/assets/packages/burp/editing/dep/FontAwesome/sass/font-awesome.sass +712 -0
  346. data/app/assets/packages/burp/editing/dep/FontAwesome/sass/font-awesome.scss +329 -0
  347. data/app/assets/packages/burp/editing/js/admin-dock.js +282 -0
  348. data/app/assets/packages/burp/editing/js/content-decorator.js +321 -0
  349. data/app/assets/packages/burp/editing/js/main.js +331 -0
  350. data/app/assets/packages/burp/editing/js/marked.js +781 -0
  351. data/app/assets/packages/burp/editing/js/md5.js +207 -0
  352. data/app/assets/packages/burp/editing/js/stay.js +143 -0
  353. data/app/assets/packages/burp/editing.js +23 -0
  354. data/app/assets/packages/burp/editing.less +7 -0
  355. data/app/assets/packages/gritter/README.markdown +57 -0
  356. data/app/assets/packages/gritter/css/jquery.gritter.less +101 -0
  357. data/app/assets/packages/gritter/gritter.js +3 -0
  358. data/app/assets/packages/gritter/gritter.less +3 -0
  359. data/app/assets/packages/gritter/images/gritter-light.png +0 -0
  360. data/app/assets/packages/gritter/images/gritter-long.png +0 -0
  361. data/app/assets/packages/gritter/images/gritter.png +0 -0
  362. data/app/assets/packages/gritter/images/ie-spacer.gif +0 -0
  363. data/app/assets/packages/gritter/images/trees.jpg +0 -0
  364. data/app/assets/packages/gritter/index.html +269 -0
  365. data/app/assets/packages/gritter/js/jquery.gritter.js +418 -0
  366. data/app/assets/packages/gritter/js/jquery.gritter.min.js +1 -0
  367. data/app/assets/stylesheets/burp/application.less +82 -0
  368. data/app/assets/stylesheets/burp/bootstrap.less +6158 -0
  369. data/app/assets/stylesheets/burp/docs.less +83 -0
  370. data/app/assets/stylesheets/burp/fileupload.less +31 -0
  371. data/app/assets/stylesheets/burp/views/dnd-menu.less +87 -0
  372. data/app/assets/stylesheets/burp/views/files/index.less +40 -0
  373. data/app/assets/stylesheets/burp/views/pages/index.less +4 -0
  374. data/app/assets/stylesheets/burp/views/static/help.less +11 -0
  375. data/app/controllers/burp/application_controller.rb +45 -0
  376. data/app/controllers/burp/catch_all_controller.rb +24 -0
  377. data/app/controllers/burp/error_controller.rb +7 -0
  378. data/app/controllers/burp/files_controller.rb +92 -0
  379. data/app/controllers/burp/groups_controller.rb +49 -0
  380. data/app/controllers/burp/links_controller.rb +48 -0
  381. data/app/controllers/burp/menus_controller.rb +33 -0
  382. data/app/controllers/burp/pages_controller.rb +112 -0
  383. data/app/controllers/burp/static_controller.rb +11 -0
  384. data/app/helpers/burp/application_helper.rb +4 -0
  385. data/app/lib/burp/access.rb +63 -0
  386. data/app/lib/burp/group.rb +110 -0
  387. data/app/lib/burp/link.rb +66 -0
  388. data/app/lib/burp/page.rb +23 -0
  389. data/app/lib/burp/util/upload_handler.rb +84 -0
  390. data/app/lib/burp/util.rb +39 -0
  391. data/app/models/burp/file_model.rb +45 -0
  392. data/app/models/burp/menu.rb +60 -0
  393. data/app/models/burp/page_model.rb +158 -0
  394. data/app/views/burp/files/index.html.erb +87 -0
  395. data/app/views/burp/groups/edit.html.erb +18 -0
  396. data/app/views/burp/links/edit.html.erb +19 -0
  397. data/app/views/burp/menus/edit.html.erb +157 -0
  398. data/app/views/burp/menus/index.html.erb +9 -0
  399. data/app/views/burp/pages/edit.html.erb +20 -0
  400. data/app/views/burp/pages/index.html.erb +114 -0
  401. data/app/views/burp/static/help.html.erb +543 -0
  402. data/app/views/burp/static/index.html.erb +15 -0
  403. data/app/views/layouts/burp/application.html.erb +57 -0
  404. data/config/cucumber.yml +12 -0
  405. data/config/initializers/bootstrap_form.rb +2 -0
  406. data/config/routes.rb +30 -0
  407. data/lib/burp/capistrano.rb +51 -0
  408. data/lib/burp/engine.rb +15 -0
  409. data/lib/burp/version.rb +3 -0
  410. data/lib/burp_cms.rb +64 -0
  411. data/lib/tasks/burp_tasks.rake +99 -0
  412. metadata +845 -0
@@ -0,0 +1,766 @@
1
+ // Supported keybindings:
2
+ //
3
+ // Cursor movement:
4
+ // h, j, k, l
5
+ // e, E, w, W, b, B
6
+ // Ctrl-f, Ctrl-b
7
+ // Ctrl-n, Ctrl-p
8
+ // $, ^, 0
9
+ // G
10
+ // ge, gE
11
+ // gg
12
+ // f<char>, F<char>, t<char>, T<char>
13
+ // Ctrl-o, Ctrl-i TODO (FIXME - Ctrl-O wont work in Chrome)
14
+ // /, ?, n, N TODO (does not work)
15
+ // #, * TODO
16
+ //
17
+ // Entering insert mode:
18
+ // i, I, a, A, o, O
19
+ // s
20
+ // ce, cb (without support for number of actions like c3e - TODO)
21
+ // cc
22
+ // S, C TODO
23
+ // cf<char>, cF<char>, ct<char>, cT<char>
24
+ //
25
+ // Deleting text:
26
+ // x, X
27
+ // J
28
+ // dd, D
29
+ // de, db (without support for number of actions like d3e - TODO)
30
+ // df<char>, dF<char>, dt<char>, dT<char>
31
+ //
32
+ // Yanking and pasting:
33
+ // yy, Y
34
+ // p, P
35
+ // p'<char> TODO - test
36
+ // y'<char> TODO - test
37
+ // m<char> TODO - test
38
+ //
39
+ // Changing text in place:
40
+ // ~
41
+ // r<char>
42
+ //
43
+ // Visual mode:
44
+ // v, V TODO
45
+ //
46
+ // Misc:
47
+ // . TODO
48
+ //
49
+
50
+ (function() {
51
+ var count = "";
52
+ var sdir = "f";
53
+ var buf = "";
54
+ var yank = 0;
55
+ var mark = [];
56
+ var reptTimes = 0;
57
+ function emptyBuffer() { buf = ""; }
58
+ function pushInBuffer(str) { buf += str; }
59
+ function pushCountDigit(digit) { return function(cm) {count += digit;}; }
60
+ function popCount() { var i = parseInt(count, 10); count = ""; return i || 1; }
61
+ function iterTimes(func) {
62
+ for (var i = 0, c = popCount(); i < c; ++i) func(i, i == c - 1);
63
+ }
64
+ function countTimes(func) {
65
+ if (typeof func == "string") func = CodeMirror.commands[func];
66
+ return function(cm) { iterTimes(function () { func(cm); }); };
67
+ }
68
+
69
+ function iterObj(o, f) {
70
+ for (var prop in o) if (o.hasOwnProperty(prop)) f(prop, o[prop]);
71
+ }
72
+ function iterList(l, f) {
73
+ for (var i in l) f(l[i]);
74
+ }
75
+ function toLetter(ch) {
76
+ // T -> t, Shift-T -> T, '*' -> *, "Space" -> " "
77
+ if (ch.slice(0, 6) == "Shift-") {
78
+ return ch.slice(0, 1);
79
+ } else {
80
+ if (ch == "Space") return " ";
81
+ if (ch.length == 3 && ch[0] == "'" && ch[2] == "'") return ch[1];
82
+ return ch.toLowerCase();
83
+ }
84
+ }
85
+ var SPECIAL_SYMBOLS = "~`!@#$%^&*()_-+=[{}]\\|/?.,<>:;\"\'1234567890";
86
+ function toCombo(ch) {
87
+ // t -> T, T -> Shift-T, * -> '*', " " -> "Space"
88
+ if (ch == " ") return "Space";
89
+ var specialIdx = SPECIAL_SYMBOLS.indexOf(ch);
90
+ if (specialIdx != -1) return "'" + ch + "'";
91
+ if (ch.toLowerCase() == ch) return ch.toUpperCase();
92
+ return "Shift-" + ch.toUpperCase();
93
+ }
94
+
95
+ var word = [/\w/, /[^\w\s]/], bigWord = [/\S/];
96
+ function findWord(line, pos, dir, regexps) {
97
+ var stop = 0, next = -1;
98
+ if (dir > 0) { stop = line.length; next = 0; }
99
+ var start = stop, end = stop;
100
+ // Find bounds of next one.
101
+ outer: for (; pos != stop; pos += dir) {
102
+ for (var i = 0; i < regexps.length; ++i) {
103
+ if (regexps[i].test(line.charAt(pos + next))) {
104
+ start = pos;
105
+ for (; pos != stop; pos += dir) {
106
+ if (!regexps[i].test(line.charAt(pos + next))) break;
107
+ }
108
+ end = pos;
109
+ break outer;
110
+ }
111
+ }
112
+ }
113
+ return {from: Math.min(start, end), to: Math.max(start, end)};
114
+ }
115
+ function moveToWord(cm, regexps, dir, times, where) {
116
+ var cur = cm.getCursor();
117
+
118
+ for (var i = 0; i < times; i++) {
119
+ var line = cm.getLine(cur.line), startCh = cur.ch, word;
120
+ while (true) {
121
+ // If we're at start/end of line, start on prev/next respectivly
122
+ if (cur.ch == line.length && dir > 0) {
123
+ cur.line++;
124
+ cur.ch = 0;
125
+ line = cm.getLine(cur.line);
126
+ } else if (cur.ch == 0 && dir < 0) {
127
+ cur.line--;
128
+ cur.ch = line.length;
129
+ line = cm.getLine(cur.line);
130
+ }
131
+ if (!line) break;
132
+
133
+ // On to the actual searching
134
+ word = findWord(line, cur.ch, dir, regexps);
135
+ cur.ch = word[where == "end" ? "to" : "from"];
136
+ if (startCh == cur.ch && word.from != word.to) cur.ch = word[dir < 0 ? "from" : "to"];
137
+ else break;
138
+ }
139
+ }
140
+ return cur;
141
+ }
142
+ function joinLineNext(cm) {
143
+ var cur = cm.getCursor(), ch = cur.ch, line = cm.getLine(cur.line);
144
+ CodeMirror.commands.goLineEnd(cm);
145
+ if (cur.line != cm.lineCount()) {
146
+ CodeMirror.commands.goLineEnd(cm);
147
+ cm.replaceSelection(" ", "end");
148
+ CodeMirror.commands.delCharRight(cm);
149
+ }
150
+ }
151
+ function delTillMark(cm, cHar) {
152
+ var i = mark[cHar];
153
+ if (i === undefined) {
154
+ // console.log("Mark not set"); // TODO - show in status bar
155
+ return;
156
+ }
157
+ var l = cm.getCursor().line, start = i > l ? l : i, end = i > l ? i : l;
158
+ cm.setCursor(start);
159
+ for (var c = start; c <= end; c++) {
160
+ pushInBuffer("\n"+cm.getLine(start));
161
+ cm.removeLine(start);
162
+ }
163
+ }
164
+ function yankTillMark(cm, cHar) {
165
+ var i = mark[cHar];
166
+ if (i === undefined) {
167
+ // console.log("Mark not set"); // TODO - show in status bar
168
+ return;
169
+ }
170
+ var l = cm.getCursor().line, start = i > l ? l : i, end = i > l ? i : l;
171
+ for (var c = start; c <= end; c++) {
172
+ pushInBuffer("\n"+cm.getLine(c));
173
+ }
174
+ cm.setCursor(start);
175
+ }
176
+ function goLineStartText(cm) {
177
+ // Go to the start of the line where the text begins, or the end for whitespace-only lines
178
+ var cur = cm.getCursor(), firstNonWS = cm.getLine(cur.line).search(/\S/);
179
+ cm.setCursor(cur.line, firstNonWS == -1 ? line.length : firstNonWS, true);
180
+ }
181
+
182
+ function charIdxInLine(cm, cHar, motion_options) {
183
+ // Search for cHar in line.
184
+ // motion_options: {forward, inclusive}
185
+ // If inclusive = true, include it too.
186
+ // If forward = true, search forward, else search backwards.
187
+ // If char is not found on this line, do nothing
188
+ var cur = cm.getCursor(), line = cm.getLine(cur.line), idx;
189
+ var ch = toLetter(cHar), mo = motion_options;
190
+ if (mo.forward) {
191
+ idx = line.indexOf(ch, cur.ch + 1);
192
+ if (idx != -1 && mo.inclusive) idx += 1;
193
+ } else {
194
+ idx = line.lastIndexOf(ch, cur.ch);
195
+ if (idx != -1 && !mo.inclusive) idx += 1;
196
+ }
197
+ return idx;
198
+ }
199
+
200
+ function moveTillChar(cm, cHar, motion_options) {
201
+ // Move to cHar in line, as found by charIdxInLine.
202
+ var idx = charIdxInLine(cm, cHar, motion_options), cur = cm.getCursor();
203
+ if (idx != -1) cm.setCursor({line: cur.line, ch: idx});
204
+ }
205
+
206
+ function delTillChar(cm, cHar, motion_options) {
207
+ // delete text in this line, untill cHar is met,
208
+ // as found by charIdxInLine.
209
+ // If char is not found on this line, do nothing
210
+ var idx = charIdxInLine(cm, cHar, motion_options);
211
+ var cur = cm.getCursor();
212
+ if (idx !== -1) {
213
+ if (motion_options.forward) {
214
+ cm.replaceRange("", {line: cur.line, ch: cur.ch}, {line: cur.line, ch: idx});
215
+ } else {
216
+ cm.replaceRange("", {line: cur.line, ch: idx}, {line: cur.line, ch: cur.ch});
217
+ }
218
+ }
219
+ }
220
+
221
+ function enterInsertMode(cm) {
222
+ // enter insert mode: switch mode and cursor
223
+ popCount();
224
+ cm.setOption("keyMap", "vim-insert");
225
+ }
226
+
227
+ // main keymap
228
+ var map = CodeMirror.keyMap.vim = {
229
+ // Pipe (|); TODO: should be *screen* chars, so need a util function to turn tabs into spaces?
230
+ "'|'": function(cm) {
231
+ cm.setCursor(cm.getCursor().line, popCount() - 1, true);
232
+ },
233
+ "A": function(cm) {
234
+ cm.setCursor(cm.getCursor().line, cm.getCursor().ch+1, true);
235
+ enterInsertMode(cm);
236
+ },
237
+ "Shift-A": function(cm) { CodeMirror.commands.goLineEnd(cm); enterInsertMode(cm);},
238
+ "I": function(cm) { enterInsertMode(cm);},
239
+ "Shift-I": function(cm) { goLineStartText(cm); enterInsertMode(cm);},
240
+ "O": function(cm) {
241
+ CodeMirror.commands.goLineEnd(cm);
242
+ CodeMirror.commands.newlineAndIndent(cm);
243
+ enterInsertMode(cm);
244
+ },
245
+ "Shift-O": function(cm) {
246
+ CodeMirror.commands.goLineStart(cm);
247
+ cm.replaceSelection("\n", "start");
248
+ cm.indentLine(cm.getCursor().line);
249
+ enterInsertMode(cm);
250
+ },
251
+ "G": function(cm) { cm.setOption("keyMap", "vim-prefix-g");},
252
+ "Shift-D": function(cm) {
253
+ // commented out verions works, but I left original, cause maybe
254
+ // I don't know vim enouth to see what it does
255
+ /* var cur = cm.getCursor();
256
+ var f = {line: cur.line, ch: cur.ch}, t = {line: cur.line};
257
+ pushInBuffer(cm.getRange(f, t));
258
+ */
259
+ emptyBuffer();
260
+ mark["Shift-D"] = cm.getCursor(false).line;
261
+ cm.setCursor(cm.getCursor(true).line);
262
+ delTillMark(cm,"Shift-D"); mark = [];
263
+ },
264
+
265
+ "S": function (cm) {
266
+ countTimes(function (_cm) {
267
+ CodeMirror.commands.delCharRight(_cm);
268
+ })(cm);
269
+ enterInsertMode(cm);
270
+ },
271
+ "M": function(cm) {cm.setOption("keyMap", "vim-prefix-m"); mark = [];},
272
+ "Y": function(cm) {cm.setOption("keyMap", "vim-prefix-y"); emptyBuffer(); yank = 0;},
273
+ "Shift-Y": function(cm) {
274
+ emptyBuffer();
275
+ mark["Shift-D"] = cm.getCursor(false).line;
276
+ cm.setCursor(cm.getCursor(true).line);
277
+ yankTillMark(cm,"Shift-D"); mark = [];
278
+ },
279
+ "/": function(cm) {var f = CodeMirror.commands.find; f && f(cm); sdir = "f";},
280
+ "'?'": function(cm) {
281
+ var f = CodeMirror.commands.find;
282
+ if (f) { f(cm); CodeMirror.commands.findPrev(cm); sdir = "r"; }
283
+ },
284
+ "N": function(cm) {
285
+ var fn = CodeMirror.commands.findNext;
286
+ if (fn) sdir != "r" ? fn(cm) : CodeMirror.commands.findPrev(cm);
287
+ },
288
+ "Shift-N": function(cm) {
289
+ var fn = CodeMirror.commands.findNext;
290
+ if (fn) sdir != "r" ? CodeMirror.commands.findPrev(cm) : fn.findNext(cm);
291
+ },
292
+ "Shift-G": function(cm) {
293
+ count == "" ? cm.setCursor(cm.lineCount()) : cm.setCursor(parseInt(count, 10)-1);
294
+ popCount();
295
+ CodeMirror.commands.goLineStart(cm);
296
+ },
297
+ nofallthrough: true, style: "fat-cursor"
298
+ };
299
+
300
+ // standard mode switching
301
+ iterList(["d", "t", "T", "f", "F", "c", "r"],
302
+ function (ch) {
303
+ CodeMirror.keyMap.vim[toCombo(ch)] = function (cm) {
304
+ cm.setOption("keyMap", "vim-prefix-" + ch);
305
+ emptyBuffer();
306
+ };
307
+ });
308
+
309
+ function addCountBindings(keyMap) {
310
+ // Add bindings for number keys
311
+ keyMap["0"] = function(cm) {
312
+ count.length > 0 ? pushCountDigit("0")(cm) : CodeMirror.commands.goLineStart(cm);
313
+ };
314
+ for (var i = 1; i < 10; ++i) keyMap[i] = pushCountDigit(i);
315
+ }
316
+ addCountBindings(CodeMirror.keyMap.vim);
317
+
318
+ // main num keymap
319
+ // Add bindings that are influenced by number keys
320
+ iterObj({
321
+ "Left": "goColumnLeft", "Right": "goColumnRight",
322
+ "Down": "goLineDown", "Up": "goLineUp", "Backspace": "goCharLeft",
323
+ "Space": "goCharRight",
324
+ "X": function(cm) {CodeMirror.commands.delCharRight(cm);},
325
+ "P": function(cm) {
326
+ var cur = cm.getCursor().line;
327
+ if (buf!= "") {
328
+ if (buf[0] == "\n") CodeMirror.commands.goLineEnd(cm);
329
+ cm.replaceRange(buf, cm.getCursor());
330
+ }
331
+ },
332
+ "Shift-X": function(cm) {CodeMirror.commands.delCharLeft(cm);},
333
+ "Shift-J": function(cm) {joinLineNext(cm);},
334
+ "Shift-P": function(cm) {
335
+ var cur = cm.getCursor().line;
336
+ if (buf!= "") {
337
+ CodeMirror.commands.goLineUp(cm);
338
+ CodeMirror.commands.goLineEnd(cm);
339
+ cm.replaceSelection(buf, "end");
340
+ }
341
+ cm.setCursor(cur+1);
342
+ },
343
+ "'~'": function(cm) {
344
+ var cur = cm.getCursor(), cHar = cm.getRange({line: cur.line, ch: cur.ch}, {line: cur.line, ch: cur.ch+1});
345
+ cHar = cHar != cHar.toLowerCase() ? cHar.toLowerCase() : cHar.toUpperCase();
346
+ cm.replaceRange(cHar, {line: cur.line, ch: cur.ch}, {line: cur.line, ch: cur.ch+1});
347
+ cm.setCursor(cur.line, cur.ch+1);
348
+ },
349
+ "Ctrl-B": function(cm) {CodeMirror.commands.goPageUp(cm);},
350
+ "Ctrl-F": function(cm) {CodeMirror.commands.goPageDown(cm);},
351
+ "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown",
352
+ "U": "undo", "Ctrl-R": "redo"
353
+ }, function(key, cmd) { map[key] = countTimes(cmd); });
354
+
355
+ // empty key maps
356
+ iterList([
357
+ "vim-prefix-d'",
358
+ "vim-prefix-y'",
359
+ "vim-prefix-df",
360
+ "vim-prefix-dF",
361
+ "vim-prefix-dt",
362
+ "vim-prefix-dT",
363
+ "vim-prefix-c",
364
+ "vim-prefix-cf",
365
+ "vim-prefix-cF",
366
+ "vim-prefix-ct",
367
+ "vim-prefix-cT",
368
+ "vim-prefix-",
369
+ "vim-prefix-f",
370
+ "vim-prefix-F",
371
+ "vim-prefix-t",
372
+ "vim-prefix-T",
373
+ "vim-prefix-r",
374
+ "vim-prefix-m"
375
+ ],
376
+ function (prefix) {
377
+ CodeMirror.keyMap[prefix] = {
378
+ auto: "vim",
379
+ nofallthrough: true,
380
+ style: "fat-cursor"
381
+ };
382
+ });
383
+
384
+ CodeMirror.keyMap["vim-prefix-g"] = {
385
+ "E": countTimes(function(cm) { cm.setCursor(moveToWord(cm, word, -1, 1, "start"));}),
386
+ "Shift-E": countTimes(function(cm) { cm.setCursor(moveToWord(cm, bigWord, -1, 1, "start"));}),
387
+ "G": function (cm) { cm.setCursor({line: 0, ch: cm.getCursor().ch});},
388
+ auto: "vim", nofallthrough: true, style: "fat-cursor"
389
+ };
390
+
391
+ CodeMirror.keyMap["vim-prefix-d"] = {
392
+ "D": countTimes(function(cm) {
393
+ pushInBuffer("\n"+cm.getLine(cm.getCursor().line));
394
+ cm.removeLine(cm.getCursor().line);
395
+ cm.setOption("keyMap", "vim");
396
+ }),
397
+ "'": function(cm) {
398
+ cm.setOption("keyMap", "vim-prefix-d'");
399
+ emptyBuffer();
400
+ },
401
+ "B": function(cm) {
402
+ var cur = cm.getCursor();
403
+ var line = cm.getLine(cur.line);
404
+ var index = line.lastIndexOf(" ", cur.ch);
405
+
406
+ pushInBuffer(line.substring(index, cur.ch));
407
+ cm.replaceRange("", {line: cur.line, ch: index}, cur);
408
+ cm.setOption("keyMap", "vim");
409
+ },
410
+ nofallthrough: true, style: "fat-cursor"
411
+ };
412
+ // FIXME - does not work for bindings like "d3e"
413
+ addCountBindings(CodeMirror.keyMap["vim-prefix-d"]);
414
+
415
+ CodeMirror.keyMap["vim-prefix-c"] = {
416
+ "B": function (cm) {
417
+ countTimes("delWordLeft")(cm);
418
+ enterInsertMode(cm);
419
+ },
420
+ "C": function (cm) {
421
+ iterTimes(function (i, last) {
422
+ CodeMirror.commands.deleteLine(cm);
423
+ if (i) {
424
+ CodeMirror.commands.delCharRight(cm);
425
+ if (last) CodeMirror.commands.deleteLine(cm);
426
+ }
427
+ });
428
+ enterInsertMode(cm);
429
+ },
430
+ nofallthrough: true, style: "fat-cursor"
431
+ };
432
+
433
+ iterList(["vim-prefix-d", "vim-prefix-c", "vim-prefix-"], function (prefix) {
434
+ iterList(["f", "F", "T", "t"],
435
+ function (ch) {
436
+ CodeMirror.keyMap[prefix][toCombo(ch)] = function (cm) {
437
+ cm.setOption("keyMap", prefix + ch);
438
+ emptyBuffer();
439
+ };
440
+ });
441
+ });
442
+
443
+ var MOTION_OPTIONS = {
444
+ "t": {inclusive: false, forward: true},
445
+ "f": {inclusive: true, forward: true},
446
+ "T": {inclusive: false, forward: false},
447
+ "F": {inclusive: true, forward: false}
448
+ };
449
+
450
+ function setupPrefixBindingForKey(m) {
451
+ CodeMirror.keyMap["vim-prefix-m"][m] = function(cm) {
452
+ mark[m] = cm.getCursor().line;
453
+ };
454
+ CodeMirror.keyMap["vim-prefix-d'"][m] = function(cm) {
455
+ delTillMark(cm,m);
456
+ };
457
+ CodeMirror.keyMap["vim-prefix-y'"][m] = function(cm) {
458
+ yankTillMark(cm,m);
459
+ };
460
+ CodeMirror.keyMap["vim-prefix-r"][m] = function (cm) {
461
+ var cur = cm.getCursor();
462
+ cm.replaceRange(toLetter(m),
463
+ {line: cur.line, ch: cur.ch},
464
+ {line: cur.line, ch: cur.ch + 1});
465
+ CodeMirror.commands.goColumnLeft(cm);
466
+ };
467
+ // all commands, related to motions till char in line
468
+ iterObj(MOTION_OPTIONS, function (ch, options) {
469
+ CodeMirror.keyMap["vim-prefix-" + ch][m] = function(cm) {
470
+ moveTillChar(cm, m, options);
471
+ };
472
+ CodeMirror.keyMap["vim-prefix-d" + ch][m] = function(cm) {
473
+ delTillChar(cm, m, options);
474
+ };
475
+ CodeMirror.keyMap["vim-prefix-c" + ch][m] = function(cm) {
476
+ delTillChar(cm, m, options);
477
+ enterInsertMode(cm);
478
+ };
479
+ });
480
+ }
481
+ for (var i = 65; i < 65 + 26; i++) { // uppercase alphabet char codes
482
+ var ch = String.fromCharCode(i);
483
+ setupPrefixBindingForKey(toCombo(ch));
484
+ setupPrefixBindingForKey(toCombo(ch.toLowerCase()));
485
+ }
486
+ iterList(SPECIAL_SYMBOLS, function (ch) {
487
+ setupPrefixBindingForKey(toCombo(ch));
488
+ });
489
+ setupPrefixBindingForKey("Space");
490
+
491
+ CodeMirror.keyMap["vim-prefix-y"] = {
492
+ "Y": countTimes(function(cm) { pushInBuffer("\n"+cm.getLine(cm.getCursor().line+yank)); yank++; }),
493
+ "'": function(cm) {cm.setOption("keyMap", "vim-prefix-y'"); emptyBuffer();},
494
+ nofallthrough: true, style: "fat-cursor"
495
+ };
496
+
497
+ CodeMirror.keyMap["vim-insert"] = {
498
+ // TODO: override navigation keys so that Esc will cancel automatic indentation from o, O, i_<CR>
499
+ "Esc": function(cm) {
500
+ cm.setCursor(cm.getCursor().line, cm.getCursor().ch-1, true);
501
+ cm.setOption("keyMap", "vim");
502
+ },
503
+ "Ctrl-N": "autocomplete",
504
+ "Ctrl-P": "autocomplete",
505
+ fallthrough: ["default"]
506
+ };
507
+
508
+ function findMatchedSymbol(cm, cur, symb) {
509
+ var line = cur.line;
510
+ var symb = symb ? symb : cm.getLine(line)[cur.ch];
511
+
512
+ // Are we at the opening or closing char
513
+ var forwards = ['(', '[', '{'].indexOf(symb) != -1;
514
+
515
+ var reverseSymb = (function(sym) {
516
+ switch (sym) {
517
+ case '(' : return ')';
518
+ case '[' : return ']';
519
+ case '{' : return '}';
520
+ case ')' : return '(';
521
+ case ']' : return '[';
522
+ case '}' : return '{';
523
+ default : return null;
524
+ }
525
+ })(symb);
526
+
527
+ // Couldn't find a matching symbol, abort
528
+ if (reverseSymb == null) return cur;
529
+
530
+ // Tracking our imbalance in open/closing symbols. An opening symbol wii be
531
+ // the first thing we pick up if moving forward, this isn't true moving backwards
532
+ var disBal = forwards ? 0 : 1;
533
+
534
+ while (true) {
535
+ if (line == cur.line) {
536
+ // First pass, do some special stuff
537
+ var currLine = forwards ? cm.getLine(line).substr(cur.ch).split('') : cm.getLine(line).substr(0,cur.ch).split('').reverse();
538
+ } else {
539
+ var currLine = forwards ? cm.getLine(line).split('') : cm.getLine(line).split('').reverse();
540
+ }
541
+
542
+ for (var index = 0; index < currLine.length; index++) {
543
+ if (currLine[index] == symb) disBal++;
544
+ else if (currLine[index] == reverseSymb) disBal--;
545
+
546
+ if (disBal == 0) {
547
+ if (forwards && cur.line == line) return {line: line, ch: index + cur.ch};
548
+ else if (forwards) return {line: line, ch: index};
549
+ else return {line: line, ch: currLine.length - index - 1 };
550
+ }
551
+ }
552
+
553
+ if (forwards) line++;
554
+ else line--;
555
+ }
556
+ }
557
+
558
+ function selectCompanionObject(cm, revSymb, inclusive) {
559
+ var cur = cm.getCursor();
560
+
561
+ var end = findMatchedSymbol(cm, cur, revSymb);
562
+ var start = findMatchedSymbol(cm, end);
563
+ start.ch += inclusive ? 1 : 0;
564
+ end.ch += inclusive ? 0 : 1;
565
+
566
+ return {start: start, end: end};
567
+ }
568
+
569
+ // These are our motion commands to be used for navigation and selection with
570
+ // certian other commands. All should return a cursor object.
571
+ var motionList = ['B', 'E', 'J', 'K', 'H', 'L', 'W', 'Shift-W', "'^'", "'$'", "'%'", 'Esc'];
572
+
573
+ motions = {
574
+ 'B': function(cm, times) { return moveToWord(cm, word, -1, times); },
575
+ 'Shift-B': function(cm, times) { return moveToWord(cm, bigWord, -1, times); },
576
+ 'E': function(cm, times) { return moveToWord(cm, word, 1, times, 'end'); },
577
+ 'Shift-E': function(cm, times) { return moveToWord(cm, bigWord, 1, times, 'end'); },
578
+ 'J': function(cm, times) {
579
+ var cur = cm.getCursor();
580
+ return {line: cur.line+times, ch : cur.ch};
581
+ },
582
+
583
+ 'K': function(cm, times) {
584
+ var cur = cm.getCursor();
585
+ return {line: cur.line-times, ch: cur.ch};
586
+ },
587
+
588
+ 'H': function(cm, times) {
589
+ var cur = cm.getCursor();
590
+ return {line: cur.line, ch: cur.ch-times};
591
+ },
592
+
593
+ 'L': function(cm, times) {
594
+ var cur = cm.getCursor();
595
+ return {line: cur.line, ch: cur.ch+times};
596
+ },
597
+ 'W': function(cm, times) { return moveToWord(cm, word, 1, times); },
598
+ 'Shift-W': function(cm, times) { return moveToWord(cm, bigWord, 1, times); },
599
+ "'^'": function(cm, times) {
600
+ var cur = cm.getCursor();
601
+ var line = cm.getLine(cur.line).split('');
602
+
603
+ // Empty line :o
604
+ if (line.length == 0) return cur;
605
+
606
+ for (var index = 0; index < line.length; index++) {
607
+ if (line[index].match(/[^\s]/)) return {line: cur.line, ch: index};
608
+ }
609
+ },
610
+ "'$'": function(cm) {
611
+ var cur = cm.getCursor();
612
+ var line = cm.getLine(cur.line);
613
+ return {line: cur.line, ch: line.length};
614
+ },
615
+ "'%'": function(cm) { return findMatchedSymbol(cm, cm.getCursor()); },
616
+ "Esc" : function(cm) {
617
+ cm.setOption('vim');
618
+ reptTimes = 0;
619
+
620
+ return cm.getCursor();
621
+ }
622
+ };
623
+
624
+ // Map our movement actions each operator and non-operational movement
625
+ motionList.forEach(function(key, index, array) {
626
+ CodeMirror.keyMap['vim-prefix-d'][key] = function(cm) {
627
+ // Get our selected range
628
+ var start = cm.getCursor();
629
+ var end = motions[key](cm, reptTimes ? reptTimes : 1);
630
+
631
+ // Set swap var if range is of negative length
632
+ if ((start.line > end.line) || (start.line == end.line && start.ch > end.ch)) var swap = true;
633
+
634
+ // Take action, switching start and end if swap var is set
635
+ pushInBuffer(cm.getRange(swap ? end : start, swap ? start : end));
636
+ cm.replaceRange("", swap ? end : start, swap ? start : end);
637
+
638
+ // And clean up
639
+ reptTimes = 0;
640
+ cm.setOption("keyMap", "vim");
641
+ };
642
+
643
+ CodeMirror.keyMap['vim-prefix-c'][key] = function(cm) {
644
+ var start = cm.getCursor();
645
+ var end = motions[key](cm, reptTimes ? reptTimes : 1);
646
+
647
+ if ((start.line > end.line) || (start.line == end.line && start.ch > end.ch)) var swap = true;
648
+ pushInBuffer(cm.getRange(swap ? end : start, swap ? start : end));
649
+ cm.replaceRange("", swap ? end : start, swap ? start : end);
650
+
651
+ reptTimes = 0;
652
+ cm.setOption('keyMap', 'vim-insert');
653
+ };
654
+
655
+ CodeMirror.keyMap['vim-prefix-y'][key] = function(cm) {
656
+ var start = cm.getCursor();
657
+ var end = motions[key](cm, reptTimes ? reptTimes : 1);
658
+
659
+ if ((start.line > end.line) || (start.line == end.line && start.ch > end.ch)) var swap = true;
660
+ pushInBuffer(cm.getRange(swap ? end : start, swap ? start : end));
661
+
662
+ reptTimes = 0;
663
+ cm.setOption("keyMap", "vim");
664
+ };
665
+
666
+ CodeMirror.keyMap['vim'][key] = function(cm) {
667
+ var cur = motions[key](cm, reptTimes ? reptTimes : 1);
668
+ cm.setCursor(cur.line, cur.ch);
669
+
670
+ reptTimes = 0;
671
+ };
672
+ });
673
+
674
+ var nums = [1,2,3,4,5,6,7,8,9];
675
+ nums.forEach(function(key, index, array) {
676
+ CodeMirror.keyMap['vim'][key] = function (cm) {
677
+ reptTimes = (reptTimes * 10) + key;
678
+ };
679
+ CodeMirror.keyMap['vim-prefix-d'][key] = function (cm) {
680
+ reptTimes = (reptTimes * 10) + key;
681
+ };
682
+ CodeMirror.keyMap['vim-prefix-y'][key] = function (cm) {
683
+ reptTimes = (reptTimes * 10) + key;
684
+ };
685
+ CodeMirror.keyMap['vim-prefix-c'][key] = function (cm) {
686
+ reptTimes = (reptTimes * 10) + key;
687
+ };
688
+ });
689
+
690
+ // Create our keymaps for each operator and make xa and xi where x is an operator
691
+ // change to the corrosponding keymap
692
+ var operators = ['d', 'y', 'c'];
693
+ operators.forEach(function(key, index, array) {
694
+ CodeMirror.keyMap['vim-prefix-'+key+'a'] = {
695
+ auto: 'vim', nofallthrough: true, style: "fat-cursor"
696
+ };
697
+ CodeMirror.keyMap['vim-prefix-'+key+'i'] = {
698
+ auto: 'vim', nofallthrough: true, style: "fat-cursor"
699
+ };
700
+
701
+ CodeMirror.keyMap['vim-prefix-'+key]['A'] = function(cm) {
702
+ reptTimes = 0;
703
+ cm.setOption('keyMap', 'vim-prefix-' + key + 'a');
704
+ };
705
+
706
+ CodeMirror.keyMap['vim-prefix-'+key]['I'] = function(cm) {
707
+ reptTimes = 0;
708
+ cm.setOption('keyMap', 'vim-prefix-' + key + 'i');
709
+ };
710
+ });
711
+
712
+ function regexLastIndexOf(string, pattern, startIndex) {
713
+ for (var i = startIndex == null ? string.length : startIndex; i >= 0; --i)
714
+ if (pattern.test(string.charAt(i))) return i;
715
+ return -1;
716
+ }
717
+
718
+ // Create our text object functions. They work similar to motions but they
719
+ // return a start cursor as well
720
+ var textObjectList = ['W', 'Shift-[', 'Shift-9', '['];
721
+ var textObjects = {
722
+ 'W': function(cm, inclusive) {
723
+ var cur = cm.getCursor();
724
+ var line = cm.getLine(cur.line);
725
+
726
+ var line_to_char = new String(line.substring(0, cur.ch));
727
+ var start = regexLastIndexOf(line_to_char, /[^a-zA-Z0-9]/) + 1;
728
+ var end = motions["E"](cm, 1) ;
729
+
730
+ end.ch += inclusive ? 1 : 0 ;
731
+ return {start: {line: cur.line, ch: start}, end: end };
732
+ },
733
+ 'Shift-[': function(cm, inclusive) { return selectCompanionObject(cm, '}', inclusive); },
734
+ 'Shift-9': function(cm, inclusive) { return selectCompanionObject(cm, ')', inclusive); },
735
+ '[': function(cm, inclusive) { return selectCompanionObject(cm, ']', inclusive); }
736
+ };
737
+
738
+ // One function to handle all operation upon text objects. Kinda funky but it works
739
+ // better than rewriting this code six times
740
+ function textObjectManipulation(cm, object, remove, insert, inclusive) {
741
+ // Object is the text object, delete object if remove is true, enter insert
742
+ // mode if insert is true, inclusive is the difference between a and i
743
+ var tmp = textObjects[object](cm, inclusive);
744
+ var start = tmp.start;
745
+ var end = tmp.end;
746
+
747
+ if ((start.line > end.line) || (start.line == end.line && start.ch > end.ch)) var swap = true ;
748
+
749
+ pushInBuffer(cm.getRange(swap ? end : start, swap ? start : end));
750
+ if (remove) cm.replaceRange("", swap ? end : start, swap ? start : end);
751
+ if (insert) cm.setOption('keyMap', 'vim-insert');
752
+ }
753
+
754
+ // And finally build the keymaps up from the text objects
755
+ for (var i = 0; i < textObjectList.length; ++i) {
756
+ var object = textObjectList[i];
757
+ (function(object) {
758
+ CodeMirror.keyMap['vim-prefix-di'][object] = function(cm) { textObjectManipulation(cm, object, true, false, false); };
759
+ CodeMirror.keyMap['vim-prefix-da'][object] = function(cm) { textObjectManipulation(cm, object, true, false, true); };
760
+ CodeMirror.keyMap['vim-prefix-yi'][object] = function(cm) { textObjectManipulation(cm, object, false, false, false); };
761
+ CodeMirror.keyMap['vim-prefix-ya'][object] = function(cm) { textObjectManipulation(cm, object, false, false, true); };
762
+ CodeMirror.keyMap['vim-prefix-ci'][object] = function(cm) { textObjectManipulation(cm, object, true, true, false); };
763
+ CodeMirror.keyMap['vim-prefix-ca'][object] = function(cm) { textObjectManipulation(cm, object, true, true, true); };
764
+ })(object)
765
+ }
766
+ })();