administrate-field-simple_mde_markdown 0.1.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 (419) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +72 -0
  3. data/.circleci/setup-rubygems.sh +3 -0
  4. data/.gitignore +11 -0
  5. data/.rspec +3 -0
  6. data/CODE_OF_CONDUCT.md +74 -0
  7. data/Gemfile +8 -0
  8. data/Gemfile.lock +196 -0
  9. data/LICENSE.txt +21 -0
  10. data/README.md +44 -0
  11. data/Rakefile +8 -0
  12. data/administrate-field-simple_mde_markdown.gemspec +31 -0
  13. data/app/assets/javascripts/administrate-field-simple_mde_markdown/application.js +6 -0
  14. data/app/assets/stylesheets/administrate-field-simple_mde_markdown/application.css +3 -0
  15. data/app/views/fields/simple_mde_markdown/_form.html.erb +6 -0
  16. data/app/views/fields/simple_mde_markdown/_index.html.erb +1 -0
  17. data/app/views/fields/simple_mde_markdown/_show.html.erb +1 -0
  18. data/lib/administrate/field/simple_mde_markdown.rb +31 -0
  19. data/node_modules/.bin/marked +1 -0
  20. data/node_modules/codemirror-spell-checker/.eslintrc +23 -0
  21. data/node_modules/codemirror-spell-checker/.npmignore +2 -0
  22. data/node_modules/codemirror-spell-checker/.travis.yml +18 -0
  23. data/node_modules/codemirror-spell-checker/CONTRIBUTING 2.md +10 -0
  24. data/node_modules/codemirror-spell-checker/CONTRIBUTING.md +10 -0
  25. data/node_modules/codemirror-spell-checker/LICENSE +22 -0
  26. data/node_modules/codemirror-spell-checker/README.md +50 -0
  27. data/node_modules/codemirror-spell-checker/bower.json +27 -0
  28. data/node_modules/codemirror-spell-checker/debug/.spell-checker 2.css.icloud +0 -0
  29. data/node_modules/codemirror-spell-checker/debug/spell-checker.css +9 -0
  30. data/node_modules/codemirror-spell-checker/debug/spell-checker.debug.js +2844 -0
  31. data/node_modules/codemirror-spell-checker/debug/spell-checker.js +2841 -0
  32. data/node_modules/codemirror-spell-checker/dist/.spell-checker.min 2.css.icloud +0 -0
  33. data/node_modules/codemirror-spell-checker/dist/en_US.aff +201 -0
  34. data/node_modules/codemirror-spell-checker/dist/en_US.dic +62120 -0
  35. data/node_modules/codemirror-spell-checker/dist/spell-checker.min 2.js +7 -0
  36. data/node_modules/codemirror-spell-checker/dist/spell-checker.min.css +7 -0
  37. data/node_modules/codemirror-spell-checker/dist/spell-checker.min.js +7 -0
  38. data/node_modules/codemirror-spell-checker/gulpfile.js +94 -0
  39. data/node_modules/codemirror-spell-checker/package.json +75 -0
  40. data/node_modules/codemirror-spell-checker/src/css/spell-checker.css +3 -0
  41. data/node_modules/codemirror-spell-checker/src/data/en_US.aff +201 -0
  42. data/node_modules/codemirror-spell-checker/src/data/en_US.dic +62120 -0
  43. data/node_modules/codemirror-spell-checker/src/js/spell-checker.js +119 -0
  44. data/node_modules/codemirror/.package 2.json.icloud +0 -0
  45. data/node_modules/codemirror/AUTHORS +773 -0
  46. data/node_modules/codemirror/CHANGELOG.md +1486 -0
  47. data/node_modules/codemirror/CONTRIBUTING.md +92 -0
  48. data/node_modules/codemirror/LICENSE +21 -0
  49. data/node_modules/codemirror/README.md +49 -0
  50. data/node_modules/codemirror/addon/comment/comment.js +209 -0
  51. data/node_modules/codemirror/addon/comment/continuecomment.js +78 -0
  52. data/node_modules/codemirror/addon/dialog/dialog.css +32 -0
  53. data/node_modules/codemirror/addon/dialog/dialog.js +161 -0
  54. data/node_modules/codemirror/addon/display/autorefresh.js +47 -0
  55. data/node_modules/codemirror/addon/display/fullscreen.css +6 -0
  56. data/node_modules/codemirror/addon/display/fullscreen.js +41 -0
  57. data/node_modules/codemirror/addon/display/panel.js +127 -0
  58. data/node_modules/codemirror/addon/display/placeholder.js +63 -0
  59. data/node_modules/codemirror/addon/display/rulers.js +51 -0
  60. data/node_modules/codemirror/addon/edit/closebrackets.js +187 -0
  61. data/node_modules/codemirror/addon/edit/closetag.js +175 -0
  62. data/node_modules/codemirror/addon/edit/continuelist.js +89 -0
  63. data/node_modules/codemirror/addon/edit/matchbrackets.js +145 -0
  64. data/node_modules/codemirror/addon/edit/matchtags.js +66 -0
  65. data/node_modules/codemirror/addon/edit/trailingspace.js +27 -0
  66. data/node_modules/codemirror/addon/fold/brace-fold.js +105 -0
  67. data/node_modules/codemirror/addon/fold/comment-fold.js +59 -0
  68. data/node_modules/codemirror/addon/fold/foldcode.js +152 -0
  69. data/node_modules/codemirror/addon/fold/foldgutter.css +20 -0
  70. data/node_modules/codemirror/addon/fold/foldgutter.js +146 -0
  71. data/node_modules/codemirror/addon/fold/indent-fold.js +48 -0
  72. data/node_modules/codemirror/addon/fold/markdown-fold.js +49 -0
  73. data/node_modules/codemirror/addon/fold/xml-fold.js +184 -0
  74. data/node_modules/codemirror/addon/hint/anyword-hint.js +41 -0
  75. data/node_modules/codemirror/addon/hint/css-hint.js +60 -0
  76. data/node_modules/codemirror/addon/hint/html-hint.js +348 -0
  77. data/node_modules/codemirror/addon/hint/javascript-hint.js +157 -0
  78. data/node_modules/codemirror/addon/hint/show-hint.css +36 -0
  79. data/node_modules/codemirror/addon/hint/show-hint.js +434 -0
  80. data/node_modules/codemirror/addon/hint/sql-hint.js +299 -0
  81. data/node_modules/codemirror/addon/hint/xml-hint.js +110 -0
  82. data/node_modules/codemirror/addon/lint/coffeescript-lint.js +47 -0
  83. data/node_modules/codemirror/addon/lint/css-lint.js +40 -0
  84. data/node_modules/codemirror/addon/lint/html-lint.js +53 -0
  85. data/node_modules/codemirror/addon/lint/javascript-lint.js +63 -0
  86. data/node_modules/codemirror/addon/lint/json-lint.js +40 -0
  87. data/node_modules/codemirror/addon/lint/lint.css +73 -0
  88. data/node_modules/codemirror/addon/lint/lint.js +252 -0
  89. data/node_modules/codemirror/addon/lint/yaml-lint.js +41 -0
  90. data/node_modules/codemirror/addon/merge/merge.css +119 -0
  91. data/node_modules/codemirror/addon/merge/merge.js +1002 -0
  92. data/node_modules/codemirror/addon/mode/loadmode.js +64 -0
  93. data/node_modules/codemirror/addon/mode/multiplex.js +131 -0
  94. data/node_modules/codemirror/addon/mode/multiplex_test.js +33 -0
  95. data/node_modules/codemirror/addon/mode/overlay.js +90 -0
  96. data/node_modules/codemirror/addon/mode/simple.js +216 -0
  97. data/node_modules/codemirror/addon/runmode/colorize.js +40 -0
  98. data/node_modules/codemirror/addon/runmode/runmode-standalone.js +158 -0
  99. data/node_modules/codemirror/addon/runmode/runmode.js +72 -0
  100. data/node_modules/codemirror/addon/runmode/runmode.node.js +197 -0
  101. data/node_modules/codemirror/addon/scroll/annotatescrollbar.js +122 -0
  102. data/node_modules/codemirror/addon/scroll/scrollpastend.js +48 -0
  103. data/node_modules/codemirror/addon/scroll/simplescrollbars.css +66 -0
  104. data/node_modules/codemirror/addon/scroll/simplescrollbars.js +152 -0
  105. data/node_modules/codemirror/addon/search/jump-to-line.js +50 -0
  106. data/node_modules/codemirror/addon/search/match-highlighter.js +165 -0
  107. data/node_modules/codemirror/addon/search/matchesonscrollbar.css +8 -0
  108. data/node_modules/codemirror/addon/search/matchesonscrollbar.js +97 -0
  109. data/node_modules/codemirror/addon/search/search.js +258 -0
  110. data/node_modules/codemirror/addon/search/searchcursor.js +293 -0
  111. data/node_modules/codemirror/addon/selection/active-line.js +72 -0
  112. data/node_modules/codemirror/addon/selection/mark-selection.js +119 -0
  113. data/node_modules/codemirror/addon/selection/selection-pointer.js +98 -0
  114. data/node_modules/codemirror/addon/tern/tern.css +87 -0
  115. data/node_modules/codemirror/addon/tern/tern.js +718 -0
  116. data/node_modules/codemirror/addon/tern/worker.js +44 -0
  117. data/node_modules/codemirror/addon/wrap/hardwrap.js +145 -0
  118. data/node_modules/codemirror/bin/source-highlight +48 -0
  119. data/node_modules/codemirror/keymap/emacs.js +417 -0
  120. data/node_modules/codemirror/keymap/sublime.js +691 -0
  121. data/node_modules/codemirror/keymap/vim.js +5467 -0
  122. data/node_modules/codemirror/lib/codemirror.css +346 -0
  123. data/node_modules/codemirror/lib/codemirror.js +9698 -0
  124. data/node_modules/codemirror/mode/apl/apl.js +174 -0
  125. data/node_modules/codemirror/mode/asciiarmor/asciiarmor.js +74 -0
  126. data/node_modules/codemirror/mode/asn.1/asn.1.js +204 -0
  127. data/node_modules/codemirror/mode/asterisk/asterisk.js +196 -0
  128. data/node_modules/codemirror/mode/brainfuck/brainfuck.js +85 -0
  129. data/node_modules/codemirror/mode/clike/clike.js +879 -0
  130. data/node_modules/codemirror/mode/clojure/clojure.js +292 -0
  131. data/node_modules/codemirror/mode/cmake/cmake.js +97 -0
  132. data/node_modules/codemirror/mode/cobol/cobol.js +255 -0
  133. data/node_modules/codemirror/mode/coffeescript/coffeescript.js +359 -0
  134. data/node_modules/codemirror/mode/commonlisp/commonlisp.js +124 -0
  135. data/node_modules/codemirror/mode/crystal/crystal.js +433 -0
  136. data/node_modules/codemirror/mode/css/css.js +832 -0
  137. data/node_modules/codemirror/mode/cypher/cypher.js +150 -0
  138. data/node_modules/codemirror/mode/d/d.js +223 -0
  139. data/node_modules/codemirror/mode/dart/dart.js +157 -0
  140. data/node_modules/codemirror/mode/diff/diff.js +47 -0
  141. data/node_modules/codemirror/mode/django/django.js +356 -0
  142. data/node_modules/codemirror/mode/dockerfile/dockerfile.js +211 -0
  143. data/node_modules/codemirror/mode/dtd/dtd.js +142 -0
  144. data/node_modules/codemirror/mode/dylan/dylan.js +352 -0
  145. data/node_modules/codemirror/mode/ebnf/ebnf.js +195 -0
  146. data/node_modules/codemirror/mode/ecl/ecl.js +206 -0
  147. data/node_modules/codemirror/mode/eiffel/eiffel.js +160 -0
  148. data/node_modules/codemirror/mode/elm/elm.js +205 -0
  149. data/node_modules/codemirror/mode/erlang/erlang.js +619 -0
  150. data/node_modules/codemirror/mode/factor/factor.js +85 -0
  151. data/node_modules/codemirror/mode/fcl/fcl.js +173 -0
  152. data/node_modules/codemirror/mode/forth/forth.js +180 -0
  153. data/node_modules/codemirror/mode/fortran/fortran.js +188 -0
  154. data/node_modules/codemirror/mode/gas/gas.js +345 -0
  155. data/node_modules/codemirror/mode/gfm/gfm.js +129 -0
  156. data/node_modules/codemirror/mode/gherkin/gherkin.js +178 -0
  157. data/node_modules/codemirror/mode/go/go.js +187 -0
  158. data/node_modules/codemirror/mode/groovy/groovy.js +230 -0
  159. data/node_modules/codemirror/mode/haml/haml.js +161 -0
  160. data/node_modules/codemirror/mode/handlebars/handlebars.js +66 -0
  161. data/node_modules/codemirror/mode/haskell-literate/haskell-literate.js +43 -0
  162. data/node_modules/codemirror/mode/haskell/haskell.js +268 -0
  163. data/node_modules/codemirror/mode/haxe/haxe.js +515 -0
  164. data/node_modules/codemirror/mode/htmlembedded/htmlembedded.js +37 -0
  165. data/node_modules/codemirror/mode/htmlmixed/htmlmixed.js +152 -0
  166. data/node_modules/codemirror/mode/http/http.js +113 -0
  167. data/node_modules/codemirror/mode/idl/idl.js +290 -0
  168. data/node_modules/codemirror/mode/javascript/javascript.js +899 -0
  169. data/node_modules/codemirror/mode/jinja2/jinja2.js +144 -0
  170. data/node_modules/codemirror/mode/jsx/jsx.js +148 -0
  171. data/node_modules/codemirror/mode/julia/julia.js +433 -0
  172. data/node_modules/codemirror/mode/livescript/livescript.js +280 -0
  173. data/node_modules/codemirror/mode/lua/lua.js +159 -0
  174. data/node_modules/codemirror/mode/markdown/markdown.js +884 -0
  175. data/node_modules/codemirror/mode/mathematica/mathematica.js +176 -0
  176. data/node_modules/codemirror/mode/mbox/mbox.js +129 -0
  177. data/node_modules/codemirror/mode/meta.js +217 -0
  178. data/node_modules/codemirror/mode/mirc/mirc.js +193 -0
  179. data/node_modules/codemirror/mode/mllike/mllike.js +359 -0
  180. data/node_modules/codemirror/mode/modelica/modelica.js +245 -0
  181. data/node_modules/codemirror/mode/mscgen/mscgen.js +175 -0
  182. data/node_modules/codemirror/mode/mumps/mumps.js +148 -0
  183. data/node_modules/codemirror/mode/nginx/nginx.js +178 -0
  184. data/node_modules/codemirror/mode/nsis/nsis.js +95 -0
  185. data/node_modules/codemirror/mode/ntriples/ntriples.js +195 -0
  186. data/node_modules/codemirror/mode/octave/octave.js +139 -0
  187. data/node_modules/codemirror/mode/oz/oz.js +252 -0
  188. data/node_modules/codemirror/mode/pascal/pascal.js +121 -0
  189. data/node_modules/codemirror/mode/pegjs/pegjs.js +114 -0
  190. data/node_modules/codemirror/mode/perl/perl.js +837 -0
  191. data/node_modules/codemirror/mode/php/php.js +234 -0
  192. data/node_modules/codemirror/mode/pig/pig.js +178 -0
  193. data/node_modules/codemirror/mode/powershell/powershell.js +398 -0
  194. data/node_modules/codemirror/mode/properties/properties 2.js +78 -0
  195. data/node_modules/codemirror/mode/properties/properties.js +78 -0
  196. data/node_modules/codemirror/mode/protobuf/protobuf.js +69 -0
  197. data/node_modules/codemirror/mode/pug/pug.js +591 -0
  198. data/node_modules/codemirror/mode/puppet/puppet.js +220 -0
  199. data/node_modules/codemirror/mode/python/python.js +409 -0
  200. data/node_modules/codemirror/mode/q/q.js +139 -0
  201. data/node_modules/codemirror/mode/r/r.js +190 -0
  202. data/node_modules/codemirror/mode/rpm/changes/index.html +66 -0
  203. data/node_modules/codemirror/mode/rpm/rpm.js +109 -0
  204. data/node_modules/codemirror/mode/rst/rst.js +557 -0
  205. data/node_modules/codemirror/mode/ruby/ruby.js +296 -0
  206. data/node_modules/codemirror/mode/rust/rust.js +72 -0
  207. data/node_modules/codemirror/mode/sas/sas.js +303 -0
  208. data/node_modules/codemirror/mode/sass/sass.js +454 -0
  209. data/node_modules/codemirror/mode/scheme/scheme.js +265 -0
  210. data/node_modules/codemirror/mode/shell/shell.js +152 -0
  211. data/node_modules/codemirror/mode/sieve/sieve.js +193 -0
  212. data/node_modules/codemirror/mode/slim/slim.js +575 -0
  213. data/node_modules/codemirror/mode/smalltalk/smalltalk.js +168 -0
  214. data/node_modules/codemirror/mode/smarty/smarty.js +225 -0
  215. data/node_modules/codemirror/mode/solr/solr.js +104 -0
  216. data/node_modules/codemirror/mode/soy/soy 2.js +359 -0
  217. data/node_modules/codemirror/mode/soy/soy.js +235 -0
  218. data/node_modules/codemirror/mode/sparql/sparql.js +180 -0
  219. data/node_modules/codemirror/mode/spreadsheet/spreadsheet.js +112 -0
  220. data/node_modules/codemirror/mode/sql/sql.js +499 -0
  221. data/node_modules/codemirror/mode/stex/stex.js +264 -0
  222. data/node_modules/codemirror/mode/stylus/stylus.js +771 -0
  223. data/node_modules/codemirror/mode/swift/swift.js +219 -0
  224. data/node_modules/codemirror/mode/tcl/tcl.js +139 -0
  225. data/node_modules/codemirror/mode/textile/textile.js +469 -0
  226. data/node_modules/codemirror/mode/tiddlywiki/tiddlywiki.css +14 -0
  227. data/node_modules/codemirror/mode/tiddlywiki/tiddlywiki.js +308 -0
  228. data/node_modules/codemirror/mode/tiki/tiki.css +26 -0
  229. data/node_modules/codemirror/mode/tiki/tiki.js +312 -0
  230. data/node_modules/codemirror/mode/toml/toml.js +88 -0
  231. data/node_modules/codemirror/mode/tornado/tornado.js +68 -0
  232. data/node_modules/codemirror/mode/troff/troff.js +84 -0
  233. data/node_modules/codemirror/mode/ttcn-cfg/ttcn-cfg.js +214 -0
  234. data/node_modules/codemirror/mode/ttcn/ttcn.js +283 -0
  235. data/node_modules/codemirror/mode/turtle/turtle.js +162 -0
  236. data/node_modules/codemirror/mode/twig/twig.js +141 -0
  237. data/node_modules/codemirror/mode/vb/vb.js +275 -0
  238. data/node_modules/codemirror/mode/vbscript/vbscript.js +350 -0
  239. data/node_modules/codemirror/mode/velocity/velocity.js +201 -0
  240. data/node_modules/codemirror/mode/verilog/verilog.js +675 -0
  241. data/node_modules/codemirror/mode/vhdl/vhdl.js +189 -0
  242. data/node_modules/codemirror/mode/vue/vue.js +77 -0
  243. data/node_modules/codemirror/mode/webidl/webidl.js +195 -0
  244. data/node_modules/codemirror/mode/xml/xml.js +402 -0
  245. data/node_modules/codemirror/mode/xquery/xquery.js +448 -0
  246. data/node_modules/codemirror/mode/yacas/yacas.js +204 -0
  247. data/node_modules/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js +68 -0
  248. data/node_modules/codemirror/mode/yaml/yaml.js +120 -0
  249. data/node_modules/codemirror/mode/z80/z80.js +116 -0
  250. data/node_modules/codemirror/package.json +2395 -0
  251. data/node_modules/codemirror/rollup.config.js +20 -0
  252. data/node_modules/codemirror/src/codemirror.js +3 -0
  253. data/node_modules/codemirror/src/display/Display.js +106 -0
  254. data/node_modules/codemirror/src/display/focus.js +47 -0
  255. data/node_modules/codemirror/src/display/gutters.js +34 -0
  256. data/node_modules/codemirror/src/display/highlight_worker.js +55 -0
  257. data/node_modules/codemirror/src/display/line_numbers.js +48 -0
  258. data/node_modules/codemirror/src/display/mode_state.js +22 -0
  259. data/node_modules/codemirror/src/display/operations.js +205 -0
  260. data/node_modules/codemirror/src/display/scroll_events.js +115 -0
  261. data/node_modules/codemirror/src/display/scrollbars.js +193 -0
  262. data/node_modules/codemirror/src/display/scrolling.js +184 -0
  263. data/node_modules/codemirror/src/display/selection.js +158 -0
  264. data/node_modules/codemirror/src/display/update_display.js +260 -0
  265. data/node_modules/codemirror/src/display/update_line.js +188 -0
  266. data/node_modules/codemirror/src/display/update_lines.js +64 -0
  267. data/node_modules/codemirror/src/display/view_tracking.js +153 -0
  268. data/node_modules/codemirror/src/edit/CodeMirror.js +215 -0
  269. data/node_modules/codemirror/src/edit/commands.js +178 -0
  270. data/node_modules/codemirror/src/edit/deleteNearSelection.js +30 -0
  271. data/node_modules/codemirror/src/edit/drop_events.js +119 -0
  272. data/node_modules/codemirror/src/edit/fromTextArea.js +61 -0
  273. data/node_modules/codemirror/src/edit/global_events.js +42 -0
  274. data/node_modules/codemirror/src/edit/key_events.js +159 -0
  275. data/node_modules/codemirror/src/edit/legacy.js +62 -0
  276. data/node_modules/codemirror/src/edit/main.js +69 -0
  277. data/node_modules/codemirror/src/edit/methods.js +544 -0
  278. data/node_modules/codemirror/src/edit/mouse_events.js +407 -0
  279. data/node_modules/codemirror/src/edit/options.js +193 -0
  280. data/node_modules/codemirror/src/edit/utils.js +7 -0
  281. data/node_modules/codemirror/src/input/ContentEditableInput.js +527 -0
  282. data/node_modules/codemirror/src/input/TextareaInput.js +355 -0
  283. data/node_modules/codemirror/src/input/indent.js +71 -0
  284. data/node_modules/codemirror/src/input/input.js +135 -0
  285. data/node_modules/codemirror/src/input/keymap.js +148 -0
  286. data/node_modules/codemirror/src/input/keynames.js +17 -0
  287. data/node_modules/codemirror/src/input/movement.js +110 -0
  288. data/node_modules/codemirror/src/line/highlight.js +284 -0
  289. data/node_modules/codemirror/src/line/line_data.js +339 -0
  290. data/node_modules/codemirror/src/line/pos.js +40 -0
  291. data/node_modules/codemirror/src/line/saw_special_spans.js +10 -0
  292. data/node_modules/codemirror/src/line/spans.js +382 -0
  293. data/node_modules/codemirror/src/line/utils_line.js +85 -0
  294. data/node_modules/codemirror/src/measurement/position_measurement.js +699 -0
  295. data/node_modules/codemirror/src/measurement/widgets.js +26 -0
  296. data/node_modules/codemirror/src/model/Doc.js +432 -0
  297. data/node_modules/codemirror/src/model/change_measurement.js +61 -0
  298. data/node_modules/codemirror/src/model/changes.js +333 -0
  299. data/node_modules/codemirror/src/model/chunk.js +167 -0
  300. data/node_modules/codemirror/src/model/document_data.js +111 -0
  301. data/node_modules/codemirror/src/model/history.js +228 -0
  302. data/node_modules/codemirror/src/model/line_widget.js +78 -0
  303. data/node_modules/codemirror/src/model/mark_text.js +292 -0
  304. data/node_modules/codemirror/src/model/selection.js +84 -0
  305. data/node_modules/codemirror/src/model/selection_updates.js +208 -0
  306. data/node_modules/codemirror/src/modes.js +96 -0
  307. data/node_modules/codemirror/src/util/StringStream.js +90 -0
  308. data/node_modules/codemirror/src/util/bidi.js +214 -0
  309. data/node_modules/codemirror/src/util/browser.js +33 -0
  310. data/node_modules/codemirror/src/util/dom.js +97 -0
  311. data/node_modules/codemirror/src/util/event.js +103 -0
  312. data/node_modules/codemirror/src/util/feature_detection.js +84 -0
  313. data/node_modules/codemirror/src/util/misc.js +150 -0
  314. data/node_modules/codemirror/src/util/operation_group.js +72 -0
  315. data/node_modules/codemirror/theme/3024-day.css +41 -0
  316. data/node_modules/codemirror/theme/3024-night.css +39 -0
  317. data/node_modules/codemirror/theme/abcdef.css +32 -0
  318. data/node_modules/codemirror/theme/ambiance-mobile.css +5 -0
  319. data/node_modules/codemirror/theme/ambiance.css +74 -0
  320. data/node_modules/codemirror/theme/base16-dark.css +38 -0
  321. data/node_modules/codemirror/theme/base16-light.css +38 -0
  322. data/node_modules/codemirror/theme/bespin.css +34 -0
  323. data/node_modules/codemirror/theme/blackboard.css +32 -0
  324. data/node_modules/codemirror/theme/cobalt.css +25 -0
  325. data/node_modules/codemirror/theme/colorforth.css +33 -0
  326. data/node_modules/codemirror/theme/darcula.css +46 -0
  327. data/node_modules/codemirror/theme/dracula.css +40 -0
  328. data/node_modules/codemirror/theme/duotone-dark.css +35 -0
  329. data/node_modules/codemirror/theme/duotone-light.css +36 -0
  330. data/node_modules/codemirror/theme/eclipse.css +23 -0
  331. data/node_modules/codemirror/theme/elegant.css +13 -0
  332. data/node_modules/codemirror/theme/erlang-dark.css +34 -0
  333. data/node_modules/codemirror/theme/gruvbox-dark.css +37 -0
  334. data/node_modules/codemirror/theme/hopscotch.css +34 -0
  335. data/node_modules/codemirror/theme/icecoder.css +43 -0
  336. data/node_modules/codemirror/theme/idea.css +42 -0
  337. data/node_modules/codemirror/theme/isotope.css +34 -0
  338. data/node_modules/codemirror/theme/lesser-dark.css +47 -0
  339. data/node_modules/codemirror/theme/liquibyte.css +95 -0
  340. data/node_modules/codemirror/theme/lucario.css +37 -0
  341. data/node_modules/codemirror/theme/material.css +53 -0
  342. data/node_modules/codemirror/theme/mbo.css +37 -0
  343. data/node_modules/codemirror/theme/mdn-like.css +46 -0
  344. data/node_modules/codemirror/theme/midnight.css +43 -0
  345. data/node_modules/codemirror/theme/monokai.css +41 -0
  346. data/node_modules/codemirror/theme/neat.css +12 -0
  347. data/node_modules/codemirror/theme/neo.css +43 -0
  348. data/node_modules/codemirror/theme/night.css +27 -0
  349. data/node_modules/codemirror/theme/oceanic-next.css +44 -0
  350. data/node_modules/codemirror/theme/panda-syntax.css +85 -0
  351. data/node_modules/codemirror/theme/paraiso-dark.css +38 -0
  352. data/node_modules/codemirror/theme/paraiso-light.css +38 -0
  353. data/node_modules/codemirror/theme/pastel-on-dark.css +52 -0
  354. data/node_modules/codemirror/theme/railscasts.css +34 -0
  355. data/node_modules/codemirror/theme/rubyblue.css +25 -0
  356. data/node_modules/codemirror/theme/seti.css +44 -0
  357. data/node_modules/codemirror/theme/shadowfox.css +52 -0
  358. data/node_modules/codemirror/theme/solarized.css +168 -0
  359. data/node_modules/codemirror/theme/ssms.css +16 -0
  360. data/node_modules/codemirror/theme/the-matrix.css +30 -0
  361. data/node_modules/codemirror/theme/tomorrow-night-bright.css +35 -0
  362. data/node_modules/codemirror/theme/tomorrow-night-eighties.css +38 -0
  363. data/node_modules/codemirror/theme/ttcn.css +64 -0
  364. data/node_modules/codemirror/theme/twilight.css +32 -0
  365. data/node_modules/codemirror/theme/vibrant-ink.css +34 -0
  366. data/node_modules/codemirror/theme/xq-dark.css +53 -0
  367. data/node_modules/codemirror/theme/xq-light.css +43 -0
  368. data/node_modules/codemirror/theme/yeti.css +44 -0
  369. data/node_modules/codemirror/theme/zenburn.css +37 -0
  370. data/node_modules/marked/.editorconfig +16 -0
  371. data/node_modules/marked/.eslintignore +1 -0
  372. data/node_modules/marked/.eslintrc.json +28 -0
  373. data/node_modules/marked/.package 2.json.icloud +0 -0
  374. data/node_modules/marked/.travis.yml +47 -0
  375. data/node_modules/marked/Makefile +15 -0
  376. data/node_modules/marked/Makefile 2 +15 -0
  377. data/node_modules/marked/README 2.md +75 -0
  378. data/node_modules/marked/README.md +75 -0
  379. data/node_modules/marked/bin/marked +199 -0
  380. data/node_modules/marked/bower.json +23 -0
  381. data/node_modules/marked/component.json +10 -0
  382. data/node_modules/marked/index.js +1 -0
  383. data/node_modules/marked/jasmine.json +11 -0
  384. data/node_modules/marked/lib/marked 2.js +1604 -0
  385. data/node_modules/marked/lib/marked.js +1604 -0
  386. data/node_modules/marked/man/marked.1 +91 -0
  387. data/node_modules/marked/man/marked.1.txt +96 -0
  388. data/node_modules/marked/marked.min.js +6 -0
  389. data/node_modules/marked/package.json +95 -0
  390. data/node_modules/simplemde/.eslintrc +23 -0
  391. data/node_modules/simplemde/.npmignore +9 -0
  392. data/node_modules/simplemde/.travis.yml +18 -0
  393. data/node_modules/simplemde/CONTRIBUTING 2.md +10 -0
  394. data/node_modules/simplemde/CONTRIBUTING.md +10 -0
  395. data/node_modules/simplemde/LICENSE +22 -0
  396. data/node_modules/simplemde/README.md +331 -0
  397. data/node_modules/simplemde/bower.json +23 -0
  398. data/node_modules/simplemde/debug/.simplemde 2.css.icloud +0 -0
  399. data/node_modules/simplemde/debug/simplemde.css +676 -0
  400. data/node_modules/simplemde/debug/simplemde.debug.js +17023 -0
  401. data/node_modules/simplemde/debug/simplemde.js +17019 -0
  402. data/node_modules/simplemde/dist/simplemde.min.css +7 -0
  403. data/node_modules/simplemde/dist/simplemde.min.js +15 -0
  404. data/node_modules/simplemde/gulpfile.js +96 -0
  405. data/node_modules/simplemde/package.json +73 -0
  406. data/node_modules/simplemde/src/css/simplemde.css +328 -0
  407. data/node_modules/simplemde/src/js/codemirror/tablist 2.js +44 -0
  408. data/node_modules/simplemde/src/js/codemirror/tablist.js +44 -0
  409. data/node_modules/simplemde/src/js/simplemde.js +2028 -0
  410. data/node_modules/typo-js/README.md +45 -0
  411. data/node_modules/typo-js/dictionaries/en_US/.en_US 2.dic.icloud +0 -0
  412. data/node_modules/typo-js/dictionaries/en_US/README.md +7 -0
  413. data/node_modules/typo-js/dictionaries/en_US/en_US.aff +201 -0
  414. data/node_modules/typo-js/dictionaries/en_US/en_US.dic +62120 -0
  415. data/node_modules/typo-js/package.json +56 -0
  416. data/node_modules/typo-js/typo.js +931 -0
  417. data/package-lock.json +40 -0
  418. data/package.json +7 -0
  419. metadata +557 -0
