gollum 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of gollum might be problematic. Click here for more details.

Files changed (454) hide show
  1. data/README.md +44 -7
  2. data/Rakefile +1 -1
  3. data/bin/gollum +20 -1
  4. data/gollum.gemspec +400 -5
  5. data/lib/gollum.rb +2 -1
  6. data/lib/gollum/blob_entry.rb +13 -1
  7. data/lib/gollum/committer.rb +10 -1
  8. data/lib/gollum/file.rb +15 -2
  9. data/lib/gollum/file_view.rb +145 -0
  10. data/lib/gollum/frontend/app.rb +217 -69
  11. data/lib/gollum/frontend/helpers.rb +21 -0
  12. data/lib/gollum/frontend/public/gollum/css/_styles.css +121 -0
  13. data/lib/gollum/frontend/public/gollum/css/editor.css +17 -8
  14. data/lib/gollum/frontend/public/gollum/css/gollum.css +440 -402
  15. data/lib/gollum/frontend/public/gollum/css/template.css +540 -289
  16. data/lib/gollum/frontend/public/gollum/images/dirty-shade.png +0 -0
  17. data/lib/gollum/frontend/public/gollum/images/fileview/document.png +0 -0
  18. data/lib/gollum/frontend/public/gollum/images/fileview/folder-horizontal.png +0 -0
  19. data/lib/gollum/frontend/public/gollum/images/fileview/toggle-small-expand.png +0 -0
  20. data/lib/gollum/frontend/public/gollum/images/fileview/toggle-small.png +0 -0
  21. data/lib/gollum/frontend/public/gollum/images/para.png +0 -0
  22. data/lib/gollum/frontend/public/gollum/images/pin-16.png +0 -0
  23. data/lib/gollum/frontend/public/gollum/images/pin-20.png +0 -0
  24. data/lib/gollum/frontend/public/gollum/images/pin-24.png +0 -0
  25. data/lib/gollum/frontend/public/gollum/images/pin-32.png +0 -0
  26. data/lib/gollum/frontend/public/gollum/javascript/editor/gollum.editor.js +31 -7
  27. data/lib/gollum/frontend/public/gollum/javascript/editor/langs/asciidoc.js +2 -1
  28. data/lib/gollum/frontend/public/gollum/javascript/editor/langs/creole.js +2 -1
  29. data/lib/gollum/frontend/public/gollum/javascript/editor/langs/markdown.js +18 -6
  30. data/lib/gollum/frontend/public/gollum/javascript/editor/langs/org.js +2 -1
  31. data/lib/gollum/frontend/public/gollum/javascript/editor/langs/pod.js +2 -1
  32. data/lib/gollum/frontend/public/gollum/javascript/editor/langs/textile.js +2 -1
  33. data/lib/gollum/frontend/public/gollum/javascript/gollum.dialog.js +3 -0
  34. data/lib/gollum/frontend/public/gollum/javascript/gollum.js +78 -16
  35. data/lib/gollum/frontend/public/gollum/javascript/jquery-1.7.2.min.js +4 -0
  36. data/lib/gollum/frontend/public/gollum/javascript/mousetrap.min.js +8 -0
  37. data/lib/gollum/frontend/public/gollum/livepreview/css/custom.css +107 -0
  38. data/lib/gollum/frontend/public/gollum/livepreview/images/cancel_24.png +0 -0
  39. data/lib/gollum/frontend/public/gollum/livepreview/images/lr_24.png +0 -0
  40. data/lib/gollum/frontend/public/gollum/livepreview/images/save_24.png +0 -0
  41. data/lib/gollum/frontend/public/gollum/livepreview/images/savecomment_24.png +0 -0
  42. data/lib/gollum/frontend/public/gollum/livepreview/index.html +46 -0
  43. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/ace.js +103 -0
  44. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/anchor.js +254 -0
  45. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/anchor_test.js +184 -0
  46. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/background_tokenizer.js +261 -0
  47. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/background_tokenizer_test.js +92 -0
  48. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/commands/command_manager.js +121 -0
  49. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/commands/command_manager_test.js +193 -0
  50. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/commands/default_commands.js +460 -0
  51. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/commands/multi_select_commands.js +101 -0
  52. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/config.js +124 -0
  53. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/css/codefolding-fold-button-states.png +0 -0
  54. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/css/editor.css +327 -0
  55. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/css/expand-marker.png +0 -0
  56. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/document.js +617 -0
  57. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/document_test.js +314 -0
  58. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/edit_session.js +2419 -0
  59. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/edit_session/bracket_match.js +252 -0
  60. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/edit_session/fold.js +116 -0
  61. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/edit_session/fold_line.js +276 -0
  62. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/edit_session/folding.js +759 -0
  63. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/edit_session_test.js +981 -0
  64. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/editor.js +2163 -0
  65. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/editor_change_document_test.js +195 -0
  66. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/editor_highlight_selected_word_test.js +231 -0
  67. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/editor_navigation_test.js +171 -0
  68. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/editor_text_edit_test.js +562 -0
  69. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/ext/static.css +22 -0
  70. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/ext/static_highlight.js +98 -0
  71. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/ext/static_highlight_test.js +81 -0
  72. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/ext/textarea.js +536 -0
  73. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/keyboard/emacs.js +367 -0
  74. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/keyboard/hash_handler.js +170 -0
  75. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/keyboard/keybinding.js +143 -0
  76. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/keyboard/state_handler.js +257 -0
  77. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/keyboard/textinput.js +315 -0
  78. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/keyboard/vim.js +122 -0
  79. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/keyboard/vim/commands.js +556 -0
  80. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/keyboard/vim/maps/aliases.js +101 -0
  81. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/keyboard/vim/maps/motions.js +611 -0
  82. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/keyboard/vim/maps/operators.js +193 -0
  83. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/keyboard/vim/maps/util.js +134 -0
  84. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/keyboard/vim/registers.js +49 -0
  85. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/layer/cursor.js +202 -0
  86. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/layer/gutter.js +187 -0
  87. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/layer/marker.js +214 -0
  88. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/layer/text.js +595 -0
  89. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/layer/text_test.js +106 -0
  90. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/lib/browser_focus.js +105 -0
  91. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/lib/dom.js +292 -0
  92. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/lib/es5-shim.js +1059 -0
  93. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/lib/event.js +317 -0
  94. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/lib/event_emitter.js +121 -0
  95. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/lib/event_emitter_test.js +72 -0
  96. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/lib/fixoldbrowsers.js +19 -0
  97. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/lib/keys.js +129 -0
  98. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/lib/lang.js +164 -0
  99. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/lib/net.js +62 -0
  100. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/lib/oop.js +61 -0
  101. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/lib/regexp.js +113 -0
  102. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/lib/useragent.js +105 -0
  103. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/behaviour.js +98 -0
  104. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/behaviour/cstyle.js +225 -0
  105. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/behaviour/html.js +98 -0
  106. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/behaviour/xml.js +113 -0
  107. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/behaviour/xquery.js +68 -0
  108. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/c9search.js +74 -0
  109. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/c9search_highlight_rules.js +66 -0
  110. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/c_cpp.js +132 -0
  111. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/c_cpp_highlight_rules.js +180 -0
  112. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/clojure.js +121 -0
  113. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/clojure_highlight_rules.js +235 -0
  114. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/coffee.js +121 -0
  115. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/coffee/coffee-script.js +63 -0
  116. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/coffee/helpers.js +100 -0
  117. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/coffee/lexer.js +739 -0
  118. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/coffee/nodes.js +2756 -0
  119. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/coffee/parser.js +603 -0
  120. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/coffee/parser_test.js +68 -0
  121. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/coffee/rewriter.js +342 -0
  122. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/coffee/scope.js +154 -0
  123. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/coffee_highlight_rules.js +227 -0
  124. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/coffee_highlight_rules_test.js +72 -0
  125. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/coffee_worker.js +92 -0
  126. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/coldfusion.js +71 -0
  127. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/coldfusion_highlight_rules.js +135 -0
  128. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/coldfusion_test.js +74 -0
  129. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/csharp.js +58 -0
  130. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/csharp_highlight_rules.js +104 -0
  131. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/css.js +110 -0
  132. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/css/csslint.js +9014 -0
  133. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/css_highlight_rules.js +242 -0
  134. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/css_highlight_rules_test.js +99 -0
  135. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/css_test.js +85 -0
  136. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/css_worker.js +66 -0
  137. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/css_worker_test.js +75 -0
  138. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/diff.js +58 -0
  139. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/diff_highlight_rules.js +108 -0
  140. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/doc_comment_highlight_rules.js +93 -0
  141. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/folding/c9search.js +83 -0
  142. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/folding/coffee.js +127 -0
  143. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/folding/coffee_test.js +108 -0
  144. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/folding/cstyle.js +95 -0
  145. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/folding/cstyle_test.js +92 -0
  146. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/folding/diff.js +76 -0
  147. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/folding/fold_mode.js +115 -0
  148. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/folding/html.js +86 -0
  149. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/folding/html_test.js +169 -0
  150. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/folding/mixed.js +88 -0
  151. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/folding/pythonic.js +65 -0
  152. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/folding/pythonic_test.js +105 -0
  153. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/folding/xml.js +262 -0
  154. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/folding/xml_test.js +117 -0
  155. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/golang.js +81 -0
  156. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/golang_highlight_rules.js +129 -0
  157. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/groovy.js +24 -0
  158. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/groovy_highlight_rules.js +183 -0
  159. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/haxe.js +58 -0
  160. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/haxe_highlight_rules.js +104 -0
  161. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/html.js +83 -0
  162. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/html_highlight_rules.js +159 -0
  163. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/html_highlight_rules_test.js +93 -0
  164. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/html_test.js +74 -0
  165. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/java.js +25 -0
  166. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/java_highlight_rules.js +144 -0
  167. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/javascript.js +164 -0
  168. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/javascript_highlight_rules.js +471 -0
  169. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/javascript_highlight_rules_test.js +225 -0
  170. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/javascript_test.js +165 -0
  171. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/javascript_worker.js +88 -0
  172. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/javascript_worker_test.js +99 -0
  173. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/json.js +100 -0
  174. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/json/json_parse.js +346 -0
  175. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/json_highlight_rules.js +111 -0
  176. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/json_worker.js +103 -0
  177. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/json_worker_test.js +108 -0
  178. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/jsx.js +53 -0
  179. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/jsx_highlight_rules.js +122 -0
  180. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/latex.js +57 -0
  181. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/latex_highlight_rules.js +38 -0
  182. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/less.js +87 -0
  183. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/less_highlight_rules.js +279 -0
  184. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/liquid.js +116 -0
  185. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/liquid_highlight_rules.js +220 -0
  186. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/liquid_highlight_rules_test.js +91 -0
  187. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/lua.js +87 -0
  188. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/lua_highlight_rules.js +436 -0
  189. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/luapage.js +22 -0
  190. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/luapage_highlight_rules.js +42 -0
  191. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/markdown.js +81 -0
  192. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/markdown_highlight_rules.js +195 -0
  193. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/matching_brace_outdent.js +81 -0
  194. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/matching_parens_outdent.js +81 -0
  195. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/ocaml.js +103 -0
  196. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/ocaml_highlight_rules.js +355 -0
  197. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/perl.js +117 -0
  198. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/perl_highlight_rules.js +168 -0
  199. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/pgsql.js +78 -0
  200. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/pgsql_highlight_rules.js +583 -0
  201. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/php.js +119 -0
  202. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/php_highlight_rules.js +1165 -0
  203. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/powershell.js +58 -0
  204. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/powershell_highlight_rules.js +138 -0
  205. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/python.js +147 -0
  206. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/python_highlight_rules.js +182 -0
  207. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/python_test.js +86 -0
  208. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/ruby.js +116 -0
  209. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/ruby_highlight_rules.js +194 -0
  210. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/ruby_highlight_rules_test.js +116 -0
  211. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/scad.js +132 -0
  212. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/scad_highlight_rules.js +168 -0
  213. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/scala.js +25 -0
  214. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/scala_highlight_rules.js +179 -0
  215. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/scss.js +86 -0
  216. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/scss_highlight_rules.js +304 -0
  217. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/sh.js +144 -0
  218. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/sh_highlight_rules.js +145 -0
  219. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/sql.js +70 -0
  220. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/sql_highlight_rules.js +89 -0
  221. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/svg.js +78 -0
  222. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/svg_highlight_rules.js +71 -0
  223. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/text.js +159 -0
  224. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/text_highlight_rules.js +109 -0
  225. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/text_test.js +71 -0
  226. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/textile.js +73 -0
  227. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/textile_highlight_rules.js +100 -0
  228. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/xml.js +65 -0
  229. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/xml_highlight_rules.js +109 -0
  230. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/xml_highlight_rules_test.js +103 -0
  231. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/xml_test.js +82 -0
  232. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/xml_util.js +120 -0
  233. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/xquery.js +202 -0
  234. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/xquery/Position.js +59 -0
  235. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/xquery/Readme.md +6 -0
  236. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/xquery/StringLexer.js +1686 -0
  237. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/xquery/XMLLexer.js +2993 -0
  238. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/xquery/XQDTLexer.js +69 -0
  239. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/xquery/XQDTParser.js +63 -0
  240. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/xquery/XQueryLexer.js +10363 -0
  241. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/xquery/XQueryParser.js +42525 -0
  242. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/xquery/XQuerySemanticHighlighter.js +165 -0
  243. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/xquery/antlr3-all.js +6177 -0
  244. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/xquery/xquery.js +55 -0
  245. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/xquery_highlight_rules.js +158 -0
  246. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/xquery_worker.js +86 -0
  247. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/yaml.js +64 -0
  248. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mode/yaml_highlight_rules.js +116 -0
  249. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/model/editor.js +70 -0
  250. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mouse/default_gutter_handler.js +73 -0
  251. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mouse/default_handlers.js +354 -0
  252. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mouse/dragdrop.js +105 -0
  253. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mouse/fold_handler.js +71 -0
  254. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mouse/mouse_event.js +140 -0
  255. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mouse/mouse_handler.js +158 -0
  256. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/mouse/multi_select_handler.js +163 -0
  257. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/multi_select.js +762 -0
  258. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/multi_select_test.js +171 -0
  259. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/narcissus/definitions.js +696 -0
  260. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/narcissus/lexer.js +598 -0
  261. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/narcissus/options.js +61 -0
  262. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/narcissus/parser.js +2072 -0
  263. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/placeholder.js +278 -0
  264. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/placeholder_test.js +164 -0
  265. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/range.js +581 -0
  266. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/range_list.js +230 -0
  267. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/range_list_test.js +170 -0
  268. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/range_test.js +198 -0
  269. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/renderloop.js +93 -0
  270. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/requirejs/text.js +58 -0
  271. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/scrollbar.js +142 -0
  272. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/search.js +398 -0
  273. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/search_highlight.js +87 -0
  274. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/search_test.js +451 -0
  275. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/selection.js +886 -0
  276. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/selection_test.js +472 -0
  277. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/split.js +411 -0
  278. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/test/all.js +42 -0
  279. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/test/all_browser.js +136 -0
  280. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/test/assertions.js +63 -0
  281. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/test/asyncjs/assert.js +313 -0
  282. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/test/asyncjs/async.js +529 -0
  283. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/test/asyncjs/index.js +13 -0
  284. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/test/asyncjs/test.js +195 -0
  285. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/test/asyncjs/utils.js +65 -0
  286. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/test/benchmark.js +85 -0
  287. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/test/mockdom.js +10 -0
  288. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/test/mockrenderer.js +204 -0
  289. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/test/tests.html +46 -0
  290. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/chrome.css +159 -0
  291. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/chrome.js +46 -0
  292. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/clouds.css +118 -0
  293. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/clouds.js +46 -0
  294. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/clouds_midnight.css +119 -0
  295. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/clouds_midnight.js +46 -0
  296. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/cobalt.css +145 -0
  297. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/cobalt.js +46 -0
  298. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/crimson_editor.css +151 -0
  299. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/crimson_editor.js +46 -0
  300. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/dawn.css +149 -0
  301. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/dawn.js +46 -0
  302. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/dreamweaver.css +182 -0
  303. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/dreamweaver.js +45 -0
  304. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/eclipse.css +102 -0
  305. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/eclipse.js +48 -0
  306. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/github.css +133 -0
  307. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/github.js +46 -0
  308. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/idle_fingers.css +137 -0
  309. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/idle_fingers.js +46 -0
  310. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/kr_theme.css +140 -0
  311. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/kr_theme.js +46 -0
  312. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/merbivore.css +140 -0
  313. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/merbivore.js +46 -0
  314. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/merbivore_soft.css +146 -0
  315. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/merbivore_soft.js +46 -0
  316. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/mono_industrial.css +148 -0
  317. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/mono_industrial.js +46 -0
  318. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/monokai.css +145 -0
  319. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/monokai.js +46 -0
  320. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/pastel_on_dark.css +150 -0
  321. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/pastel_on_dark.js +46 -0
  322. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/solarized_dark.css +131 -0
  323. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/solarized_dark.js +46 -0
  324. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/solarized_light.css +130 -0
  325. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/solarized_light.js +46 -0
  326. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/textmate.css +165 -0
  327. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/textmate.js +47 -0
  328. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/tomorrow.css +164 -0
  329. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/tomorrow.js +46 -0
  330. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/tomorrow_night.css +164 -0
  331. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/tomorrow_night.js +46 -0
  332. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/tomorrow_night_blue.css +164 -0
  333. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/tomorrow_night_blue.js +46 -0
  334. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/tomorrow_night_bright.css +164 -0
  335. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/tomorrow_night_bright.js +46 -0
  336. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/tomorrow_night_eighties.css +160 -0
  337. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/tomorrow_night_eighties.js +46 -0
  338. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/twilight.css +162 -0
  339. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/twilight.js +46 -0
  340. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/vibrant_ink.css +141 -0
  341. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/theme/vibrant_ink.js +46 -0
  342. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/token_iterator.js +162 -0
  343. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/token_iterator_test.js +219 -0
  344. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/tokenizer.js +195 -0
  345. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/undomanager.js +142 -0
  346. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/unicode.js +107 -0
  347. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/virtual_renderer.js +1402 -0
  348. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/virtual_renderer_test.js +93 -0
  349. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/worker/jshint.js +4469 -0
  350. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/worker/jslint.js +6396 -0
  351. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/worker/mirror.js +43 -0
  352. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/worker/worker.js +138 -0
  353. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/worker/worker_client.js +176 -0
  354. data/lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/worker/worker_sourcemint.js +73 -0
  355. data/lib/gollum/frontend/public/gollum/livepreview/js/jquery.ba-throttle-debounce.min.js +2 -0
  356. data/lib/gollum/frontend/public/gollum/livepreview/js/livepreview.js +456 -0
  357. data/lib/gollum/frontend/public/gollum/livepreview/js/md_sundown.js +22 -0
  358. data/lib/gollum/frontend/public/gollum/livepreview/js/requirejs.min.js +35 -0
  359. data/lib/gollum/frontend/public/gollum/livepreview/js/sundown.js +1 -0
  360. data/lib/gollum/frontend/public/gollum/livepreview/licenses/ace/LICENSE.txt +476 -0
  361. data/lib/gollum/frontend/public/gollum/livepreview/licenses/bootstraponline_gollum/LICENSE.txt +9 -0
  362. data/lib/gollum/frontend/public/gollum/livepreview/licenses/debounce/LICENSE-MIT.txt +22 -0
  363. data/lib/gollum/frontend/public/gollum/livepreview/licenses/gollum/LICENSE.txt +21 -0
  364. data/lib/gollum/frontend/public/gollum/livepreview/licenses/jquery/MIT-LICENSE.txt +20 -0
  365. data/lib/gollum/frontend/public/gollum/livepreview/licenses/licenses.txt +59 -0
  366. data/lib/gollum/frontend/public/gollum/livepreview/licenses/notepages/LICENSE.txt +19 -0
  367. data/lib/gollum/frontend/public/gollum/livepreview/licenses/requirejs/LICENSE.txt +58 -0
  368. data/lib/gollum/frontend/public/gollum/livepreview/licenses/retina_display_icon_set/by_sa_3.0_unported_legalcode.txt +359 -0
  369. data/lib/gollum/frontend/public/gollum/livepreview/licenses/sizzle/LICENSE.txt +148 -0
  370. data/lib/gollum/frontend/public/gollum/livepreview/licenses/sundown/sundown.txt +4 -0
  371. data/lib/gollum/frontend/public/gollum/livepreview/readme.md +44 -0
  372. data/lib/gollum/frontend/templates/compare.mustache +9 -9
  373. data/lib/gollum/frontend/templates/create.mustache +4 -1
  374. data/lib/gollum/frontend/templates/edit.mustache +6 -3
  375. data/lib/gollum/frontend/templates/editor.mustache +30 -14
  376. data/lib/gollum/frontend/templates/file_view.mustache +32 -0
  377. data/lib/gollum/frontend/templates/history.mustache +8 -8
  378. data/lib/gollum/frontend/templates/layout.mustache +21 -14
  379. data/lib/gollum/frontend/templates/page.mustache +37 -14
  380. data/lib/gollum/frontend/templates/pages.mustache +14 -10
  381. data/lib/gollum/frontend/templates/search.mustache +2 -2
  382. data/lib/gollum/frontend/templates/searchbar.mustache +1 -1
  383. data/lib/gollum/frontend/uri_encode_component.rb +172 -0
  384. data/lib/gollum/frontend/views/compare.rb +2 -4
  385. data/lib/gollum/frontend/views/create.rb +5 -0
  386. data/lib/gollum/frontend/views/edit.rb +12 -0
  387. data/lib/gollum/frontend/views/file_view.rb +19 -0
  388. data/lib/gollum/frontend/views/has_page.rb +15 -0
  389. data/lib/gollum/frontend/views/history.rb +8 -4
  390. data/lib/gollum/frontend/views/layout.rb +9 -1
  391. data/lib/gollum/frontend/views/page.rb +37 -10
  392. data/lib/gollum/frontend/views/pages.rb +48 -0
  393. data/lib/gollum/git_access.rb +2 -2
  394. data/lib/gollum/markup.rb +115 -19
  395. data/lib/gollum/page.rb +79 -9
  396. data/lib/gollum/tex.rb +319 -42
  397. data/lib/gollum/wiki.rb +92 -12
  398. data/licenses/css_tree_menu_thecssninja/license.txt +50 -0
  399. data/licenses/licenses.txt +23 -0
  400. data/licenses/unity_asset_pool/COPYRIGHT +286 -0
  401. data/test/examples/lotr.git/config +1 -1
  402. data/test/examples/lotr.git/logs/HEAD +4 -0
  403. data/test/examples/lotr.git/logs/refs/heads/master +4 -0
  404. data/test/examples/lotr.git/objects/0d/c9016ca928c78d5421a99a53b379b53929221e +0 -0
  405. data/test/examples/lotr.git/objects/1c/79ddc69707f7b164bc2ea58beb5d8965ff6bd0 +0 -0
  406. data/test/examples/lotr.git/objects/27/680b0fce1abfbc528e7aa53d92645852d52eb6 +0 -0
  407. data/test/examples/lotr.git/objects/45/3b250f979c7bd6dfb62640c944c982ae6721ee +0 -0
  408. data/test/examples/lotr.git/objects/45/f319ee12f2b551b901b22e72602963c366fff1 +0 -0
  409. data/test/examples/lotr.git/objects/46/a697caf435815bb07bbce947fc2d58be15f087 +0 -0
  410. data/test/examples/lotr.git/objects/4c/45c2b4e297a726c3d3f66886f35373e48fe1c5 +2 -0
  411. data/test/examples/lotr.git/objects/4e/023f460ce466e154ca09d8774c79ad5a53fc15 +0 -0
  412. data/test/examples/lotr.git/objects/62/9aa678272b017a4d136d35e77ac94d80b08dc2 +1 -0
  413. data/test/examples/lotr.git/objects/6e/48abfc56565574859e081ee58eae655d48cf71 +0 -0
  414. data/test/examples/lotr.git/objects/7b/60c5a20a501a70f2317fa0ef763e1e2ce22d6b +0 -0
  415. data/test/examples/lotr.git/objects/7d/981cd984ad589e3cf00d8122170c6f7d685979 +0 -0
  416. data/test/examples/lotr.git/objects/94/9a9cc3119b9c98817f375e976d2bb5e2a42809 +0 -0
  417. data/test/examples/lotr.git/objects/9b/e95b960ac388d4e7db55f610f828e9c31344e6 +0 -0
  418. data/test/examples/lotr.git/objects/b0/de6e794dfdc7ef3400e894225bfe23308aae5c +0 -0
  419. data/test/examples/lotr.git/objects/b1/6b3d9fad9d78e5a669e7f33d94c96da374eccd +0 -0
  420. data/test/examples/lotr.git/objects/c9/6a7645db5d4c76389e77cd103ef3ed77d81e4c +0 -0
  421. data/test/examples/lotr.git/objects/ca/7355dc497e9729fbaf0c0e3f424b86afef5614 +0 -0
  422. data/test/examples/lotr.git/objects/cf/ea406f5f77afc7fb673a43e97721234385b1bd +2 -0
  423. data/test/examples/lotr.git/objects/d5/29304506d37f544675244c335d85cab5d29966 +0 -0
  424. data/test/examples/lotr.git/objects/fb/c5dd7d807707b4a0a97c1182fecfef1eced5df +1 -0
  425. data/test/examples/lotr.git/objects/fc/3eee516ff72dc9099ba00d4611eb02e5c9e634 +0 -0
  426. data/test/examples/lotr.git/objects/ff/6f7de62644369380ba73b4e4297c1a2d6f0b66 +0 -0
  427. data/test/examples/lotr.git/refs/heads/master +1 -1
  428. data/test/examples/revert.git/COMMIT_EDITMSG +1 -1
  429. data/test/examples/revert.git/index +0 -0
  430. data/test/examples/revert.git/logs/HEAD +1 -0
  431. data/test/examples/revert.git/logs/refs/heads/master +1 -0
  432. data/test/examples/revert.git/objects/10/2685c42018f802557f05db171f44443e8dacab +0 -0
  433. data/test/examples/revert.git/objects/8e/83f898e5e16ae400db59dda1017acad540f3aa +0 -0
  434. data/test/examples/revert.git/objects/ed/6c9f63b98acf73c25b5ffbb38da557d3682023 +3 -0
  435. data/test/examples/revert.git/refs/heads/master +1 -1
  436. data/test/file_view/1_file.txt +3 -0
  437. data/test/file_view/1_file_1_folder.txt +8 -0
  438. data/test/file_view/1_folder.txt +8 -0
  439. data/test/file_view/2_files_2_folders.txt +12 -0
  440. data/test/file_view/2_files_2_folders_1_root.txt +13 -0
  441. data/test/file_view/nested_folders.txt +28 -0
  442. data/test/test_app.rb +162 -12
  443. data/test/test_app_helpers.rb +13 -0
  444. data/test/test_committer.rb +1 -1
  445. data/test/test_file_view.rb +102 -0
  446. data/test/test_git_access.rb +3 -2
  447. data/test/test_markup.rb +45 -12
  448. data/test/test_page.rb +65 -1
  449. data/test/test_page_revert.rb +14 -2
  450. data/test/test_pages_view.rb +37 -0
  451. data/test/test_unicode.rb +110 -0
  452. data/test/test_wiki.rb +51 -4
  453. metadata +658 -239
  454. data/lib/gollum/frontend/public/gollum/javascript/jquery.js +0 -7179
