administrate-field-simple_mde_markdown 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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,158 @@
1
+ import { Pos } from "../line/pos.js"
2
+ import { visualLine } from "../line/spans.js"
3
+ import { getLine } from "../line/utils_line.js"
4
+ import { charCoords, cursorCoords, displayWidth, paddingH, wrappedLineExtentChar } from "../measurement/position_measurement.js"
5
+ import { getOrder, iterateBidiSections } from "../util/bidi.js"
6
+ import { elt } from "../util/dom.js"
7
+
8
+ export function updateSelection(cm) {
9
+ cm.display.input.showSelection(cm.display.input.prepareSelection())
10
+ }
11
+
12
+ export function prepareSelection(cm, primary = true) {
13
+ let doc = cm.doc, result = {}
14
+ let curFragment = result.cursors = document.createDocumentFragment()
15
+ let selFragment = result.selection = document.createDocumentFragment()
16
+
17
+ for (let i = 0; i < doc.sel.ranges.length; i++) {
18
+ if (!primary && i == doc.sel.primIndex) continue
19
+ let range = doc.sel.ranges[i]
20
+ if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) continue
21
+ let collapsed = range.empty()
22
+ if (collapsed || cm.options.showCursorWhenSelecting)
23
+ drawSelectionCursor(cm, range.head, curFragment)
24
+ if (!collapsed)
25
+ drawSelectionRange(cm, range, selFragment)
26
+ }
27
+ return result
28
+ }
29
+
30
+ // Draws a cursor for the given range
31
+ export function drawSelectionCursor(cm, head, output) {
32
+ let pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine)
33
+
34
+ let cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor"))
35
+ cursor.style.left = pos.left + "px"
36
+ cursor.style.top = pos.top + "px"
37
+ cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"
38
+
39
+ if (pos.other) {
40
+ // Secondary cursor, shown when on a 'jump' in bi-directional text
41
+ let otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor"))
42
+ otherCursor.style.display = ""
43
+ otherCursor.style.left = pos.other.left + "px"
44
+ otherCursor.style.top = pos.other.top + "px"
45
+ otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"
46
+ }
47
+ }
48
+
49
+ function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }
50
+
51
+ // Draws the given range as a highlighted selection
52
+ function drawSelectionRange(cm, range, output) {
53
+ let display = cm.display, doc = cm.doc
54
+ let fragment = document.createDocumentFragment()
55
+ let padding = paddingH(cm.display), leftSide = padding.left
56
+ let rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right
57
+ let docLTR = doc.direction == "ltr"
58
+
59
+ function add(left, top, width, bottom) {
60
+ if (top < 0) top = 0
61
+ top = Math.round(top)
62
+ bottom = Math.round(bottom)
63
+ fragment.appendChild(elt("div", null, "CodeMirror-selected", `position: absolute; left: ${left}px;
64
+ top: ${top}px; width: ${width == null ? rightSide - left : width}px;
65
+ height: ${bottom - top}px`))
66
+ }
67
+
68
+ function drawForLine(line, fromArg, toArg) {
69
+ let lineObj = getLine(doc, line)
70
+ let lineLen = lineObj.text.length
71
+ let start, end
72
+ function coords(ch, bias) {
73
+ return charCoords(cm, Pos(line, ch), "div", lineObj, bias)
74
+ }
75
+
76
+ function wrapX(pos, dir, side) {
77
+ let extent = wrappedLineExtentChar(cm, lineObj, null, pos)
78
+ let prop = (dir == "ltr") == (side == "after") ? "left" : "right"
79
+ let ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1)
80
+ return coords(ch, prop)[prop]
81
+ }
82
+
83
+ let order = getOrder(lineObj, doc.direction)
84
+ iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, (from, to, dir, i) => {
85
+ let ltr = dir == "ltr"
86
+ let fromPos = coords(from, ltr ? "left" : "right")
87
+ let toPos = coords(to - 1, ltr ? "right" : "left")
88
+
89
+ let openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen
90
+ let first = i == 0, last = !order || i == order.length - 1
91
+ if (toPos.top - fromPos.top <= 3) { // Single line
92
+ let openLeft = (docLTR ? openStart : openEnd) && first
93
+ let openRight = (docLTR ? openEnd : openStart) && last
94
+ let left = openLeft ? leftSide : (ltr ? fromPos : toPos).left
95
+ let right = openRight ? rightSide : (ltr ? toPos : fromPos).right
96
+ add(left, fromPos.top, right - left, fromPos.bottom)
97
+ } else { // Multiple lines
98
+ let topLeft, topRight, botLeft, botRight
99
+ if (ltr) {
100
+ topLeft = docLTR && openStart && first ? leftSide : fromPos.left
101
+ topRight = docLTR ? rightSide : wrapX(from, dir, "before")
102
+ botLeft = docLTR ? leftSide : wrapX(to, dir, "after")
103
+ botRight = docLTR && openEnd && last ? rightSide : toPos.right
104
+ } else {
105
+ topLeft = !docLTR ? leftSide : wrapX(from, dir, "before")
106
+ topRight = !docLTR && openStart && first ? rightSide : fromPos.right
107
+ botLeft = !docLTR && openEnd && last ? leftSide : toPos.left
108
+ botRight = !docLTR ? rightSide : wrapX(to, dir, "after")
109
+ }
110
+ add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom)
111
+ if (fromPos.bottom < toPos.top) add(leftSide, fromPos.bottom, null, toPos.top)
112
+ add(botLeft, toPos.top, botRight - botLeft, toPos.bottom)
113
+ }
114
+
115
+ if (!start || cmpCoords(fromPos, start) < 0) start = fromPos
116
+ if (cmpCoords(toPos, start) < 0) start = toPos
117
+ if (!end || cmpCoords(fromPos, end) < 0) end = fromPos
118
+ if (cmpCoords(toPos, end) < 0) end = toPos
119
+ })
120
+ return {start: start, end: end}
121
+ }
122
+
123
+ let sFrom = range.from(), sTo = range.to()
124
+ if (sFrom.line == sTo.line) {
125
+ drawForLine(sFrom.line, sFrom.ch, sTo.ch)
126
+ } else {
127
+ let fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line)
128
+ let singleVLine = visualLine(fromLine) == visualLine(toLine)
129
+ let leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end
130
+ let rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start
131
+ if (singleVLine) {
132
+ if (leftEnd.top < rightStart.top - 2) {
133
+ add(leftEnd.right, leftEnd.top, null, leftEnd.bottom)
134
+ add(leftSide, rightStart.top, rightStart.left, rightStart.bottom)
135
+ } else {
136
+ add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom)
137
+ }
138
+ }
139
+ if (leftEnd.bottom < rightStart.top)
140
+ add(leftSide, leftEnd.bottom, null, rightStart.top)
141
+ }
142
+
143
+ output.appendChild(fragment)
144
+ }
145
+
146
+ // Cursor-blinking
147
+ export function restartBlink(cm) {
148
+ if (!cm.state.focused) return
149
+ let display = cm.display
150
+ clearInterval(display.blinker)
151
+ let on = true
152
+ display.cursorDiv.style.visibility = ""
153
+ if (cm.options.cursorBlinkRate > 0)
154
+ display.blinker = setInterval(() => display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden",
155
+ cm.options.cursorBlinkRate)
156
+ else if (cm.options.cursorBlinkRate < 0)
157
+ display.cursorDiv.style.visibility = "hidden"
158
+ }
@@ -0,0 +1,260 @@
1
+ import { sawCollapsedSpans } from "../line/saw_special_spans.js"
2
+ import { heightAtLine, visualLineEndNo, visualLineNo } from "../line/spans.js"
3
+ import { getLine, lineNumberFor } from "../line/utils_line.js"
4
+ import { displayHeight, displayWidth, getDimensions, paddingVert, scrollGap } from "../measurement/position_measurement.js"
5
+ import { mac, webkit } from "../util/browser.js"
6
+ import { activeElt, removeChildren, contains } from "../util/dom.js"
7
+ import { hasHandler, signal } from "../util/event.js"
8
+ import { indexOf } from "../util/misc.js"
9
+
10
+ import { buildLineElement, updateLineForChanges } from "./update_line.js"
11
+ import { startWorker } from "./highlight_worker.js"
12
+ import { maybeUpdateLineNumberWidth } from "./line_numbers.js"
13
+ import { measureForScrollbars, updateScrollbars } from "./scrollbars.js"
14
+ import { updateSelection } from "./selection.js"
15
+ import { updateHeightsInViewport, visibleLines } from "./update_lines.js"
16
+ import { adjustView, countDirtyView, resetView } from "./view_tracking.js"
17
+
18
+ // DISPLAY DRAWING
19
+
20
+ export class DisplayUpdate {
21
+ constructor(cm, viewport, force) {
22
+ let display = cm.display
23
+
24
+ this.viewport = viewport
25
+ // Store some values that we'll need later (but don't want to force a relayout for)
26
+ this.visible = visibleLines(display, cm.doc, viewport)
27
+ this.editorIsHidden = !display.wrapper.offsetWidth
28
+ this.wrapperHeight = display.wrapper.clientHeight
29
+ this.wrapperWidth = display.wrapper.clientWidth
30
+ this.oldDisplayWidth = displayWidth(cm)
31
+ this.force = force
32
+ this.dims = getDimensions(cm)
33
+ this.events = []
34
+ }
35
+
36
+ signal(emitter, type) {
37
+ if (hasHandler(emitter, type))
38
+ this.events.push(arguments)
39
+ }
40
+ finish() {
41
+ for (let i = 0; i < this.events.length; i++)
42
+ signal.apply(null, this.events[i])
43
+ }
44
+ }
45
+
46
+ export function maybeClipScrollbars(cm) {
47
+ let display = cm.display
48
+ if (!display.scrollbarsClipped && display.scroller.offsetWidth) {
49
+ display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth
50
+ display.heightForcer.style.height = scrollGap(cm) + "px"
51
+ display.sizer.style.marginBottom = -display.nativeBarWidth + "px"
52
+ display.sizer.style.borderRightWidth = scrollGap(cm) + "px"
53
+ display.scrollbarsClipped = true
54
+ }
55
+ }
56
+
57
+ function selectionSnapshot(cm) {
58
+ if (cm.hasFocus()) return null
59
+ let active = activeElt()
60
+ if (!active || !contains(cm.display.lineDiv, active)) return null
61
+ let result = {activeElt: active}
62
+ if (window.getSelection) {
63
+ let sel = window.getSelection()
64
+ if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {
65
+ result.anchorNode = sel.anchorNode
66
+ result.anchorOffset = sel.anchorOffset
67
+ result.focusNode = sel.focusNode
68
+ result.focusOffset = sel.focusOffset
69
+ }
70
+ }
71
+ return result
72
+ }
73
+
74
+ function restoreSelection(snapshot) {
75
+ if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) return
76
+ snapshot.activeElt.focus()
77
+ if (snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {
78
+ let sel = window.getSelection(), range = document.createRange()
79
+ range.setEnd(snapshot.anchorNode, snapshot.anchorOffset)
80
+ range.collapse(false)
81
+ sel.removeAllRanges()
82
+ sel.addRange(range)
83
+ sel.extend(snapshot.focusNode, snapshot.focusOffset)
84
+ }
85
+ }
86
+
87
+ // Does the actual updating of the line display. Bails out
88
+ // (returning false) when there is nothing to be done and forced is
89
+ // false.
90
+ export function updateDisplayIfNeeded(cm, update) {
91
+ let display = cm.display, doc = cm.doc
92
+
93
+ if (update.editorIsHidden) {
94
+ resetView(cm)
95
+ return false
96
+ }
97
+
98
+ // Bail out if the visible area is already rendered and nothing changed.
99
+ if (!update.force &&
100
+ update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&
101
+ (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&
102
+ display.renderedView == display.view && countDirtyView(cm) == 0)
103
+ return false
104
+
105
+ if (maybeUpdateLineNumberWidth(cm)) {
106
+ resetView(cm)
107
+ update.dims = getDimensions(cm)
108
+ }
109
+
110
+ // Compute a suitable new viewport (from & to)
111
+ let end = doc.first + doc.size
112
+ let from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first)
113
+ let to = Math.min(end, update.visible.to + cm.options.viewportMargin)
114
+ if (display.viewFrom < from && from - display.viewFrom < 20) from = Math.max(doc.first, display.viewFrom)
115
+ if (display.viewTo > to && display.viewTo - to < 20) to = Math.min(end, display.viewTo)
116
+ if (sawCollapsedSpans) {
117
+ from = visualLineNo(cm.doc, from)
118
+ to = visualLineEndNo(cm.doc, to)
119
+ }
120
+
121
+ let different = from != display.viewFrom || to != display.viewTo ||
122
+ display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth
123
+ adjustView(cm, from, to)
124
+
125
+ display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom))
126
+ // Position the mover div to align with the current scroll position
127
+ cm.display.mover.style.top = display.viewOffset + "px"
128
+
129
+ let toUpdate = countDirtyView(cm)
130
+ if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&
131
+ (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))
132
+ return false
133
+
134
+ // For big changes, we hide the enclosing element during the
135
+ // update, since that speeds up the operations on most browsers.
136
+ let selSnapshot = selectionSnapshot(cm)
137
+ if (toUpdate > 4) display.lineDiv.style.display = "none"
138
+ patchDisplay(cm, display.updateLineNumbers, update.dims)
139
+ if (toUpdate > 4) display.lineDiv.style.display = ""
140
+ display.renderedView = display.view
141
+ // There might have been a widget with a focused element that got
142
+ // hidden or updated, if so re-focus it.
143
+ restoreSelection(selSnapshot)
144
+
145
+ // Prevent selection and cursors from interfering with the scroll
146
+ // width and height.
147
+ removeChildren(display.cursorDiv)
148
+ removeChildren(display.selectionDiv)
149
+ display.gutters.style.height = display.sizer.style.minHeight = 0
150
+
151
+ if (different) {
152
+ display.lastWrapHeight = update.wrapperHeight
153
+ display.lastWrapWidth = update.wrapperWidth
154
+ startWorker(cm, 400)
155
+ }
156
+
157
+ display.updateLineNumbers = null
158
+
159
+ return true
160
+ }
161
+
162
+ export function postUpdateDisplay(cm, update) {
163
+ let viewport = update.viewport
164
+
165
+ for (let first = true;; first = false) {
166
+ if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {
167
+ // Clip forced viewport to actual scrollable area.
168
+ if (viewport && viewport.top != null)
169
+ viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}
170
+ // Updated line heights might result in the drawn area not
171
+ // actually covering the viewport. Keep looping until it does.
172
+ update.visible = visibleLines(cm.display, cm.doc, viewport)
173
+ if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)
174
+ break
175
+ }
176
+ if (!updateDisplayIfNeeded(cm, update)) break
177
+ updateHeightsInViewport(cm)
178
+ let barMeasure = measureForScrollbars(cm)
179
+ updateSelection(cm)
180
+ updateScrollbars(cm, barMeasure)
181
+ setDocumentHeight(cm, barMeasure)
182
+ update.force = false
183
+ }
184
+
185
+ update.signal(cm, "update", cm)
186
+ if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {
187
+ update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo)
188
+ cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo
189
+ }
190
+ }
191
+
192
+ export function updateDisplaySimple(cm, viewport) {
193
+ let update = new DisplayUpdate(cm, viewport)
194
+ if (updateDisplayIfNeeded(cm, update)) {
195
+ updateHeightsInViewport(cm)
196
+ postUpdateDisplay(cm, update)
197
+ let barMeasure = measureForScrollbars(cm)
198
+ updateSelection(cm)
199
+ updateScrollbars(cm, barMeasure)
200
+ setDocumentHeight(cm, barMeasure)
201
+ update.finish()
202
+ }
203
+ }
204
+
205
+ // Sync the actual display DOM structure with display.view, removing
206
+ // nodes for lines that are no longer in view, and creating the ones
207
+ // that are not there yet, and updating the ones that are out of
208
+ // date.
209
+ function patchDisplay(cm, updateNumbersFrom, dims) {
210
+ let display = cm.display, lineNumbers = cm.options.lineNumbers
211
+ let container = display.lineDiv, cur = container.firstChild
212
+
213
+ function rm(node) {
214
+ let next = node.nextSibling
215
+ // Works around a throw-scroll bug in OS X Webkit
216
+ if (webkit && mac && cm.display.currentWheelTarget == node)
217
+ node.style.display = "none"
218
+ else
219
+ node.parentNode.removeChild(node)
220
+ return next
221
+ }
222
+
223
+ let view = display.view, lineN = display.viewFrom
224
+ // Loop over the elements in the view, syncing cur (the DOM nodes
225
+ // in display.lineDiv) with the view as we go.
226
+ for (let i = 0; i < view.length; i++) {
227
+ let lineView = view[i]
228
+ if (lineView.hidden) {
229
+ } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet
230
+ let node = buildLineElement(cm, lineView, lineN, dims)
231
+ container.insertBefore(node, cur)
232
+ } else { // Already drawn
233
+ while (cur != lineView.node) cur = rm(cur)
234
+ let updateNumber = lineNumbers && updateNumbersFrom != null &&
235
+ updateNumbersFrom <= lineN && lineView.lineNumber
236
+ if (lineView.changes) {
237
+ if (indexOf(lineView.changes, "gutter") > -1) updateNumber = false
238
+ updateLineForChanges(cm, lineView, lineN, dims)
239
+ }
240
+ if (updateNumber) {
241
+ removeChildren(lineView.lineNumber)
242
+ lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)))
243
+ }
244
+ cur = lineView.node.nextSibling
245
+ }
246
+ lineN += lineView.size
247
+ }
248
+ while (cur) cur = rm(cur)
249
+ }
250
+
251
+ export function updateGutterSpace(cm) {
252
+ let width = cm.display.gutters.offsetWidth
253
+ cm.display.sizer.style.marginLeft = width + "px"
254
+ }
255
+
256
+ export function setDocumentHeight(cm, measure) {
257
+ cm.display.sizer.style.minHeight = measure.docHeight + "px"
258
+ cm.display.heightForcer.style.top = measure.docHeight + "px"
259
+ cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px"
260
+ }
@@ -0,0 +1,188 @@
1
+ import { buildLineContent } from "../line/line_data.js"
2
+ import { lineNumberFor } from "../line/utils_line.js"
3
+ import { ie, ie_version } from "../util/browser.js"
4
+ import { elt } from "../util/dom.js"
5
+ import { signalLater } from "../util/operation_group.js"
6
+
7
+ // When an aspect of a line changes, a string is added to
8
+ // lineView.changes. This updates the relevant part of the line's
9
+ // DOM structure.
10
+ export function updateLineForChanges(cm, lineView, lineN, dims) {
11
+ for (let j = 0; j < lineView.changes.length; j++) {
12
+ let type = lineView.changes[j]
13
+ if (type == "text") updateLineText(cm, lineView)
14
+ else if (type == "gutter") updateLineGutter(cm, lineView, lineN, dims)
15
+ else if (type == "class") updateLineClasses(cm, lineView)
16
+ else if (type == "widget") updateLineWidgets(cm, lineView, dims)
17
+ }
18
+ lineView.changes = null
19
+ }
20
+
21
+ // Lines with gutter elements, widgets or a background class need to
22
+ // be wrapped, and have the extra elements added to the wrapper div
23
+ function ensureLineWrapped(lineView) {
24
+ if (lineView.node == lineView.text) {
25
+ lineView.node = elt("div", null, null, "position: relative")
26
+ if (lineView.text.parentNode)
27
+ lineView.text.parentNode.replaceChild(lineView.node, lineView.text)
28
+ lineView.node.appendChild(lineView.text)
29
+ if (ie && ie_version < 8) lineView.node.style.zIndex = 2
30
+ }
31
+ return lineView.node
32
+ }
33
+
34
+ function updateLineBackground(cm, lineView) {
35
+ let cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass
36
+ if (cls) cls += " CodeMirror-linebackground"
37
+ if (lineView.background) {
38
+ if (cls) lineView.background.className = cls
39
+ else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null }
40
+ } else if (cls) {
41
+ let wrap = ensureLineWrapped(lineView)
42
+ lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild)
43
+ cm.display.input.setUneditable(lineView.background)
44
+ }
45
+ }
46
+
47
+ // Wrapper around buildLineContent which will reuse the structure
48
+ // in display.externalMeasured when possible.
49
+ function getLineContent(cm, lineView) {
50
+ let ext = cm.display.externalMeasured
51
+ if (ext && ext.line == lineView.line) {
52
+ cm.display.externalMeasured = null
53
+ lineView.measure = ext.measure
54
+ return ext.built
55
+ }
56
+ return buildLineContent(cm, lineView)
57
+ }
58
+
59
+ // Redraw the line's text. Interacts with the background and text
60
+ // classes because the mode may output tokens that influence these
61
+ // classes.
62
+ function updateLineText(cm, lineView) {
63
+ let cls = lineView.text.className
64
+ let built = getLineContent(cm, lineView)
65
+ if (lineView.text == lineView.node) lineView.node = built.pre
66
+ lineView.text.parentNode.replaceChild(built.pre, lineView.text)
67
+ lineView.text = built.pre
68
+ if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {
69
+ lineView.bgClass = built.bgClass
70
+ lineView.textClass = built.textClass
71
+ updateLineClasses(cm, lineView)
72
+ } else if (cls) {
73
+ lineView.text.className = cls
74
+ }
75
+ }
76
+
77
+ function updateLineClasses(cm, lineView) {
78
+ updateLineBackground(cm, lineView)
79
+ if (lineView.line.wrapClass)
80
+ ensureLineWrapped(lineView).className = lineView.line.wrapClass
81
+ else if (lineView.node != lineView.text)
82
+ lineView.node.className = ""
83
+ let textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass
84
+ lineView.text.className = textClass || ""
85
+ }
86
+
87
+ function updateLineGutter(cm, lineView, lineN, dims) {
88
+ if (lineView.gutter) {
89
+ lineView.node.removeChild(lineView.gutter)
90
+ lineView.gutter = null
91
+ }
92
+ if (lineView.gutterBackground) {
93
+ lineView.node.removeChild(lineView.gutterBackground)
94
+ lineView.gutterBackground = null
95
+ }
96
+ if (lineView.line.gutterClass) {
97
+ let wrap = ensureLineWrapped(lineView)
98
+ lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass,
99
+ `left: ${cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth}px; width: ${dims.gutterTotalWidth}px`)
100
+ cm.display.input.setUneditable(lineView.gutterBackground)
101
+ wrap.insertBefore(lineView.gutterBackground, lineView.text)
102
+ }
103
+ let markers = lineView.line.gutterMarkers
104
+ if (cm.options.lineNumbers || markers) {
105
+ let wrap = ensureLineWrapped(lineView)
106
+ let gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", `left: ${cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth}px`)
107
+ cm.display.input.setUneditable(gutterWrap)
108
+ wrap.insertBefore(gutterWrap, lineView.text)
109
+ if (lineView.line.gutterClass)
110
+ gutterWrap.className += " " + lineView.line.gutterClass
111
+ if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"]))
112
+ lineView.lineNumber = gutterWrap.appendChild(
113
+ elt("div", lineNumberFor(cm.options, lineN),
114
+ "CodeMirror-linenumber CodeMirror-gutter-elt",
115
+ `left: ${dims.gutterLeft["CodeMirror-linenumbers"]}px; width: ${cm.display.lineNumInnerWidth}px`))
116
+ if (markers) for (let k = 0; k < cm.options.gutters.length; ++k) {
117
+ let id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]
118
+ if (found)
119
+ gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt",
120
+ `left: ${dims.gutterLeft[id]}px; width: ${dims.gutterWidth[id]}px`))
121
+ }
122
+ }
123
+ }
124
+
125
+ function updateLineWidgets(cm, lineView, dims) {
126
+ if (lineView.alignable) lineView.alignable = null
127
+ for (let node = lineView.node.firstChild, next; node; node = next) {
128
+ next = node.nextSibling
129
+ if (node.className == "CodeMirror-linewidget")
130
+ lineView.node.removeChild(node)
131
+ }
132
+ insertLineWidgets(cm, lineView, dims)
133
+ }
134
+
135
+ // Build a line's DOM representation from scratch
136
+ export function buildLineElement(cm, lineView, lineN, dims) {
137
+ let built = getLineContent(cm, lineView)
138
+ lineView.text = lineView.node = built.pre
139
+ if (built.bgClass) lineView.bgClass = built.bgClass
140
+ if (built.textClass) lineView.textClass = built.textClass
141
+
142
+ updateLineClasses(cm, lineView)
143
+ updateLineGutter(cm, lineView, lineN, dims)
144
+ insertLineWidgets(cm, lineView, dims)
145
+ return lineView.node
146
+ }
147
+
148
+ // A lineView may contain multiple logical lines (when merged by
149
+ // collapsed spans). The widgets for all of them need to be drawn.
150
+ function insertLineWidgets(cm, lineView, dims) {
151
+ insertLineWidgetsFor(cm, lineView.line, lineView, dims, true)
152
+ if (lineView.rest) for (let i = 0; i < lineView.rest.length; i++)
153
+ insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false)
154
+ }
155
+
156
+ function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {
157
+ if (!line.widgets) return
158
+ let wrap = ensureLineWrapped(lineView)
159
+ for (let i = 0, ws = line.widgets; i < ws.length; ++i) {
160
+ let widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget")
161
+ if (!widget.handleMouseEvents) node.setAttribute("cm-ignore-events", "true")
162
+ positionLineWidget(widget, node, lineView, dims)
163
+ cm.display.input.setUneditable(node)
164
+ if (allowAbove && widget.above)
165
+ wrap.insertBefore(node, lineView.gutter || lineView.text)
166
+ else
167
+ wrap.appendChild(node)
168
+ signalLater(widget, "redraw")
169
+ }
170
+ }
171
+
172
+ function positionLineWidget(widget, node, lineView, dims) {
173
+ if (widget.noHScroll) {
174
+ ;(lineView.alignable || (lineView.alignable = [])).push(node)
175
+ let width = dims.wrapperWidth
176
+ node.style.left = dims.fixedPos + "px"
177
+ if (!widget.coverGutter) {
178
+ width -= dims.gutterTotalWidth
179
+ node.style.paddingLeft = dims.gutterTotalWidth + "px"
180
+ }
181
+ node.style.width = width + "px"
182
+ }
183
+ if (widget.coverGutter) {
184
+ node.style.zIndex = 5
185
+ node.style.position = "relative"
186
+ if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + "px"
187
+ }
188
+ }