@@ -0,0 +1,115 @@
1
+ import { chrome, gecko, ie, mac, presto, safari, webkit } from "../util/browser.js"
2
+ import { e_preventDefault } from "../util/event.js"
3
+
4
+ import { updateDisplaySimple } from "./update_display.js"
5
+ import { setScrollLeft, updateScrollTop } from "./scrolling.js"
6
+
7
+ // Since the delta values reported on mouse wheel events are
8
+ // unstandardized between browsers and even browser versions, and
9
+ // generally horribly unpredictable, this code starts by measuring
10
+ // the scroll effect that the first few mouse wheel events have,
11
+ // and, from that, detects the way it can convert deltas to pixel
12
+ // offsets afterwards.
13
+ //
14
+ // The reason we want to know the amount a wheel event will scroll
15
+ // is that it gives us a chance to update the display before the
16
+ // actual scrolling happens, reducing flickering.
17
+
18
+ let wheelSamples = 0, wheelPixelsPerUnit = null
19
+ // Fill in a browser-detected starting value on browsers where we
20
+ // know one. These don't have to be accurate -- the result of them
21
+ // being wrong would just be a slight flicker on the first wheel
22
+ // scroll (if it is large enough).
23
+ if (ie) wheelPixelsPerUnit = -.53
24
+ else if (gecko) wheelPixelsPerUnit = 15
25
+ else if (chrome) wheelPixelsPerUnit = -.7
26
+ else if (safari) wheelPixelsPerUnit = -1/3
27
+
28
+ function wheelEventDelta(e) {
29
+ let dx = e.wheelDeltaX, dy = e.wheelDeltaY
30
+ if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail
31
+ if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail
32
+ else if (dy == null) dy = e.wheelDelta
33
+ return {x: dx, y: dy}
34
+ }
35
+ export function wheelEventPixels(e) {
36
+ let delta = wheelEventDelta(e)
37
+ delta.x *= wheelPixelsPerUnit
38
+ delta.y *= wheelPixelsPerUnit
39
+ return delta
40
+ }
41
+
42
+ export function onScrollWheel(cm, e) {
43
+ let delta = wheelEventDelta(e), dx = delta.x, dy = delta.y
44
+
45
+ let display = cm.display, scroll = display.scroller
46
+ // Quit if there's nothing to scroll here
47
+ let canScrollX = scroll.scrollWidth > scroll.clientWidth
48
+ let canScrollY = scroll.scrollHeight > scroll.clientHeight
49
+ if (!(dx && canScrollX || dy && canScrollY)) return
50
+
51
+ // Webkit browsers on OS X abort momentum scrolls when the target
52
+ // of the scroll event is removed from the scrollable element.
53
+ // This hack (see related code in patchDisplay) makes sure the
54
+ // element is kept around.
55
+ if (dy && mac && webkit) {
56
+ outer: for (let cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {
57
+ for (let i = 0; i < view.length; i++) {
58
+ if (view[i].node == cur) {
59
+ cm.display.currentWheelTarget = cur
60
+ break outer
61
+ }
62
+ }
63
+ }
64
+ }
65
+
66
+ // On some browsers, horizontal scrolling will cause redraws to
67
+ // happen before the gutter has been realigned, causing it to
68
+ // wriggle around in a most unseemly way. When we have an
69
+ // estimated pixels/delta value, we just handle horizontal
70
+ // scrolling entirely here. It'll be slightly off from native, but
71
+ // better than glitching out.
72
+ if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {
73
+ if (dy && canScrollY)
74
+ updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit))
75
+ setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit))
76
+ // Only prevent default scrolling if vertical scrolling is
77
+ // actually possible. Otherwise, it causes vertical scroll
78
+ // jitter on OSX trackpads when deltaX is small and deltaY
79
+ // is large (issue #3579)
80
+ if (!dy || (dy && canScrollY))
81
+ e_preventDefault(e)
82
+ display.wheelStartX = null // Abort measurement, if in progress
83
+ return
84
+ }
85
+
86
+ // 'Project' the visible viewport to cover the area that is being
87
+ // scrolled into view (if we know enough to estimate it).
88
+ if (dy && wheelPixelsPerUnit != null) {
89
+ let pixels = dy * wheelPixelsPerUnit
90
+ let top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight
91
+ if (pixels < 0) top = Math.max(0, top + pixels - 50)
92
+ else bot = Math.min(cm.doc.height, bot + pixels + 50)
93
+ updateDisplaySimple(cm, {top: top, bottom: bot})
94
+ }
95
+
96
+ if (wheelSamples < 20) {
97
+ if (display.wheelStartX == null) {
98
+ display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop
99
+ display.wheelDX = dx; display.wheelDY = dy
100
+ setTimeout(() => {
101
+ if (display.wheelStartX == null) return
102
+ let movedX = scroll.scrollLeft - display.wheelStartX
103
+ let movedY = scroll.scrollTop - display.wheelStartY
104
+ let sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||
105
+ (movedX && display.wheelDX && movedX / display.wheelDX)
106
+ display.wheelStartX = display.wheelStartY = null
107
+ if (!sample) return
108
+ wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1)
109
+ ++wheelSamples
110
+ }, 200)
111
+ } else {
112
+ display.wheelDX += dx; display.wheelDY += dy
113
+ }
114
+ }
115
+ }
@@ -0,0 +1,193 @@
1
+ import { addClass, elt, rmClass } from "../util/dom.js"
2
+ import { on } from "../util/event.js"
3
+ import { scrollGap, paddingVert } from "../measurement/position_measurement.js"
4
+ import { ie, ie_version, mac, mac_geMountainLion } from "../util/browser.js"
5
+ import { updateHeightsInViewport } from "./update_lines.js"
6
+ import { Delayed } from "../util/misc.js"
7
+
8
+ import { setScrollLeft, updateScrollTop } from "./scrolling.js"
9
+
10
+ // SCROLLBARS
11
+
12
+ // Prepare DOM reads needed to update the scrollbars. Done in one
13
+ // shot to minimize update/measure roundtrips.
14
+ export function measureForScrollbars(cm) {
15
+ let d = cm.display, gutterW = d.gutters.offsetWidth
16
+ let docH = Math.round(cm.doc.height + paddingVert(cm.display))
17
+ return {
18
+ clientHeight: d.scroller.clientHeight,
19
+ viewHeight: d.wrapper.clientHeight,
20
+ scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,
21
+ viewWidth: d.wrapper.clientWidth,
22
+ barLeft: cm.options.fixedGutter ? gutterW : 0,
23
+ docHeight: docH,
24
+ scrollHeight: docH + scrollGap(cm) + d.barHeight,
25
+ nativeBarWidth: d.nativeBarWidth,
26
+ gutterWidth: gutterW
27
+ }
28
+ }
29
+
30
+ class NativeScrollbars {
31
+ constructor(place, scroll, cm) {
32
+ this.cm = cm
33
+ let vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar")
34
+ let horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar")
35
+ vert.tabIndex = horiz.tabIndex = -1
36
+ place(vert); place(horiz)
37
+
38
+ on(vert, "scroll", () => {
39
+ if (vert.clientHeight) scroll(vert.scrollTop, "vertical")
40
+ })
41
+ on(horiz, "scroll", () => {
42
+ if (horiz.clientWidth) scroll(horiz.scrollLeft, "horizontal")
43
+ })
44
+
45
+ this.checkedZeroWidth = false
46
+ // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).
47
+ if (ie && ie_version < 8) this.horiz.style.minHeight = this.vert.style.minWidth = "18px"
48
+ }
49
+
50
+ update(measure) {
51
+ let needsH = measure.scrollWidth > measure.clientWidth + 1
52
+ let needsV = measure.scrollHeight > measure.clientHeight + 1
53
+ let sWidth = measure.nativeBarWidth
54
+
55
+ if (needsV) {
56
+ this.vert.style.display = "block"
57
+ this.vert.style.bottom = needsH ? sWidth + "px" : "0"
58
+ let totalHeight = measure.viewHeight - (needsH ? sWidth : 0)
59
+ // A bug in IE8 can cause this value to be negative, so guard it.
60
+ this.vert.firstChild.style.height =
61
+ Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"
62
+ } else {
63
+ this.vert.style.display = ""
64
+ this.vert.firstChild.style.height = "0"
65
+ }
66
+
67
+ if (needsH) {
68
+ this.horiz.style.display = "block"
69
+ this.horiz.style.right = needsV ? sWidth + "px" : "0"
70
+ this.horiz.style.left = measure.barLeft + "px"
71
+ let totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0)
72
+ this.horiz.firstChild.style.width =
73
+ Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px"
74
+ } else {
75
+ this.horiz.style.display = ""
76
+ this.horiz.firstChild.style.width = "0"
77
+ }
78
+
79
+ if (!this.checkedZeroWidth && measure.clientHeight > 0) {
80
+ if (sWidth == 0) this.zeroWidthHack()
81
+ this.checkedZeroWidth = true
82
+ }
83
+
84
+ return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}
85
+ }
86
+
87
+ setScrollLeft(pos) {
88
+ if (this.horiz.scrollLeft != pos) this.horiz.scrollLeft = pos
89
+ if (this.disableHoriz) this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz")
90
+ }
91
+
92
+ setScrollTop(pos) {
93
+ if (this.vert.scrollTop != pos) this.vert.scrollTop = pos
94
+ if (this.disableVert) this.enableZeroWidthBar(this.vert, this.disableVert, "vert")
95
+ }
96
+
97
+ zeroWidthHack() {
98
+ let w = mac && !mac_geMountainLion ? "12px" : "18px"
99
+ this.horiz.style.height = this.vert.style.width = w
100
+ this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none"
101
+ this.disableHoriz = new Delayed
102
+ this.disableVert = new Delayed
103
+ }
104
+
105
+ enableZeroWidthBar(bar, delay, type) {
106
+ bar.style.pointerEvents = "auto"
107
+ function maybeDisable() {
108
+ // To find out whether the scrollbar is still visible, we
109
+ // check whether the element under the pixel in the bottom
110
+ // right corner of the scrollbar box is the scrollbar box
111
+ // itself (when the bar is still visible) or its filler child
112
+ // (when the bar is hidden). If it is still visible, we keep
113
+ // it enabled, if it's hidden, we disable pointer events.
114
+ let box = bar.getBoundingClientRect()
115
+ let elt = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)
116
+ : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1)
117
+ if (elt != bar) bar.style.pointerEvents = "none"
118
+ else delay.set(1000, maybeDisable)
119
+ }
120
+ delay.set(1000, maybeDisable)
121
+ }
122
+
123
+ clear() {
124
+ let parent = this.horiz.parentNode
125
+ parent.removeChild(this.horiz)
126
+ parent.removeChild(this.vert)
127
+ }
128
+ }
129
+
130
+ class NullScrollbars {
131
+ update() { return {bottom: 0, right: 0} }
132
+ setScrollLeft() {}
133
+ setScrollTop() {}
134
+ clear() {}
135
+ }
136
+
137
+ export function updateScrollbars(cm, measure) {
138
+ if (!measure) measure = measureForScrollbars(cm)
139
+ let startWidth = cm.display.barWidth, startHeight = cm.display.barHeight
140
+ updateScrollbarsInner(cm, measure)
141
+ for (let i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {
142
+ if (startWidth != cm.display.barWidth && cm.options.lineWrapping)
143
+ updateHeightsInViewport(cm)
144
+ updateScrollbarsInner(cm, measureForScrollbars(cm))
145
+ startWidth = cm.display.barWidth; startHeight = cm.display.barHeight
146
+ }
147
+ }
148
+
149
+ // Re-synchronize the fake scrollbars with the actual size of the
150
+ // content.
151
+ function updateScrollbarsInner(cm, measure) {
152
+ let d = cm.display
153
+ let sizes = d.scrollbars.update(measure)
154
+
155
+ d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"
156
+ d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"
157
+ d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent"
158
+
159
+ if (sizes.right && sizes.bottom) {
160
+ d.scrollbarFiller.style.display = "block"
161
+ d.scrollbarFiller.style.height = sizes.bottom + "px"
162
+ d.scrollbarFiller.style.width = sizes.right + "px"
163
+ } else d.scrollbarFiller.style.display = ""
164
+ if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {
165
+ d.gutterFiller.style.display = "block"
166
+ d.gutterFiller.style.height = sizes.bottom + "px"
167
+ d.gutterFiller.style.width = measure.gutterWidth + "px"
168
+ } else d.gutterFiller.style.display = ""
169
+ }
170
+
171
+ export let scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}
172
+
173
+ export function initScrollbars(cm) {
174
+ if (cm.display.scrollbars) {
175
+ cm.display.scrollbars.clear()
176
+ if (cm.display.scrollbars.addClass)
177
+ rmClass(cm.display.wrapper, cm.display.scrollbars.addClass)
178
+ }
179
+
180
+ cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](node => {
181
+ cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller)
182
+ // Prevent clicks in the scrollbars from killing focus
183
+ on(node, "mousedown", () => {
184
+ if (cm.state.focused) setTimeout(() => cm.display.input.focus(), 0)
185
+ })
186
+ node.setAttribute("cm-not-content", "true")
187
+ }, (pos, axis) => {
188
+ if (axis == "horizontal") setScrollLeft(cm, pos)
189
+ else updateScrollTop(cm, pos)
190
+ }, cm)
191
+ if (cm.display.scrollbars.addClass)
192
+ addClass(cm.display.wrapper, cm.display.scrollbars.addClass)
193
+ }
@@ -0,0 +1,184 @@
1
+ import { Pos } from "../line/pos.js"
2
+ import { cursorCoords, displayHeight, displayWidth, estimateCoords, paddingTop, paddingVert, scrollGap, textHeight } from "../measurement/position_measurement.js"
3
+ import { gecko, phantom } from "../util/browser.js"
4
+ import { elt } from "../util/dom.js"
5
+ import { signalDOMEvent } from "../util/event.js"
6
+
7
+ import { startWorker } from "./highlight_worker.js"
8
+ import { alignHorizontally } from "./line_numbers.js"
9
+ import { updateDisplaySimple } from "./update_display.js"
10
+
11
+ // SCROLLING THINGS INTO VIEW
12
+
13
+ // If an editor sits on the top or bottom of the window, partially
14
+ // scrolled out of view, this ensures that the cursor is visible.
15
+ export function maybeScrollWindow(cm, rect) {
16
+ if (signalDOMEvent(cm, "scrollCursorIntoView")) return
17
+
18
+ let display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null
19
+ if (rect.top + box.top < 0) doScroll = true
20
+ else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false
21
+ if (doScroll != null && !phantom) {
22
+ let scrollNode = elt("div", "\u200b", null, `position: absolute;
23
+ top: ${rect.top - display.viewOffset - paddingTop(cm.display)}px;
24
+ height: ${rect.bottom - rect.top + scrollGap(cm) + display.barHeight}px;
25
+ left: ${rect.left}px; width: ${Math.max(2, rect.right - rect.left)}px;`)
26
+ cm.display.lineSpace.appendChild(scrollNode)
27
+ scrollNode.scrollIntoView(doScroll)
28
+ cm.display.lineSpace.removeChild(scrollNode)
29
+ }
30
+ }
31
+
32
+ // Scroll a given position into view (immediately), verifying that
33
+ // it actually became visible (as line heights are accurately
34
+ // measured, the position of something may 'drift' during drawing).
35
+ export function scrollPosIntoView(cm, pos, end, margin) {
36
+ if (margin == null) margin = 0
37
+ let rect
38
+ if (!cm.options.lineWrapping && pos == end) {
39
+ // Set pos and end to the cursor positions around the character pos sticks to
40
+ // If pos.sticky == "before", that is around pos.ch - 1, otherwise around pos.ch
41
+ // If pos == Pos(_, 0, "before"), pos and end are unchanged
42
+ pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos
43
+ end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos
44
+ }
45
+ for (let limit = 0; limit < 5; limit++) {
46
+ let changed = false
47
+ let coords = cursorCoords(cm, pos)
48
+ let endCoords = !end || end == pos ? coords : cursorCoords(cm, end)
49
+ rect = {left: Math.min(coords.left, endCoords.left),
50
+ top: Math.min(coords.top, endCoords.top) - margin,
51
+ right: Math.max(coords.left, endCoords.left),
52
+ bottom: Math.max(coords.bottom, endCoords.bottom) + margin}
53
+ let scrollPos = calculateScrollPos(cm, rect)
54
+ let startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft
55
+ if (scrollPos.scrollTop != null) {
56
+ updateScrollTop(cm, scrollPos.scrollTop)
57
+ if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true
58
+ }
59
+ if (scrollPos.scrollLeft != null) {
60
+ setScrollLeft(cm, scrollPos.scrollLeft)
61
+ if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true
62
+ }
63
+ if (!changed) break
64
+ }
65
+ return rect
66
+ }
67
+
68
+ // Scroll a given set of coordinates into view (immediately).
69
+ export function scrollIntoView(cm, rect) {
70
+ let scrollPos = calculateScrollPos(cm, rect)
71
+ if (scrollPos.scrollTop != null) updateScrollTop(cm, scrollPos.scrollTop)
72
+ if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft)
73
+ }
74
+
75
+ // Calculate a new scroll position needed to scroll the given
76
+ // rectangle into view. Returns an object with scrollTop and
77
+ // scrollLeft properties. When these are undefined, the
78
+ // vertical/horizontal position does not need to be adjusted.
79
+ function calculateScrollPos(cm, rect) {
80
+ let display = cm.display, snapMargin = textHeight(cm.display)
81
+ if (rect.top < 0) rect.top = 0
82
+ let screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop
83
+ let screen = displayHeight(cm), result = {}
84
+ if (rect.bottom - rect.top > screen) rect.bottom = rect.top + screen
85
+ let docBottom = cm.doc.height + paddingVert(display)
86
+ let atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin
87
+ if (rect.top < screentop) {
88
+ result.scrollTop = atTop ? 0 : rect.top
89
+ } else if (rect.bottom > screentop + screen) {
90
+ let newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen)
91
+ if (newTop != screentop) result.scrollTop = newTop
92
+ }
93
+
94
+ let screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft
95
+ let screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0)
96
+ let tooWide = rect.right - rect.left > screenw
97
+ if (tooWide) rect.right = rect.left + screenw
98
+ if (rect.left < 10)
99
+ result.scrollLeft = 0
100
+ else if (rect.left < screenleft)
101
+ result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10))
102
+ else if (rect.right > screenw + screenleft - 3)
103
+ result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw
104
+ return result
105
+ }
106
+
107
+ // Store a relative adjustment to the scroll position in the current
108
+ // operation (to be applied when the operation finishes).
109
+ export function addToScrollTop(cm, top) {
110
+ if (top == null) return
111
+ resolveScrollToPos(cm)
112
+ cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top
113
+ }
114
+
115
+ // Make sure that at the end of the operation the current cursor is
116
+ // shown.
117
+ export function ensureCursorVisible(cm) {
118
+ resolveScrollToPos(cm)
119
+ let cur = cm.getCursor()
120
+ cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin}
121
+ }
122
+
123
+ export function scrollToCoords(cm, x, y) {
124
+ if (x != null || y != null) resolveScrollToPos(cm)
125
+ if (x != null) cm.curOp.scrollLeft = x
126
+ if (y != null) cm.curOp.scrollTop = y
127
+ }
128
+
129
+ export function scrollToRange(cm, range) {
130
+ resolveScrollToPos(cm)
131
+ cm.curOp.scrollToPos = range
132
+ }
133
+
134
+ // When an operation has its scrollToPos property set, and another
135
+ // scroll action is applied before the end of the operation, this
136
+ // 'simulates' scrolling that position into view in a cheap way, so
137
+ // that the effect of intermediate scroll commands is not ignored.
138
+ function resolveScrollToPos(cm) {
139
+ let range = cm.curOp.scrollToPos
140
+ if (range) {
141
+ cm.curOp.scrollToPos = null
142
+ let from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to)
143
+ scrollToCoordsRange(cm, from, to, range.margin)
144
+ }
145
+ }
146
+
147
+ export function scrollToCoordsRange(cm, from, to, margin) {
148
+ let sPos = calculateScrollPos(cm, {
149
+ left: Math.min(from.left, to.left),
150
+ top: Math.min(from.top, to.top) - margin,
151
+ right: Math.max(from.right, to.right),
152
+ bottom: Math.max(from.bottom, to.bottom) + margin
153
+ })
154
+ scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop)
155
+ }
156
+
157
+ // Sync the scrollable area and scrollbars, ensure the viewport
158
+ // covers the visible area.
159
+ export function updateScrollTop(cm, val) {
160
+ if (Math.abs(cm.doc.scrollTop - val) < 2) return
161
+ if (!gecko) updateDisplaySimple(cm, {top: val})
162
+ setScrollTop(cm, val, true)
163
+ if (gecko) updateDisplaySimple(cm)
164
+ startWorker(cm, 100)
165
+ }
166
+
167
+ export function setScrollTop(cm, val, forceScroll) {
168
+ val = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val)
169
+ if (cm.display.scroller.scrollTop == val && !forceScroll) return
170
+ cm.doc.scrollTop = val
171
+ cm.display.scrollbars.setScrollTop(val)
172
+ if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val
173
+ }
174
+
175
+ // Sync scroller and scrollbar, ensure the gutter elements are
176
+ // aligned.
177
+ export function setScrollLeft(cm, val, isScroller, forceScroll) {
178
+ val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth)
179
+ if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) return
180
+ cm.doc.scrollLeft = val
181
+ alignHorizontally(cm)
182
+ if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val
183
+ cm.display.scrollbars.setScrollLeft(val)
184
+ }