@@ -0,0 +1,163 @@
1
+ /* vim:ts=4:sts=4:sw=4:
2
+ * ***** BEGIN LICENSE BLOCK *****
3
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
4
+ *
5
+ * The contents of this file are subject to the Mozilla Public License Version
6
+ * 1.1 (the "License"); you may not use this file except in compliance with
7
+ * the License. You may obtain a copy of the License at
8
+ * http://www.mozilla.org/MPL/
9
+ *
10
+ * Software distributed under the License is distributed on an "AS IS" basis,
11
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12
+ * for the specific language governing rights and limitations under the
13
+ * License.
14
+ *
15
+ * The Original Code is Ajax.org Code Editor (ACE).
16
+ *
17
+ * The Initial Developer of the Original Code is
18
+ * Ajax.org B.V.
19
+ * Portions created by the Initial Developer are Copyright (C) 2010
20
+ * the Initial Developer. All Rights Reserved.
21
+ *
22
+ * Contributor(s):
23
+ * Harutyun Amirjanyan <amirjanyan AT gmail DOT com>
24
+ *
25
+ * Alternatively, the contents of this file may be used under the terms of
26
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
27
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
28
+ * in which case the provisions of the GPL or the LGPL are applicable instead
29
+ * of those above. If you wish to allow use of your version of this file only
30
+ * under the terms of either the GPL or the LGPL, and not to allow others to
31
+ * use your version of this file under the terms of the MPL, indicate your
32
+ * decision by deleting the provisions above and replace them with the notice
33
+ * and other provisions required by the GPL or the LGPL. If you do not delete
34
+ * the provisions above, a recipient may use your version of this file under
35
+ * the terms of any one of the MPL, the GPL or the LGPL.
36
+ *
37
+ * ***** END LICENSE BLOCK ***** */
38
+
39
+ define(function(require, exports, module) {
40
+
41
+ var event = require("../lib/event");
42
+
43
+
44
+ // mouse
45
+ function isSamePoint(p1, p2) {
46
+ return p1.row == p2.row && p1.column == p2.column;
47
+ }
48
+
49
+ function onMouseDown(e) {
50
+ var ev = e.domEvent;
51
+ var alt = ev.altKey;
52
+ var shift = ev.shiftKey;
53
+ var ctrl = e.getAccelKey();
54
+ var button = e.getButton();
55
+
56
+ if (e.editor.inMultiSelectMode && button == 2) {
57
+ e.editor.textInput.onContextMenu(e.domEvent);
58
+ return;
59
+ }
60
+
61
+ if (!ctrl && !alt) {
62
+ if (button == 0 && e.editor.inMultiSelectMode)
63
+ e.editor.exitMultiSelectMode();
64
+ return;
65
+ }
66
+
67
+ var editor = e.editor;
68
+ var selection = editor.selection;
69
+ var isMultiSelect = editor.inMultiSelectMode;
70
+ var pos = e.getDocumentPosition();
71
+ var cursor = selection.getCursor();
72
+ var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));
73
+
74
+
75
+ var mouseX = e.x, mouseY = e.y;
76
+ var onMouseSelection = function(e) {
77
+ mouseX = e.clientX;
78
+ mouseY = e.clientY;
79
+ };
80
+
81
+ var blockSelect = function() {
82
+ var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);
83
+ var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column);
84
+
85
+ if (isSamePoint(screenCursor, newCursor)
86
+ && isSamePoint(cursor, selection.selectionLead))
87
+ return;
88
+ screenCursor = newCursor;
89
+
90
+ editor.selection.moveCursorToPosition(cursor);
91
+ editor.selection.clearSelection();
92
+ editor.renderer.scrollCursorIntoView();
93
+
94
+ editor.removeSelectionMarkers(rectSel);
95
+ rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);
96
+ rectSel.forEach(editor.addSelectionMarker, editor);
97
+ editor.updateSelectionMarkers();
98
+ };
99
+
100
+ var session = editor.session;
101
+ var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);
102
+ var screenCursor = screenAnchor;
103
+
104
+
105
+
106
+ if (ctrl && !shift && !alt && button == 0) {
107
+ if (!isMultiSelect && inSelection)
108
+ return; // dragging
109
+
110
+ if (!isMultiSelect) {
111
+ var range = selection.toOrientedRange();
112
+ editor.addSelectionMarker(range);
113
+ }
114
+
115
+ var oldRange = selection.rangeList.rangeAtPoint(pos);
116
+
117
+ event.capture(editor.container, function(){}, function() {
118
+ var tmpSel = selection.toOrientedRange();
119
+
120
+ if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))
121
+ selection.substractPoint(tmpSel.cursor);
122
+ else {
123
+ if (range) {
124
+ editor.removeSelectionMarker(range);
125
+ selection.addRange(range);
126
+ }
127
+ selection.addRange(tmpSel);
128
+ }
129
+ });
130
+
131
+ } else if (!shift && alt && button == 0) {
132
+ e.stop();
133
+
134
+ if (isMultiSelect && !ctrl)
135
+ selection.toSingleRange();
136
+ else if (!isMultiSelect && ctrl)
137
+ selection.addRange();
138
+
139
+ selection.moveCursorToPosition(pos);
140
+ selection.clearSelection();
141
+
142
+ var rectSel = [];
143
+
144
+ var onMouseSelectionEnd = function(e) {
145
+ clearInterval(timerId);
146
+ editor.removeSelectionMarkers(rectSel);
147
+ for (var i = 0; i < rectSel.length; i++)
148
+ selection.addRange(rectSel[i]);
149
+ };
150
+
151
+ var onSelectionInterval = blockSelect;
152
+
153
+ event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);
154
+ var timerId = setInterval(function() {onSelectionInterval();}, 20);
155
+
156
+ return e.preventDefault();
157
+ }
158
+ }
159
+
160
+
161
+ exports.onMouseDown = onMouseDown;
162
+
163
+ });
@@ -0,0 +1,762 @@
1
+ /* vim:ts=4:sts=4:sw=4:
2
+ * ***** BEGIN LICENSE BLOCK *****
3
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
4
+ *
5
+ * The contents of this file are subject to the Mozilla Public License Version
6
+ * 1.1 (the "License"); you may not use this file except in compliance with
7
+ * the License. You may obtain a copy of the License at
8
+ * http://www.mozilla.org/MPL/
9
+ *
10
+ * Software distributed under the License is distributed on an "AS IS" basis,
11
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12
+ * for the specific language governing rights and limitations under the
13
+ * License.
14
+ *
15
+ * The Original Code is Ajax.org Code Editor (ACE).
16
+ *
17
+ * The Initial Developer of the Original Code is
18
+ * Ajax.org B.V.
19
+ * Portions created by the Initial Developer are Copyright (C) 2010
20
+ * the Initial Developer. All Rights Reserved.
21
+ *
22
+ * Contributor(s):
23
+ * Harutyun Amirjanyan <amirjanyan AT gmail DOT com>
24
+ *
25
+ * Alternatively, the contents of this file may be used under the terms of
26
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
27
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
28
+ * in which case the provisions of the GPL or the LGPL are applicable instead
29
+ * of those above. If you wish to allow use of your version of this file only
30
+ * under the terms of either the GPL or the LGPL, and not to allow others to
31
+ * use your version of this file under the terms of the MPL, indicate your
32
+ * decision by deleting the provisions above and replace them with the notice
33
+ * and other provisions required by the GPL or the LGPL. If you do not delete
34
+ * the provisions above, a recipient may use your version of this file under
35
+ * the terms of any one of the MPL, the GPL or the LGPL.
36
+ *
37
+ * ***** END LICENSE BLOCK ***** */
38
+
39
+ define(function(require, exports, module) {
40
+
41
+ var RangeList = require("./range_list").RangeList;
42
+ var Range = require("./range").Range;
43
+ var Selection = require("./selection").Selection;
44
+ var onMouseDown = require("./mouse/multi_select_handler").onMouseDown;
45
+ var event = require("./lib/event");
46
+ var commands = require("./commands/multi_select_commands");
47
+ exports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);
48
+
49
+ // Todo: session.find or editor.findVolatile that returns range
50
+ var Search = require("./search").Search;
51
+ var search = new Search();
52
+
53
+ function find(session, needle, dir) {
54
+ search.$options.wrap = true;
55
+ search.$options.needle = needle;
56
+ search.$options.backwards = dir == -1;
57
+ return search.find(session);
58
+ }
59
+
60
+ // extend EditSession
61
+ var EditSession = require("./edit_session").EditSession;
62
+ (function() {
63
+ this.getSelectionMarkers = function() {
64
+ return this.$selectionMarkers;
65
+ };
66
+ }).call(EditSession.prototype);
67
+
68
+ // extend Selection
69
+ (function() {
70
+ // list of ranges in reverse addition order
71
+ this.ranges = null;
72
+
73
+ // automatically sorted list of ranges
74
+ this.rangeList = null;
75
+
76
+ /** extension
77
+ * Selection.addRange(range, $blockChangeEvents)
78
+ * - range (Range): The new range to add
79
+ * - $blockChangeEvents (Boolean): Whether or not to block changing events
80
+ *
81
+ * Adds a range to a selection by entering multiselect mode, if necessary.
82
+ **/
83
+ this.addRange = function(range, $blockChangeEvents) {
84
+ if (!range)
85
+ return;
86
+
87
+ if (!this.inMultiSelectMode && this.rangeCount == 0) {
88
+ var oldRange = this.toOrientedRange();
89
+ if (range.intersects(oldRange))
90
+ return $blockChangeEvents || this.fromOrientedRange(range);
91
+
92
+ this.rangeList.add(oldRange);
93
+ this.$onAddRange(oldRange);
94
+ }
95
+
96
+ if (!range.cursor)
97
+ range.cursor = range.end;
98
+
99
+ var removed = this.rangeList.add(range);
100
+
101
+ this.$onAddRange(range);
102
+
103
+ if (removed.length)
104
+ this.$onRemoveRange(removed);
105
+
106
+ if (this.rangeCount > 1 && !this.inMultiSelectMode) {
107
+ this._emit("multiSelect");
108
+ this.inMultiSelectMode = true;
109
+ this.session.$undoSelect = false;
110
+ this.rangeList.attach(this.session);
111
+ }
112
+
113
+ return $blockChangeEvents || this.fromOrientedRange(range);
114
+ };
115
+
116
+ this.toSingleRange = function(range) {
117
+ range = range || this.ranges[0];
118
+ var removed = this.rangeList.removeAll();
119
+ if (removed.length)
120
+ this.$onRemoveRange(removed);
121
+
122
+ range && this.fromOrientedRange(range);
123
+ };
124
+
125
+ /** extension
126
+ * Selection.substractPoint(pos) -> Range
127
+ * - pos (Range): The position to remove, as a `{row, column}` object
128
+ *
129
+ * Removes a Range containing pos (if it exists).
130
+ **/
131
+ this.substractPoint = function(pos) {
132
+ var removed = this.rangeList.substractPoint(pos);
133
+ if (removed) {
134
+ this.$onRemoveRange(removed);
135
+ return removed[0];
136
+ }
137
+ };
138
+
139
+ /** extension
140
+ * Selection.mergeOverlappingRanges()
141
+ *
142
+ * Merges overlapping ranges ensuring consistency after changes
143
+ **/
144
+ this.mergeOverlappingRanges = function() {
145
+ var removed = this.rangeList.merge();
146
+ if (removed.length)
147
+ this.$onRemoveRange(removed);
148
+ else if(this.ranges[0])
149
+ this.fromOrientedRange(this.ranges[0]);
150
+ };
151
+
152
+ this.$onAddRange = function(range) {
153
+ this.rangeCount = this.rangeList.ranges.length;
154
+ this.ranges.unshift(range);
155
+ this._emit("addRange", {range: range});
156
+ };
157
+
158
+ this.$onRemoveRange = function(removed) {
159
+ this.rangeCount = this.rangeList.ranges.length;
160
+ if (this.rangeCount == 1 && this.inMultiSelectMode) {
161
+ var lastRange = this.rangeList.ranges.pop();
162
+ removed.push(lastRange);
163
+ this.rangeCount = 0;
164
+ }
165
+
166
+ for (var i = removed.length; i--; ) {
167
+ var index = this.ranges.indexOf(removed[i]);
168
+ this.ranges.splice(index, 1);
169
+ }
170
+
171
+ this._emit("removeRange", {ranges: removed});
172
+
173
+ if (this.rangeCount == 0 && this.inMultiSelectMode) {
174
+ this.inMultiSelectMode = false;
175
+ this._emit("singleSelect");
176
+ this.session.$undoSelect = true;
177
+ this.rangeList.detach(this.session);
178
+ }
179
+
180
+ lastRange = lastRange || this.ranges[0];
181
+ if (lastRange && !lastRange.isEqual(this.getRange()))
182
+ this.fromOrientedRange(lastRange);
183
+ };
184
+
185
+ // adds multicursor support to selection
186
+ this.$initRangeList = function() {
187
+ if (this.rangeList)
188
+ return;
189
+
190
+ this.rangeList = new RangeList();
191
+ this.ranges = [];
192
+ this.rangeCount = 0;
193
+ };
194
+
195
+ this.getAllRanges = function() {
196
+ return this.rangeList.ranges.concat();
197
+ };
198
+
199
+ this.splitIntoLines = function () {
200
+ if (this.rangeCount > 1) {
201
+ var ranges = this.rangeList.ranges;
202
+ var lastRange = ranges[ranges.length - 1];
203
+ var range = Range.fromPoints(ranges[0].start, lastRange.end);
204
+
205
+ this.toSingleRange();
206
+ this.setSelectionRange(range, lastRange.cursor == lastRange.start);
207
+ } else {
208
+ var range = this.getRange();
209
+ var startRow = range.start.row;
210
+ var endRow = range.end.row;
211
+ if (startRow == endRow)
212
+ return;
213
+
214
+ var rectSel = [];
215
+ var r = this.getLineRange(startRow, true);
216
+ r.start.column = range.start.column;
217
+ rectSel.push(r);
218
+
219
+ for (var i = startRow + 1; i < endRow; i++)
220
+ rectSel.push(this.getLineRange(i, true));
221
+
222
+ r = this.getLineRange(endRow, true);
223
+ r.end.column = range.end.column;
224
+ rectSel.push(r);
225
+
226
+ rectSel.forEach(this.addRange, this);
227
+ }
228
+ };
229
+
230
+ this.toggleBlockSelection = function () {
231
+ if (this.rangeCount > 1) {
232
+ var ranges = this.rangeList.ranges;
233
+ var lastRange = ranges[ranges.length - 1];
234
+ var range = Range.fromPoints(ranges[0].start, lastRange.end);
235
+
236
+ this.toSingleRange();
237
+ this.setSelectionRange(range, lastRange.cursor == lastRange.start);
238
+ } else {
239
+ var cursor = this.session.documentToScreenPosition(this.selectionLead);
240
+ var anchor = this.session.documentToScreenPosition(this.selectionAnchor);
241
+
242
+ var rectSel = this.rectangularRangeBlock(cursor, anchor);
243
+ rectSel.forEach(this.addRange, this);
244
+ }
245
+ };
246
+
247
+ /** extension
248
+ * Selection.rectangularRangeBlock(screenCursor, screenAnchor, includeEmptyLines) -> Range
249
+ * - screenCursor (Cursor): The cursor to use
250
+ * - screenAnchor (Anchor): The anchor to use
251
+ * - includeEmptyLins (Boolean): If true, this includes ranges inside the block which are empty due to clipping
252
+ *
253
+ * Gets list of ranges composing rectangular block on the screen
254
+ *
255
+ */
256
+ this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) {
257
+ var rectSel = [];
258
+
259
+ var xBackwards = screenCursor.column < screenAnchor.column;
260
+ if (xBackwards) {
261
+ var startColumn = screenCursor.column;
262
+ var endColumn = screenAnchor.column;
263
+ } else {
264
+ var startColumn = screenAnchor.column;
265
+ var endColumn = screenCursor.column;
266
+ }
267
+
268
+ var yBackwards = screenCursor.row < screenAnchor.row;
269
+ if (yBackwards) {
270
+ var startRow = screenCursor.row;
271
+ var endRow = screenAnchor.row;
272
+ } else {
273
+ var startRow = screenAnchor.row;
274
+ var endRow = screenCursor.row;
275
+ }
276
+
277
+ if (startColumn < 0)
278
+ startColumn = 0;
279
+ if (startRow < 0)
280
+ startRow = 0;
281
+
282
+ if (startRow == endRow)
283
+ includeEmptyLines = true;
284
+
285
+ for (var row = startRow; row <= endRow; row++) {
286
+ var range = Range.fromPoints(
287
+ this.session.screenToDocumentPosition(row, startColumn),
288
+ this.session.screenToDocumentPosition(row, endColumn)
289
+ );
290
+ if (range.isEmpty()) {
291
+ if (docEnd && isSamePoint(range.end, docEnd))
292
+ break;
293
+ var docEnd = range.end;
294
+ }
295
+ range.cursor = xBackwards ? range.start : range.end;
296
+ rectSel.push(range);
297
+ }
298
+
299
+ if (yBackwards)
300
+ rectSel.reverse();
301
+
302
+ if (!includeEmptyLines) {
303
+ var end = rectSel.length - 1;
304
+ while (rectSel[end].isEmpty() && end > 0)
305
+ end--;
306
+ if (end > 0) {
307
+ var start = 0;
308
+ while (rectSel[start].isEmpty())
309
+ start++;
310
+ }
311
+ for (var i = end; i >= start; i--) {
312
+ if (rectSel[i].isEmpty())
313
+ rectSel.splice(i, 1);
314
+ }
315
+ }
316
+
317
+ return rectSel;
318
+ };
319
+ }).call(Selection.prototype);
320
+
321
+ // extend Editor
322
+ var Editor = require("./editor").Editor;
323
+ (function() {
324
+
325
+ /** extension
326
+ * Editor.updateSelectionMarkers()
327
+ *
328
+ * Updates the cursor and marker layers.
329
+ **/
330
+ this.updateSelectionMarkers = function() {
331
+ this.renderer.updateCursor();
332
+ this.renderer.updateBackMarkers();
333
+ };
334
+
335
+ /** extension
336
+ * Editor.addSelectionMarker(orientedRange) -> Range
337
+ * - orientedRange (Range): A range containing a cursor
338
+ *
339
+ * Adds the selection and cursor.
340
+ **/
341
+ this.addSelectionMarker = function(orientedRange) {
342
+ if (!orientedRange.cursor)
343
+ orientedRange.cursor = orientedRange.end;
344
+
345
+ var style = this.getSelectionStyle();
346
+ orientedRange.marker = this.session.addMarker(orientedRange, "ace_selection", style);
347
+
348
+ this.session.$selectionMarkers.push(orientedRange);
349
+ this.session.selectionMarkerCount = this.session.$selectionMarkers.length;
350
+ return orientedRange;
351
+ };
352
+
353
+ /** extension
354
+ * Editor.removeSelectionMarker(range)
355
+ * - range (Range): The selection range added with [[Editor.addSelectionMarker `addSelectionMarker()`]].
356
+ *
357
+ * Removes the selection marker.
358
+ **/
359
+ this.removeSelectionMarker = function(range) {
360
+ if (!range.marker)
361
+ return;
362
+ this.session.removeMarker(range.marker);
363
+ var index = this.session.$selectionMarkers.indexOf(range);
364
+ if (index != -1)
365
+ this.session.$selectionMarkers.splice(index, 1);
366
+ this.session.selectionMarkerCount = this.session.$selectionMarkers.length;
367
+ };
368
+
369
+ this.removeSelectionMarkers = function(ranges) {
370
+ var markerList = this.session.$selectionMarkers;
371
+ for (var i = ranges.length; i--; ) {
372
+ var range = ranges[i];
373
+ if (!range.marker)
374
+ continue;
375
+ this.session.removeMarker(range.marker);
376
+ var index = markerList.indexOf(range);
377
+ if (index != -1)
378
+ markerList.splice(index, 1);
379
+ }
380
+ this.session.selectionMarkerCount = markerList.length;
381
+ };
382
+
383
+ this.$onAddRange = function(e) {
384
+ this.addSelectionMarker(e.range);
385
+ this.renderer.updateCursor();
386
+ this.renderer.updateBackMarkers();
387
+ };
388
+
389
+ this.$onRemoveRange = function(e) {
390
+ this.removeSelectionMarkers(e.ranges);
391
+ this.renderer.updateCursor();
392
+ this.renderer.updateBackMarkers();
393
+ };
394
+
395
+ this.$onMultiSelect = function(e) {
396
+ if (this.inMultiSelectMode)
397
+ return;
398
+ this.inMultiSelectMode = true;
399
+
400
+ this.setStyle("multiselect");
401
+ this.keyBinding.addKeyboardHandler(commands.keyboardHandler);
402
+ this.commands.on("exec", this.$onMultiSelectExec);
403
+
404
+ this.renderer.updateCursor();
405
+ this.renderer.updateBackMarkers();
406
+ };
407
+
408
+ this.$onSingleSelect = function(e) {
409
+ if (this.session.multiSelect.inVirtualMode)
410
+ return;
411
+ this.inMultiSelectMode = false;
412
+
413
+ this.unsetStyle("multiselect");
414
+ this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);
415
+
416
+ this.commands.removeEventListener("exec", this.$onMultiSelectExec);
417
+ this.renderer.updateCursor();
418
+ this.renderer.updateBackMarkers();
419
+ };
420
+
421
+ this.$onMultiSelectExec = function(e) {
422
+ var command = e.command;
423
+ var editor = e.editor;
424
+ if (!editor.multiSelect)
425
+ return;
426
+ if (!command.multiSelectAction) {
427
+ command.exec(editor, e.args || {});
428
+ editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());
429
+ editor.multiSelect.mergeOverlappingRanges();
430
+ } else if (command.multiSelectAction == "forEach") {
431
+ editor.forEachSelection(command, e.args);
432
+ } else if (command.multiSelectAction == "single") {
433
+ editor.exitMultiSelectMode();
434
+ command.exec(editor, e.args || {});
435
+ } else {
436
+ command.multiSelectAction(editor, e.args || {});
437
+ }
438
+ e.preventDefault();
439
+ };
440
+
441
+ /** extension
442
+ * Editor.forEachSelection(cmd, args)
443
+ * - cmd (String): The command to execute
444
+ * - args (String): Any arguments for the command
445
+ *
446
+ * Executes a command for each selection range.
447
+ **/
448
+ this.forEachSelection = function(cmd, args) {
449
+ if (this.inVirtualSelectionMode)
450
+ return;
451
+
452
+ var session = this.session;
453
+ var selection = this.selection;
454
+ var rangeList = selection.rangeList;
455
+
456
+ var reg = selection._eventRegistry;
457
+ selection._eventRegistry = {};
458
+
459
+ var tmpSel = new Selection(session);
460
+ this.inVirtualSelectionMode = true;
461
+ for (var i = rangeList.ranges.length; i--;) {
462
+ tmpSel.fromOrientedRange(rangeList.ranges[i]);
463
+ this.selection = session.selection = tmpSel;
464
+ cmd.exec(this, args || {});
465
+ tmpSel.toOrientedRange(rangeList.ranges[i]);
466
+ }
467
+ tmpSel.detach();
468
+
469
+ this.selection = session.selection = selection;
470
+ this.inVirtualSelectionMode = false;
471
+ selection._eventRegistry = reg;
472
+ selection.mergeOverlappingRanges();
473
+
474
+ this.onCursorChange();
475
+ this.onSelectionChange();
476
+ };
477
+
478
+ /** extension
479
+ * Editor.exitMultiSelectMode() -> Void
480
+ *
481
+ * Removes all the selections except the last added one.
482
+ **/
483
+ this.exitMultiSelectMode = function() {
484
+ if (this.inVirtualSelectionMode)
485
+ return;
486
+ this.multiSelect.toSingleRange();
487
+ };
488
+
489
+ this.getCopyText = function() {
490
+ var text = "";
491
+ if (this.inMultiSelectMode) {
492
+ var ranges = this.multiSelect.rangeList.ranges;
493
+ text = [];
494
+ for (var i = 0; i < ranges.length; i++) {
495
+ text.push(this.session.getTextRange(ranges[i]));
496
+ }
497
+ text = text.join(this.session.getDocument().getNewLineCharacter());
498
+ } else if (!this.selection.isEmpty()) {
499
+ text = this.session.getTextRange(this.getSelectionRange());
500
+ }
501
+
502
+ return text;
503
+ };
504
+
505
+ this.onPaste = function(text) {
506
+ this._emit("paste", text);
507
+ if (!this.inMultiSelectMode)
508
+ return this.insert(text);
509
+
510
+ var lines = text.split(/\r\n|\r|\n/);
511
+ var ranges = this.selection.rangeList.ranges;
512
+
513
+ if (lines.length > ranges.length || (lines.length <= 2 || !lines[1]))
514
+ return this.commands.exec("insertstring", this, text);
515
+
516
+ for (var i = ranges.length; i--; ) {
517
+ var range = ranges[i];
518
+ if (!range.isEmpty())
519
+ this.session.remove(range);
520
+
521
+ this.session.insert(range.start, lines[i]);
522
+ }
523
+ };
524
+
525
+ /** extension
526
+ * Editor.findAll(needle, options, additive) -> Number
527
+ * - needle (String): The text to find
528
+ * - options (Object): The search options
529
+ * - additive (Boolean): keeps
530
+ *
531
+ * Finds and selects all the occurences of `needle`.
532
+ **/
533
+ this.findAll = function(needle, options, additive) {
534
+ options = options || {};
535
+ options.needle = needle || options.needle;
536
+ this.$search.set(options);
537
+
538
+ var ranges = this.$search.findAll(this.session);
539
+ if (!ranges.length)
540
+ return 0;
541
+
542
+ this.$blockScrolling += 1;
543
+ var selection = this.multiSelect;
544
+
545
+ if (!additive)
546
+ selection.toSingleRange(ranges[0]);
547
+
548
+ for (var i = ranges.length; i--; )
549
+ selection.addRange(ranges[i], true);
550
+
551
+ this.$blockScrolling -= 1;
552
+
553
+ return ranges.length;
554
+ };
555
+
556
+ // commands
557
+ /** extension
558
+ * Editor.selectMoreLines(dir, skip)
559
+ * - dir (Number): The direction of lines to select: -1 for up, 1 for down
560
+ * - skip (Boolean): If `true`, removes the active selection range
561
+ *
562
+ * Adds a cursor above or below the active cursor.
563
+ **/
564
+ this.selectMoreLines = function(dir, skip) {
565
+ var range = this.selection.toOrientedRange();
566
+ var isBackwards = range.cursor == range.end;
567
+
568
+ var screenLead = this.session.documentToScreenPosition(range.cursor);
569
+ if (this.selection.$desiredColumn)
570
+ screenLead.column = this.selection.$desiredColumn;
571
+
572
+ var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);
573
+
574
+ if (!range.isEmpty()) {
575
+ var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);
576
+ var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);
577
+ } else {
578
+ var anchor = lead;
579
+ }
580
+
581
+ if (isBackwards) {
582
+ var newRange = Range.fromPoints(lead, anchor);
583
+ newRange.cursor = newRange.start;
584
+ } else {
585
+ var newRange = Range.fromPoints(anchor, lead);
586
+ newRange.cursor = newRange.end;
587
+ }
588
+
589
+ newRange.desiredColumn = screenLead.column;
590
+ if (!this.selection.inMultiSelectMode) {
591
+ this.selection.addRange(range);
592
+ } else {
593
+ if (skip)
594
+ var toRemove = range.cursor;
595
+ }
596
+
597
+ this.selection.addRange(newRange);
598
+ if (toRemove)
599
+ this.selection.substractPoint(toRemove);
600
+ };
601
+
602
+ /** extension
603
+ * Editor.transposeSelections(dir)
604
+ * - dir (Number): The direction to rotate selections
605
+ *
606
+ * Transposes the selected ranges.
607
+ **/
608
+ this.transposeSelections = function(dir) {
609
+ var session = this.session;
610
+ var sel = session.multiSelect;
611
+ var all = sel.ranges;
612
+
613
+ for (var i = all.length; i--; ) {
614
+ var range = all[i];
615
+ if (range.isEmpty()) {
616
+ var tmp = session.getWordRange(range.start.row, range.start.column);
617
+ range.start.row = tmp.start.row;
618
+ range.start.column = tmp.start.column;
619
+ range.end.row = tmp.end.row;
620
+ range.end.column = tmp.end.column;
621
+ }
622
+ }
623
+ sel.mergeOverlappingRanges();
624
+
625
+ var words = [];
626
+ for (var i = all.length; i--; ) {
627
+ var range = all[i];
628
+ words.unshift(session.getTextRange(range));
629
+ }
630
+
631
+ if (dir < 0)
632
+ words.unshift(words.pop());
633
+ else
634
+ words.push(words.shift());
635
+
636
+ for (var i = all.length; i--; ) {
637
+ var range = all[i];
638
+ var tmp = range.clone();
639
+ session.replace(range, words[i]);
640
+ range.start.row = tmp.start.row;
641
+ range.start.column = tmp.start.column;
642
+ }
643
+ }
644
+
645
+ /** extension
646
+ * Editor.selectMore(dir, skip)
647
+ * - dir (Number): The direction of lines to select: -1 for up, 1 for down
648
+ * - skip (Boolean): If `true`, removes the active selection range
649
+ *
650
+ * Finds the next occurence of text in an active selection and adds it to the selections.
651
+ **/
652
+ this.selectMore = function (dir, skip) {
653
+ var session = this.session;
654
+ var sel = session.multiSelect;
655
+
656
+ var range = sel.toOrientedRange();
657
+ if (range.isEmpty()) {
658
+ var range = session.getWordRange(range.start.row, range.start.column);
659
+ range.cursor = range.end;
660
+ this.multiSelect.addRange(range);
661
+ }
662
+ var needle = session.getTextRange(range);
663
+
664
+ var newRange = find(session, needle, dir);
665
+ if (newRange) {
666
+ newRange.cursor = dir == -1 ? newRange.start : newRange.end;
667
+ this.multiSelect.addRange(newRange);
668
+ }
669
+ if (skip)
670
+ this.multiSelect.substractPoint(range.cursor);
671
+ };
672
+ }).call(Editor.prototype);
673
+
674
+
675
+ function isSamePoint(p1, p2) {
676
+ return p1.row == p2.row && p1.column == p2.column;
677
+ }
678
+
679
+ // patch
680
+ // adds multicursor support to a session
681
+ exports.onSessionChange = function(e) {
682
+ var session = e.session;
683
+ if (!session.multiSelect) {
684
+ session.$selectionMarkers = [];
685
+ session.selection.$initRangeList();
686
+ session.multiSelect = session.selection;
687
+ }
688
+ this.multiSelect = session.multiSelect;
689
+
690
+ var oldSession = e.oldSession;
691
+ if (oldSession) {
692
+ // todo use events
693
+ if (oldSession.multiSelect && oldSession.multiSelect.editor == this)
694
+ oldSession.multiSelect.editor = null;
695
+
696
+ session.multiSelect.removeEventListener("addRange", this.$onAddRange);
697
+ session.multiSelect.removeEventListener("removeRange", this.$onRemoveRange);
698
+ session.multiSelect.removeEventListener("multiSelect", this.$onMultiSelect);
699
+ session.multiSelect.removeEventListener("singleSelect", this.$onSingleSelect);
700
+ }
701
+
702
+ session.multiSelect.on("addRange", this.$onAddRange);
703
+ session.multiSelect.on("removeRange", this.$onRemoveRange);
704
+ session.multiSelect.on("multiSelect", this.$onMultiSelect);
705
+ session.multiSelect.on("singleSelect", this.$onSingleSelect);
706
+
707
+ // this.$onSelectionChange = this.onSelectionChange.bind(this);
708
+
709
+ if (this.inMultiSelectMode != session.selection.inMultiSelectMode) {
710
+ if (session.selection.inMultiSelectMode)
711
+ this.$onMultiSelect();
712
+ else
713
+ this.$onSingleSelect();
714
+ }
715
+ };
716
+
717
+ // MultiSelect(editor)
718
+ // adds multiple selection support to the editor
719
+ // (note: should be called only once for each editor instance)
720
+ function MultiSelect(editor) {
721
+ editor.$onAddRange = editor.$onAddRange.bind(editor);
722
+ editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);
723
+ editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);
724
+ editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);
725
+
726
+ exports.onSessionChange.call(editor, editor);
727
+ editor.on("changeSession", exports.onSessionChange.bind(editor));
728
+
729
+ editor.on("mousedown", onMouseDown);
730
+ editor.commands.addCommands(commands.defaultCommands);
731
+
732
+ addAltCursorListeners(editor);
733
+ }
734
+
735
+ function addAltCursorListeners(editor){
736
+ var el = editor.textInput.getElement();
737
+ var altCursor = false;
738
+ var contentEl = editor.renderer.content;
739
+ event.addListener(el, "keydown", function(e) {
740
+ if (e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey)) {
741
+ if (!altCursor) {
742
+ contentEl.style.cursor = "crosshair";
743
+ altCursor = true;
744
+ }
745
+ } else if (altCursor) {
746
+ contentEl.style.cursor = "";
747
+ }
748
+ });
749
+
750
+ event.addListener(el, "keyup", reset);
751
+ event.addListener(el, "blur", reset);
752
+ function reset() {
753
+ if (altCursor) {
754
+ contentEl.style.cursor = "";
755
+ altCursor = false;
756
+ }
757
+ }
758
+ }
759
+
760
+ exports.MultiSelect = MultiSelect;
761
+
762
+ });