@muze-nl/simplystore 0.3.5 → 0.4.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 (331) hide show
  1. package/package.json +2 -2
  2. package/package.json~ +33 -0
  3. package/src/commands.mjs +1 -0
  4. package/src/server.mjs +69 -62
  5. package/src/worker-command-init.mjs +2 -1
  6. package/src/worker-command.mjs +3 -3
  7. package/www/codemirror/addon/comment/comment.js +0 -211
  8. package/www/codemirror/addon/comment/continuecomment.js +0 -114
  9. package/www/codemirror/addon/dialog/dialog.css +0 -32
  10. package/www/codemirror/addon/dialog/dialog.js +0 -163
  11. package/www/codemirror/addon/display/autorefresh.js +0 -47
  12. package/www/codemirror/addon/display/fullscreen.css +0 -6
  13. package/www/codemirror/addon/display/fullscreen.js +0 -41
  14. package/www/codemirror/addon/display/panel.js +0 -133
  15. package/www/codemirror/addon/display/placeholder.js +0 -78
  16. package/www/codemirror/addon/display/rulers.js +0 -51
  17. package/www/codemirror/addon/edit/closebrackets.js +0 -201
  18. package/www/codemirror/addon/edit/closetag.js +0 -185
  19. package/www/codemirror/addon/edit/continuelist.js +0 -101
  20. package/www/codemirror/addon/edit/matchbrackets.js +0 -160
  21. package/www/codemirror/addon/edit/matchtags.js +0 -66
  22. package/www/codemirror/addon/edit/trailingspace.js +0 -27
  23. package/www/codemirror/addon/fold/brace-fold.js +0 -119
  24. package/www/codemirror/addon/fold/comment-fold.js +0 -59
  25. package/www/codemirror/addon/fold/foldcode.js +0 -159
  26. package/www/codemirror/addon/fold/foldgutter.css +0 -20
  27. package/www/codemirror/addon/fold/foldgutter.js +0 -169
  28. package/www/codemirror/addon/fold/indent-fold.js +0 -48
  29. package/www/codemirror/addon/fold/markdown-fold.js +0 -49
  30. package/www/codemirror/addon/fold/xml-fold.js +0 -184
  31. package/www/codemirror/addon/hint/anyword-hint.js +0 -41
  32. package/www/codemirror/addon/hint/css-hint.js +0 -66
  33. package/www/codemirror/addon/hint/html-hint.js +0 -351
  34. package/www/codemirror/addon/hint/javascript-hint.js +0 -162
  35. package/www/codemirror/addon/hint/show-hint.css +0 -37
  36. package/www/codemirror/addon/hint/show-hint.js +0 -523
  37. package/www/codemirror/addon/hint/sql-hint.js +0 -304
  38. package/www/codemirror/addon/hint/xml-hint.js +0 -132
  39. package/www/codemirror/addon/lint/coffeescript-lint.js +0 -47
  40. package/www/codemirror/addon/lint/css-lint.js +0 -40
  41. package/www/codemirror/addon/lint/html-lint.js +0 -59
  42. package/www/codemirror/addon/lint/json-lint.js +0 -40
  43. package/www/codemirror/addon/lint/yaml-lint.js +0 -41
  44. package/www/codemirror/addon/merge/merge.css +0 -119
  45. package/www/codemirror/addon/merge/merge.js +0 -1018
  46. package/www/codemirror/addon/mode/loadmode.js +0 -66
  47. package/www/codemirror/addon/mode/multiplex.js +0 -136
  48. package/www/codemirror/addon/mode/multiplex_test.js +0 -49
  49. package/www/codemirror/addon/mode/overlay.js +0 -90
  50. package/www/codemirror/addon/mode/simple.js +0 -216
  51. package/www/codemirror/addon/runmode/colorize.js +0 -40
  52. package/www/codemirror/addon/runmode/runmode-standalone.js +0 -334
  53. package/www/codemirror/addon/runmode/runmode.js +0 -76
  54. package/www/codemirror/addon/runmode/runmode.node.js +0 -329
  55. package/www/codemirror/addon/scroll/annotatescrollbar.js +0 -128
  56. package/www/codemirror/addon/scroll/scrollpastend.js +0 -48
  57. package/www/codemirror/addon/scroll/simplescrollbars.css +0 -66
  58. package/www/codemirror/addon/scroll/simplescrollbars.js +0 -152
  59. package/www/codemirror/addon/search/jump-to-line.js +0 -53
  60. package/www/codemirror/addon/search/match-highlighter.js +0 -167
  61. package/www/codemirror/addon/search/matchesonscrollbar.css +0 -8
  62. package/www/codemirror/addon/search/matchesonscrollbar.js +0 -97
  63. package/www/codemirror/addon/search/search.js +0 -295
  64. package/www/codemirror/addon/search/searchcursor.js +0 -305
  65. package/www/codemirror/addon/selection/active-line.js +0 -72
  66. package/www/codemirror/addon/selection/mark-selection.js +0 -119
  67. package/www/codemirror/addon/selection/selection-pointer.js +0 -98
  68. package/www/codemirror/addon/tern/tern.css +0 -87
  69. package/www/codemirror/addon/tern/tern.js +0 -756
  70. package/www/codemirror/addon/tern/worker.js +0 -44
  71. package/www/codemirror/addon/wrap/hardwrap.js +0 -160
  72. package/www/codemirror/bin/source-highlight +0 -48
  73. package/www/codemirror/keymap/emacs.js +0 -545
  74. package/www/codemirror/keymap/sublime.js +0 -720
  75. package/www/codemirror/keymap/vim.js +0 -5978
  76. package/www/codemirror/mode/apl/apl.js +0 -174
  77. package/www/codemirror/mode/asciiarmor/asciiarmor.js +0 -74
  78. package/www/codemirror/mode/asn.1/asn.1.js +0 -204
  79. package/www/codemirror/mode/asterisk/asterisk.js +0 -220
  80. package/www/codemirror/mode/brainfuck/brainfuck.js +0 -85
  81. package/www/codemirror/mode/clike/clike.js +0 -940
  82. package/www/codemirror/mode/clojure/clojure.js +0 -292
  83. package/www/codemirror/mode/cmake/cmake.js +0 -97
  84. package/www/codemirror/mode/cobol/cobol.js +0 -255
  85. package/www/codemirror/mode/coffeescript/coffeescript.js +0 -359
  86. package/www/codemirror/mode/commonlisp/commonlisp.js +0 -125
  87. package/www/codemirror/mode/crystal/crystal.js +0 -433
  88. package/www/codemirror/mode/css/css.js +0 -862
  89. package/www/codemirror/mode/cypher/cypher.js +0 -152
  90. package/www/codemirror/mode/d/d.js +0 -223
  91. package/www/codemirror/mode/dart/dart.js +0 -166
  92. package/www/codemirror/mode/diff/diff.js +0 -47
  93. package/www/codemirror/mode/django/django.js +0 -356
  94. package/www/codemirror/mode/dockerfile/dockerfile.js +0 -211
  95. package/www/codemirror/mode/dtd/dtd.js +0 -142
  96. package/www/codemirror/mode/dylan/dylan.js +0 -352
  97. package/www/codemirror/mode/ebnf/ebnf.js +0 -195
  98. package/www/codemirror/mode/ecl/ecl.js +0 -206
  99. package/www/codemirror/mode/eiffel/eiffel.js +0 -160
  100. package/www/codemirror/mode/elm/elm.js +0 -245
  101. package/www/codemirror/mode/erlang/erlang.js +0 -619
  102. package/www/codemirror/mode/factor/factor.js +0 -85
  103. package/www/codemirror/mode/fcl/fcl.js +0 -173
  104. package/www/codemirror/mode/forth/forth.js +0 -180
  105. package/www/codemirror/mode/fortran/fortran.js +0 -188
  106. package/www/codemirror/mode/gas/gas.js +0 -353
  107. package/www/codemirror/mode/gfm/gfm.js +0 -129
  108. package/www/codemirror/mode/gherkin/gherkin.js +0 -178
  109. package/www/codemirror/mode/go/go.js +0 -187
  110. package/www/codemirror/mode/groovy/groovy.js +0 -247
  111. package/www/codemirror/mode/haml/haml.js +0 -161
  112. package/www/codemirror/mode/handlebars/handlebars.js +0 -70
  113. package/www/codemirror/mode/haskell/haskell.js +0 -268
  114. package/www/codemirror/mode/haskell-literate/haskell-literate.js +0 -43
  115. package/www/codemirror/mode/haxe/haxe.js +0 -515
  116. package/www/codemirror/mode/htmlembedded/htmlembedded.js +0 -37
  117. package/www/codemirror/mode/htmlmixed/htmlmixed.js +0 -153
  118. package/www/codemirror/mode/http/http.js +0 -113
  119. package/www/codemirror/mode/idl/idl.js +0 -290
  120. package/www/codemirror/mode/jinja2/jinja2.js +0 -193
  121. package/www/codemirror/mode/jsx/jsx.js +0 -148
  122. package/www/codemirror/mode/julia/julia.js +0 -390
  123. package/www/codemirror/mode/livescript/livescript.js +0 -280
  124. package/www/codemirror/mode/lua/lua.js +0 -160
  125. package/www/codemirror/mode/markdown/markdown.js +0 -886
  126. package/www/codemirror/mode/mathematica/mathematica.js +0 -176
  127. package/www/codemirror/mode/mbox/mbox.js +0 -129
  128. package/www/codemirror/mode/meta.js +0 -221
  129. package/www/codemirror/mode/mirc/mirc.js +0 -193
  130. package/www/codemirror/mode/mllike/mllike.js +0 -359
  131. package/www/codemirror/mode/modelica/modelica.js +0 -245
  132. package/www/codemirror/mode/mscgen/mscgen.js +0 -175
  133. package/www/codemirror/mode/mumps/mumps.js +0 -148
  134. package/www/codemirror/mode/nginx/nginx.js +0 -178
  135. package/www/codemirror/mode/nsis/nsis.js +0 -95
  136. package/www/codemirror/mode/ntriples/ntriples.js +0 -195
  137. package/www/codemirror/mode/octave/octave.js +0 -139
  138. package/www/codemirror/mode/oz/oz.js +0 -252
  139. package/www/codemirror/mode/pascal/pascal.js +0 -136
  140. package/www/codemirror/mode/pegjs/pegjs.js +0 -111
  141. package/www/codemirror/mode/perl/perl.js +0 -836
  142. package/www/codemirror/mode/php/php.js +0 -234
  143. package/www/codemirror/mode/pig/pig.js +0 -178
  144. package/www/codemirror/mode/powershell/powershell.js +0 -398
  145. package/www/codemirror/mode/properties/properties.js +0 -78
  146. package/www/codemirror/mode/protobuf/protobuf.js +0 -72
  147. package/www/codemirror/mode/pug/pug.js +0 -591
  148. package/www/codemirror/mode/puppet/puppet.js +0 -220
  149. package/www/codemirror/mode/python/python.js +0 -402
  150. package/www/codemirror/mode/q/q.js +0 -139
  151. package/www/codemirror/mode/r/r.js +0 -190
  152. package/www/codemirror/mode/rpm/changes/index.html +0 -66
  153. package/www/codemirror/mode/rpm/rpm.js +0 -109
  154. package/www/codemirror/mode/rst/rst.js +0 -557
  155. package/www/codemirror/mode/ruby/ruby.js +0 -303
  156. package/www/codemirror/mode/rust/rust.js +0 -72
  157. package/www/codemirror/mode/sas/sas.js +0 -303
  158. package/www/codemirror/mode/sass/sass.js +0 -459
  159. package/www/codemirror/mode/scheme/scheme.js +0 -284
  160. package/www/codemirror/mode/shell/shell.js +0 -168
  161. package/www/codemirror/mode/sieve/sieve.js +0 -193
  162. package/www/codemirror/mode/slim/slim.js +0 -575
  163. package/www/codemirror/mode/smalltalk/smalltalk.js +0 -168
  164. package/www/codemirror/mode/smarty/smarty.js +0 -225
  165. package/www/codemirror/mode/solr/solr.js +0 -104
  166. package/www/codemirror/mode/soy/soy.js +0 -665
  167. package/www/codemirror/mode/sparql/sparql.js +0 -184
  168. package/www/codemirror/mode/spreadsheet/spreadsheet.js +0 -112
  169. package/www/codemirror/mode/sql/sql.js +0 -525
  170. package/www/codemirror/mode/stex/stex.js +0 -264
  171. package/www/codemirror/mode/stylus/stylus.js +0 -775
  172. package/www/codemirror/mode/swift/swift.js +0 -221
  173. package/www/codemirror/mode/tcl/tcl.js +0 -140
  174. package/www/codemirror/mode/textile/textile.js +0 -469
  175. package/www/codemirror/mode/tiddlywiki/tiddlywiki.css +0 -14
  176. package/www/codemirror/mode/tiddlywiki/tiddlywiki.js +0 -308
  177. package/www/codemirror/mode/tiki/tiki.css +0 -26
  178. package/www/codemirror/mode/tiki/tiki.js +0 -312
  179. package/www/codemirror/mode/toml/toml.js +0 -88
  180. package/www/codemirror/mode/tornado/tornado.js +0 -68
  181. package/www/codemirror/mode/troff/troff.js +0 -84
  182. package/www/codemirror/mode/ttcn/ttcn.js +0 -283
  183. package/www/codemirror/mode/ttcn-cfg/ttcn-cfg.js +0 -214
  184. package/www/codemirror/mode/turtle/turtle.js +0 -162
  185. package/www/codemirror/mode/twig/twig.js +0 -141
  186. package/www/codemirror/mode/vb/vb.js +0 -275
  187. package/www/codemirror/mode/vbscript/vbscript.js +0 -350
  188. package/www/codemirror/mode/velocity/velocity.js +0 -202
  189. package/www/codemirror/mode/verilog/verilog.js +0 -781
  190. package/www/codemirror/mode/vhdl/vhdl.js +0 -189
  191. package/www/codemirror/mode/vue/vue.js +0 -77
  192. package/www/codemirror/mode/wast/wast.js +0 -132
  193. package/www/codemirror/mode/webidl/webidl.js +0 -195
  194. package/www/codemirror/mode/xml/xml.js +0 -417
  195. package/www/codemirror/mode/xquery/xquery.js +0 -448
  196. package/www/codemirror/mode/yacas/yacas.js +0 -204
  197. package/www/codemirror/mode/yaml/yaml.js +0 -120
  198. package/www/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js +0 -72
  199. package/www/codemirror/mode/z80/z80.js +0 -116
  200. package/www/codemirror/rollup.config.js +0 -52
  201. package/www/codemirror/src/addon/runmode/codemirror-standalone.js +0 -24
  202. package/www/codemirror/src/addon/runmode/codemirror.node.js +0 -21
  203. package/www/codemirror/src/addon/runmode/runmode-standalone.js +0 -2
  204. package/www/codemirror/src/addon/runmode/runmode.node.js +0 -2
  205. package/www/codemirror/src/codemirror.js +0 -3
  206. package/www/codemirror/src/display/Display.js +0 -116
  207. package/www/codemirror/src/display/focus.js +0 -50
  208. package/www/codemirror/src/display/gutters.js +0 -44
  209. package/www/codemirror/src/display/highlight_worker.js +0 -55
  210. package/www/codemirror/src/display/line_numbers.js +0 -48
  211. package/www/codemirror/src/display/mode_state.js +0 -22
  212. package/www/codemirror/src/display/operations.js +0 -206
  213. package/www/codemirror/src/display/scroll_events.js +0 -132
  214. package/www/codemirror/src/display/scrollbars.js +0 -194
  215. package/www/codemirror/src/display/scrolling.js +0 -186
  216. package/www/codemirror/src/display/selection.js +0 -173
  217. package/www/codemirror/src/display/update_display.js +0 -267
  218. package/www/codemirror/src/display/update_line.js +0 -189
  219. package/www/codemirror/src/display/update_lines.js +0 -82
  220. package/www/codemirror/src/display/view_tracking.js +0 -153
  221. package/www/codemirror/src/edit/CodeMirror.js +0 -217
  222. package/www/codemirror/src/edit/commands.js +0 -178
  223. package/www/codemirror/src/edit/deleteNearSelection.js +0 -30
  224. package/www/codemirror/src/edit/drop_events.js +0 -130
  225. package/www/codemirror/src/edit/fromTextArea.js +0 -61
  226. package/www/codemirror/src/edit/global_events.js +0 -45
  227. package/www/codemirror/src/edit/key_events.js +0 -163
  228. package/www/codemirror/src/edit/legacy.js +0 -62
  229. package/www/codemirror/src/edit/main.js +0 -69
  230. package/www/codemirror/src/edit/methods.js +0 -555
  231. package/www/codemirror/src/edit/mouse_events.js +0 -417
  232. package/www/codemirror/src/edit/options.js +0 -194
  233. package/www/codemirror/src/edit/utils.js +0 -7
  234. package/www/codemirror/src/input/ContentEditableInput.js +0 -546
  235. package/www/codemirror/src/input/TextareaInput.js +0 -380
  236. package/www/codemirror/src/input/indent.js +0 -71
  237. package/www/codemirror/src/input/input.js +0 -134
  238. package/www/codemirror/src/input/keymap.js +0 -147
  239. package/www/codemirror/src/input/keynames.js +0 -17
  240. package/www/codemirror/src/input/movement.js +0 -111
  241. package/www/codemirror/src/line/highlight.js +0 -284
  242. package/www/codemirror/src/line/line_data.js +0 -349
  243. package/www/codemirror/src/line/pos.js +0 -40
  244. package/www/codemirror/src/line/saw_special_spans.js +0 -10
  245. package/www/codemirror/src/line/spans.js +0 -390
  246. package/www/codemirror/src/line/utils_line.js +0 -85
  247. package/www/codemirror/src/measurement/position_measurement.js +0 -702
  248. package/www/codemirror/src/measurement/widgets.js +0 -26
  249. package/www/codemirror/src/model/Doc.js +0 -436
  250. package/www/codemirror/src/model/change_measurement.js +0 -61
  251. package/www/codemirror/src/model/changes.js +0 -339
  252. package/www/codemirror/src/model/chunk.js +0 -167
  253. package/www/codemirror/src/model/document_data.js +0 -112
  254. package/www/codemirror/src/model/history.js +0 -228
  255. package/www/codemirror/src/model/line_widget.js +0 -78
  256. package/www/codemirror/src/model/mark_text.js +0 -293
  257. package/www/codemirror/src/model/selection.js +0 -84
  258. package/www/codemirror/src/model/selection_updates.js +0 -216
  259. package/www/codemirror/src/modes.js +0 -96
  260. package/www/codemirror/src/util/StringStream.js +0 -90
  261. package/www/codemirror/src/util/bidi.js +0 -215
  262. package/www/codemirror/src/util/browser.js +0 -34
  263. package/www/codemirror/src/util/dom.js +0 -101
  264. package/www/codemirror/src/util/event.js +0 -103
  265. package/www/codemirror/src/util/feature_detection.js +0 -84
  266. package/www/codemirror/src/util/misc.js +0 -168
  267. package/www/codemirror/src/util/operation_group.js +0 -72
  268. package/www/codemirror/theme/3024-day.css +0 -41
  269. package/www/codemirror/theme/3024-night.css +0 -39
  270. package/www/codemirror/theme/abbott.css +0 -268
  271. package/www/codemirror/theme/abcdef.css +0 -32
  272. package/www/codemirror/theme/ambiance-mobile.css +0 -5
  273. package/www/codemirror/theme/ambiance.css +0 -74
  274. package/www/codemirror/theme/ayu-dark.css +0 -44
  275. package/www/codemirror/theme/ayu-mirage.css +0 -45
  276. package/www/codemirror/theme/base16-dark.css +0 -40
  277. package/www/codemirror/theme/base16-light.css +0 -38
  278. package/www/codemirror/theme/bespin.css +0 -34
  279. package/www/codemirror/theme/blackboard.css +0 -32
  280. package/www/codemirror/theme/cobalt.css +0 -25
  281. package/www/codemirror/theme/colorforth.css +0 -33
  282. package/www/codemirror/theme/darcula.css +0 -53
  283. package/www/codemirror/theme/dracula.css +0 -40
  284. package/www/codemirror/theme/duotone-dark.css +0 -35
  285. package/www/codemirror/theme/duotone-light.css +0 -36
  286. package/www/codemirror/theme/eclipse.css +0 -23
  287. package/www/codemirror/theme/elegant.css +0 -13
  288. package/www/codemirror/theme/erlang-dark.css +0 -34
  289. package/www/codemirror/theme/gruvbox-dark.css +0 -39
  290. package/www/codemirror/theme/hopscotch.css +0 -34
  291. package/www/codemirror/theme/icecoder.css +0 -43
  292. package/www/codemirror/theme/idea.css +0 -42
  293. package/www/codemirror/theme/isotope.css +0 -34
  294. package/www/codemirror/theme/juejin.css +0 -30
  295. package/www/codemirror/theme/lesser-dark.css +0 -47
  296. package/www/codemirror/theme/liquibyte.css +0 -95
  297. package/www/codemirror/theme/lucario.css +0 -37
  298. package/www/codemirror/theme/material-darker.css +0 -135
  299. package/www/codemirror/theme/material-palenight.css +0 -141
  300. package/www/codemirror/theme/material.css +0 -141
  301. package/www/codemirror/theme/mbo.css +0 -37
  302. package/www/codemirror/theme/mdn-like.css +0 -46
  303. package/www/codemirror/theme/midnight.css +0 -39
  304. package/www/codemirror/theme/monokai.css +0 -41
  305. package/www/codemirror/theme/moxer.css +0 -143
  306. package/www/codemirror/theme/neat.css +0 -12
  307. package/www/codemirror/theme/neo.css +0 -43
  308. package/www/codemirror/theme/night.css +0 -27
  309. package/www/codemirror/theme/nord.css +0 -42
  310. package/www/codemirror/theme/oceanic-next.css +0 -46
  311. package/www/codemirror/theme/panda-syntax.css +0 -85
  312. package/www/codemirror/theme/paraiso-dark.css +0 -38
  313. package/www/codemirror/theme/paraiso-light.css +0 -38
  314. package/www/codemirror/theme/pastel-on-dark.css +0 -52
  315. package/www/codemirror/theme/railscasts.css +0 -34
  316. package/www/codemirror/theme/rubyblue.css +0 -25
  317. package/www/codemirror/theme/seti.css +0 -44
  318. package/www/codemirror/theme/shadowfox.css +0 -52
  319. package/www/codemirror/theme/solarized.css +0 -165
  320. package/www/codemirror/theme/ssms.css +0 -16
  321. package/www/codemirror/theme/the-matrix.css +0 -30
  322. package/www/codemirror/theme/tomorrow-night-bright.css +0 -35
  323. package/www/codemirror/theme/tomorrow-night-eighties.css +0 -38
  324. package/www/codemirror/theme/ttcn.css +0 -64
  325. package/www/codemirror/theme/twilight.css +0 -32
  326. package/www/codemirror/theme/vibrant-ink.css +0 -34
  327. package/www/codemirror/theme/xq-dark.css +0 -53
  328. package/www/codemirror/theme/xq-light.css +0 -43
  329. package/www/codemirror/theme/yeti.css +0 -44
  330. package/www/codemirror/theme/yonce.css +0 -59
  331. package/www/codemirror/theme/zenburn.css +0 -37
@@ -1,55 +0,0 @@
1
- import { getContextBefore, highlightLine, processLine } from "../line/highlight.js"
2
- import { copyState } from "../modes.js"
3
- import { bind } from "../util/misc.js"
4
-
5
- import { runInOp } from "./operations.js"
6
- import { regLineChange } from "./view_tracking.js"
7
-
8
- // HIGHLIGHT WORKER
9
-
10
- export function startWorker(cm, time) {
11
- if (cm.doc.highlightFrontier < cm.display.viewTo)
12
- cm.state.highlight.set(time, bind(highlightWorker, cm))
13
- }
14
-
15
- function highlightWorker(cm) {
16
- let doc = cm.doc
17
- if (doc.highlightFrontier >= cm.display.viewTo) return
18
- let end = +new Date + cm.options.workTime
19
- let context = getContextBefore(cm, doc.highlightFrontier)
20
- let changedLines = []
21
-
22
- doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), line => {
23
- if (context.line >= cm.display.viewFrom) { // Visible
24
- let oldStyles = line.styles
25
- let resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null
26
- let highlighted = highlightLine(cm, line, context, true)
27
- if (resetState) context.state = resetState
28
- line.styles = highlighted.styles
29
- let oldCls = line.styleClasses, newCls = highlighted.classes
30
- if (newCls) line.styleClasses = newCls
31
- else if (oldCls) line.styleClasses = null
32
- let ischange = !oldStyles || oldStyles.length != line.styles.length ||
33
- oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass)
34
- for (let i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i]
35
- if (ischange) changedLines.push(context.line)
36
- line.stateAfter = context.save()
37
- context.nextLine()
38
- } else {
39
- if (line.text.length <= cm.options.maxHighlightLength)
40
- processLine(cm, line.text, context)
41
- line.stateAfter = context.line % 5 == 0 ? context.save() : null
42
- context.nextLine()
43
- }
44
- if (+new Date > end) {
45
- startWorker(cm, cm.options.workDelay)
46
- return true
47
- }
48
- })
49
- doc.highlightFrontier = context.line
50
- doc.modeFrontier = Math.max(doc.modeFrontier, context.line)
51
- if (changedLines.length) runInOp(cm, () => {
52
- for (let i = 0; i < changedLines.length; i++)
53
- regLineChange(cm, changedLines[i], "text")
54
- })
55
- }
@@ -1,48 +0,0 @@
1
- import { lineNumberFor } from "../line/utils_line.js"
2
- import { compensateForHScroll } from "../measurement/position_measurement.js"
3
- import { elt } from "../util/dom.js"
4
-
5
- import { updateGutterSpace } from "./update_display.js"
6
-
7
- // Re-align line numbers and gutter marks to compensate for
8
- // horizontal scrolling.
9
- export function alignHorizontally(cm) {
10
- let display = cm.display, view = display.view
11
- if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return
12
- let comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft
13
- let gutterW = display.gutters.offsetWidth, left = comp + "px"
14
- for (let i = 0; i < view.length; i++) if (!view[i].hidden) {
15
- if (cm.options.fixedGutter) {
16
- if (view[i].gutter)
17
- view[i].gutter.style.left = left
18
- if (view[i].gutterBackground)
19
- view[i].gutterBackground.style.left = left
20
- }
21
- let align = view[i].alignable
22
- if (align) for (let j = 0; j < align.length; j++)
23
- align[j].style.left = left
24
- }
25
- if (cm.options.fixedGutter)
26
- display.gutters.style.left = (comp + gutterW) + "px"
27
- }
28
-
29
- // Used to ensure that the line number gutter is still the right
30
- // size for the current document size. Returns true when an update
31
- // is needed.
32
- export function maybeUpdateLineNumberWidth(cm) {
33
- if (!cm.options.lineNumbers) return false
34
- let doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display
35
- if (last.length != display.lineNumChars) {
36
- let test = display.measure.appendChild(elt("div", [elt("div", last)],
37
- "CodeMirror-linenumber CodeMirror-gutter-elt"))
38
- let innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW
39
- display.lineGutter.style.width = ""
40
- display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1
41
- display.lineNumWidth = display.lineNumInnerWidth + padding
42
- display.lineNumChars = display.lineNumInnerWidth ? last.length : -1
43
- display.lineGutter.style.width = display.lineNumWidth + "px"
44
- updateGutterSpace(cm.display)
45
- return true
46
- }
47
- return false
48
- }
@@ -1,22 +0,0 @@
1
- import { getMode } from "../modes.js"
2
-
3
- import { startWorker } from "./highlight_worker.js"
4
- import { regChange } from "./view_tracking.js"
5
-
6
- // Used to get the editor into a consistent state again when options change.
7
-
8
- export function loadMode(cm) {
9
- cm.doc.mode = getMode(cm.options, cm.doc.modeOption)
10
- resetModeState(cm)
11
- }
12
-
13
- export function resetModeState(cm) {
14
- cm.doc.iter(line => {
15
- if (line.stateAfter) line.stateAfter = null
16
- if (line.styles) line.styles = null
17
- })
18
- cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first
19
- startWorker(cm, 100)
20
- cm.state.modeGen++
21
- if (cm.curOp) regChange(cm)
22
- }
@@ -1,206 +0,0 @@
1
- import { clipPos } from "../line/pos.js"
2
- import { findMaxLine } from "../line/spans.js"
3
- import { displayWidth, measureChar, scrollGap } from "../measurement/position_measurement.js"
4
- import { signal } from "../util/event.js"
5
- import { activeElt, doc } from "../util/dom.js"
6
- import { finishOperation, pushOperation } from "../util/operation_group.js"
7
-
8
- import { ensureFocus } from "./focus.js"
9
- import { measureForScrollbars, updateScrollbars } from "./scrollbars.js"
10
- import { restartBlink } from "./selection.js"
11
- import { maybeScrollWindow, scrollPosIntoView, setScrollLeft, setScrollTop } from "./scrolling.js"
12
- import { DisplayUpdate, maybeClipScrollbars, postUpdateDisplay, setDocumentHeight, updateDisplayIfNeeded } from "./update_display.js"
13
- import { updateHeightsInViewport } from "./update_lines.js"
14
-
15
- // Operations are used to wrap a series of changes to the editor
16
- // state in such a way that each change won't have to update the
17
- // cursor and display (which would be awkward, slow, and
18
- // error-prone). Instead, display updates are batched and then all
19
- // combined and executed at once.
20
-
21
- let nextOpId = 0
22
- // Start a new operation.
23
- export function startOperation(cm) {
24
- cm.curOp = {
25
- cm: cm,
26
- viewChanged: false, // Flag that indicates that lines might need to be redrawn
27
- startHeight: cm.doc.height, // Used to detect need to update scrollbar
28
- forceUpdate: false, // Used to force a redraw
29
- updateInput: 0, // Whether to reset the input textarea
30
- typing: false, // Whether this reset should be careful to leave existing text (for compositing)
31
- changeObjs: null, // Accumulated changes, for firing change events
32
- cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on
33
- cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already
34
- selectionChanged: false, // Whether the selection needs to be redrawn
35
- updateMaxLine: false, // Set when the widest line needs to be determined anew
36
- scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet
37
- scrollToPos: null, // Used to scroll to a specific position
38
- focus: false,
39
- id: ++nextOpId, // Unique ID
40
- markArrays: null // Used by addMarkedSpan
41
- }
42
- pushOperation(cm.curOp)
43
- }
44
-
45
- // Finish an operation, updating the display and signalling delayed events
46
- export function endOperation(cm) {
47
- let op = cm.curOp
48
- if (op) finishOperation(op, group => {
49
- for (let i = 0; i < group.ops.length; i++)
50
- group.ops[i].cm.curOp = null
51
- endOperations(group)
52
- })
53
- }
54
-
55
- // The DOM updates done when an operation finishes are batched so
56
- // that the minimum number of relayouts are required.
57
- function endOperations(group) {
58
- let ops = group.ops
59
- for (let i = 0; i < ops.length; i++) // Read DOM
60
- endOperation_R1(ops[i])
61
- for (let i = 0; i < ops.length; i++) // Write DOM (maybe)
62
- endOperation_W1(ops[i])
63
- for (let i = 0; i < ops.length; i++) // Read DOM
64
- endOperation_R2(ops[i])
65
- for (let i = 0; i < ops.length; i++) // Write DOM (maybe)
66
- endOperation_W2(ops[i])
67
- for (let i = 0; i < ops.length; i++) // Read DOM
68
- endOperation_finish(ops[i])
69
- }
70
-
71
- function endOperation_R1(op) {
72
- let cm = op.cm, display = cm.display
73
- maybeClipScrollbars(cm)
74
- if (op.updateMaxLine) findMaxLine(cm)
75
-
76
- op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||
77
- op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||
78
- op.scrollToPos.to.line >= display.viewTo) ||
79
- display.maxLineChanged && cm.options.lineWrapping
80
- op.update = op.mustUpdate &&
81
- new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate)
82
- }
83
-
84
- function endOperation_W1(op) {
85
- op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update)
86
- }
87
-
88
- function endOperation_R2(op) {
89
- let cm = op.cm, display = cm.display
90
- if (op.updatedDisplay) updateHeightsInViewport(cm)
91
-
92
- op.barMeasure = measureForScrollbars(cm)
93
-
94
- // If the max line changed since it was last measured, measure it,
95
- // and ensure the document's width matches it.
96
- // updateDisplay_W2 will use these properties to do the actual resizing
97
- if (display.maxLineChanged && !cm.options.lineWrapping) {
98
- op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3
99
- cm.display.sizerWidth = op.adjustWidthTo
100
- op.barMeasure.scrollWidth =
101
- Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth)
102
- op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm))
103
- }
104
-
105
- if (op.updatedDisplay || op.selectionChanged)
106
- op.preparedSelection = display.input.prepareSelection()
107
- }
108
-
109
- function endOperation_W2(op) {
110
- let cm = op.cm
111
-
112
- if (op.adjustWidthTo != null) {
113
- cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"
114
- if (op.maxScrollLeft < cm.doc.scrollLeft)
115
- setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true)
116
- cm.display.maxLineChanged = false
117
- }
118
-
119
- let takeFocus = op.focus && op.focus == activeElt(doc(cm))
120
- if (op.preparedSelection)
121
- cm.display.input.showSelection(op.preparedSelection, takeFocus)
122
- if (op.updatedDisplay || op.startHeight != cm.doc.height)
123
- updateScrollbars(cm, op.barMeasure)
124
- if (op.updatedDisplay)
125
- setDocumentHeight(cm, op.barMeasure)
126
-
127
- if (op.selectionChanged) restartBlink(cm)
128
-
129
- if (cm.state.focused && op.updateInput)
130
- cm.display.input.reset(op.typing)
131
- if (takeFocus) ensureFocus(op.cm)
132
- }
133
-
134
- function endOperation_finish(op) {
135
- let cm = op.cm, display = cm.display, doc = cm.doc
136
-
137
- if (op.updatedDisplay) postUpdateDisplay(cm, op.update)
138
-
139
- // Abort mouse wheel delta measurement, when scrolling explicitly
140
- if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))
141
- display.wheelStartX = display.wheelStartY = null
142
-
143
- // Propagate the scroll position to the actual DOM scroller
144
- if (op.scrollTop != null) setScrollTop(cm, op.scrollTop, op.forceScroll)
145
-
146
- if (op.scrollLeft != null) setScrollLeft(cm, op.scrollLeft, true, true)
147
- // If we need to scroll a specific position into view, do so.
148
- if (op.scrollToPos) {
149
- let rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),
150
- clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin)
151
- maybeScrollWindow(cm, rect)
152
- }
153
-
154
- // Fire events for markers that are hidden/unidden by editing or
155
- // undoing
156
- let hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers
157
- if (hidden) for (let i = 0; i < hidden.length; ++i)
158
- if (!hidden[i].lines.length) signal(hidden[i], "hide")
159
- if (unhidden) for (let i = 0; i < unhidden.length; ++i)
160
- if (unhidden[i].lines.length) signal(unhidden[i], "unhide")
161
-
162
- if (display.wrapper.offsetHeight)
163
- doc.scrollTop = cm.display.scroller.scrollTop
164
-
165
- // Fire change events, and delayed event handlers
166
- if (op.changeObjs)
167
- signal(cm, "changes", cm, op.changeObjs)
168
- if (op.update)
169
- op.update.finish()
170
- }
171
-
172
- // Run the given function in an operation
173
- export function runInOp(cm, f) {
174
- if (cm.curOp) return f()
175
- startOperation(cm)
176
- try { return f() }
177
- finally { endOperation(cm) }
178
- }
179
- // Wraps a function in an operation. Returns the wrapped function.
180
- export function operation(cm, f) {
181
- return function() {
182
- if (cm.curOp) return f.apply(cm, arguments)
183
- startOperation(cm)
184
- try { return f.apply(cm, arguments) }
185
- finally { endOperation(cm) }
186
- }
187
- }
188
- // Used to add methods to editor and doc instances, wrapping them in
189
- // operations.
190
- export function methodOp(f) {
191
- return function() {
192
- if (this.curOp) return f.apply(this, arguments)
193
- startOperation(this)
194
- try { return f.apply(this, arguments) }
195
- finally { endOperation(this) }
196
- }
197
- }
198
- export function docMethodOp(f) {
199
- return function() {
200
- let cm = this.cm
201
- if (!cm || cm.curOp) return f.apply(this, arguments)
202
- startOperation(cm)
203
- try { return f.apply(this, arguments) }
204
- finally { endOperation(cm) }
205
- }
206
- }
@@ -1,132 +0,0 @@
1
- import { chrome, chrome_version, 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
- // On Chrome 102, viewport updates somehow stop wheel-based
44
- // scrolling. Turning off pointer events during the scroll seems
45
- // to avoid the issue.
46
- if (chrome && chrome_version == 102) {
47
- if (cm.display.chromeScrollHack == null) cm.display.sizer.style.pointerEvents = "none"
48
- else clearTimeout(cm.display.chromeScrollHack)
49
- cm.display.chromeScrollHack = setTimeout(() => {
50
- cm.display.chromeScrollHack = null
51
- cm.display.sizer.style.pointerEvents = ""
52
- }, 100)
53
- }
54
- let delta = wheelEventDelta(e), dx = delta.x, dy = delta.y
55
- let pixelsPerUnit = wheelPixelsPerUnit
56
- if (e.deltaMode === 0) {
57
- dx = e.deltaX
58
- dy = e.deltaY
59
- pixelsPerUnit = 1
60
- }
61
-
62
- let display = cm.display, scroll = display.scroller
63
- // Quit if there's nothing to scroll here
64
- let canScrollX = scroll.scrollWidth > scroll.clientWidth
65
- let canScrollY = scroll.scrollHeight > scroll.clientHeight
66
- if (!(dx && canScrollX || dy && canScrollY)) return
67
-
68
- // Webkit browsers on OS X abort momentum scrolls when the target
69
- // of the scroll event is removed from the scrollable element.
70
- // This hack (see related code in patchDisplay) makes sure the
71
- // element is kept around.
72
- if (dy && mac && webkit) {
73
- outer: for (let cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {
74
- for (let i = 0; i < view.length; i++) {
75
- if (view[i].node == cur) {
76
- cm.display.currentWheelTarget = cur
77
- break outer
78
- }
79
- }
80
- }
81
- }
82
-
83
- // On some browsers, horizontal scrolling will cause redraws to
84
- // happen before the gutter has been realigned, causing it to
85
- // wriggle around in a most unseemly way. When we have an
86
- // estimated pixels/delta value, we just handle horizontal
87
- // scrolling entirely here. It'll be slightly off from native, but
88
- // better than glitching out.
89
- if (dx && !gecko && !presto && pixelsPerUnit != null) {
90
- if (dy && canScrollY)
91
- updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * pixelsPerUnit))
92
- setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * pixelsPerUnit))
93
- // Only prevent default scrolling if vertical scrolling is
94
- // actually possible. Otherwise, it causes vertical scroll
95
- // jitter on OSX trackpads when deltaX is small and deltaY
96
- // is large (issue #3579)
97
- if (!dy || (dy && canScrollY))
98
- e_preventDefault(e)
99
- display.wheelStartX = null // Abort measurement, if in progress
100
- return
101
- }
102
-
103
- // 'Project' the visible viewport to cover the area that is being
104
- // scrolled into view (if we know enough to estimate it).
105
- if (dy && pixelsPerUnit != null) {
106
- let pixels = dy * pixelsPerUnit
107
- let top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight
108
- if (pixels < 0) top = Math.max(0, top + pixels - 50)
109
- else bot = Math.min(cm.doc.height, bot + pixels + 50)
110
- updateDisplaySimple(cm, {top: top, bottom: bot})
111
- }
112
-
113
- if (wheelSamples < 20 && e.deltaMode !== 0) {
114
- if (display.wheelStartX == null) {
115
- display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop
116
- display.wheelDX = dx; display.wheelDY = dy
117
- setTimeout(() => {
118
- if (display.wheelStartX == null) return
119
- let movedX = scroll.scrollLeft - display.wheelStartX
120
- let movedY = scroll.scrollTop - display.wheelStartY
121
- let sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||
122
- (movedX && display.wheelDX && movedX / display.wheelDX)
123
- display.wheelStartX = display.wheelStartY = null
124
- if (!sample) return
125
- wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1)
126
- ++wheelSamples
127
- }, 200)
128
- } else {
129
- display.wheelDX += dx; display.wheelDY += dy
130
- }
131
- }
132
- }
@@ -1,194 +0,0 @@
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.scrollTop = 0
64
- this.vert.style.display = ""
65
- this.vert.firstChild.style.height = "0"
66
- }
67
-
68
- if (needsH) {
69
- this.horiz.style.display = "block"
70
- this.horiz.style.right = needsV ? sWidth + "px" : "0"
71
- this.horiz.style.left = measure.barLeft + "px"
72
- let totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0)
73
- this.horiz.firstChild.style.width =
74
- Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px"
75
- } else {
76
- this.horiz.style.display = ""
77
- this.horiz.firstChild.style.width = "0"
78
- }
79
-
80
- if (!this.checkedZeroWidth && measure.clientHeight > 0) {
81
- if (sWidth == 0) this.zeroWidthHack()
82
- this.checkedZeroWidth = true
83
- }
84
-
85
- return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}
86
- }
87
-
88
- setScrollLeft(pos) {
89
- if (this.horiz.scrollLeft != pos) this.horiz.scrollLeft = pos
90
- if (this.disableHoriz) this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz")
91
- }
92
-
93
- setScrollTop(pos) {
94
- if (this.vert.scrollTop != pos) this.vert.scrollTop = pos
95
- if (this.disableVert) this.enableZeroWidthBar(this.vert, this.disableVert, "vert")
96
- }
97
-
98
- zeroWidthHack() {
99
- let w = mac && !mac_geMountainLion ? "12px" : "18px"
100
- this.horiz.style.height = this.vert.style.width = w
101
- this.horiz.style.visibility = this.vert.style.visibility = "hidden"
102
- this.disableHoriz = new Delayed
103
- this.disableVert = new Delayed
104
- }
105
-
106
- enableZeroWidthBar(bar, delay, type) {
107
- bar.style.visibility = ""
108
- function maybeDisable() {
109
- // To find out whether the scrollbar is still visible, we
110
- // check whether the element under the pixel in the bottom
111
- // right corner of the scrollbar box is the scrollbar box
112
- // itself (when the bar is still visible) or its filler child
113
- // (when the bar is hidden). If it is still visible, we keep
114
- // it enabled, if it's hidden, we disable pointer events.
115
- let box = bar.getBoundingClientRect()
116
- let elt = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)
117
- : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1)
118
- if (elt != bar) bar.style.visibility = "hidden"
119
- else delay.set(1000, maybeDisable)
120
- }
121
- delay.set(1000, maybeDisable)
122
- }
123
-
124
- clear() {
125
- let parent = this.horiz.parentNode
126
- parent.removeChild(this.horiz)
127
- parent.removeChild(this.vert)
128
- }
129
- }
130
-
131
- class NullScrollbars {
132
- update() { return {bottom: 0, right: 0} }
133
- setScrollLeft() {}
134
- setScrollTop() {}
135
- clear() {}
136
- }
137
-
138
- export function updateScrollbars(cm, measure) {
139
- if (!measure) measure = measureForScrollbars(cm)
140
- let startWidth = cm.display.barWidth, startHeight = cm.display.barHeight
141
- updateScrollbarsInner(cm, measure)
142
- for (let i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {
143
- if (startWidth != cm.display.barWidth && cm.options.lineWrapping)
144
- updateHeightsInViewport(cm)
145
- updateScrollbarsInner(cm, measureForScrollbars(cm))
146
- startWidth = cm.display.barWidth; startHeight = cm.display.barHeight
147
- }
148
- }
149
-
150
- // Re-synchronize the fake scrollbars with the actual size of the
151
- // content.
152
- function updateScrollbarsInner(cm, measure) {
153
- let d = cm.display
154
- let sizes = d.scrollbars.update(measure)
155
-
156
- d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"
157
- d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"
158
- d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent"
159
-
160
- if (sizes.right && sizes.bottom) {
161
- d.scrollbarFiller.style.display = "block"
162
- d.scrollbarFiller.style.height = sizes.bottom + "px"
163
- d.scrollbarFiller.style.width = sizes.right + "px"
164
- } else d.scrollbarFiller.style.display = ""
165
- if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {
166
- d.gutterFiller.style.display = "block"
167
- d.gutterFiller.style.height = sizes.bottom + "px"
168
- d.gutterFiller.style.width = measure.gutterWidth + "px"
169
- } else d.gutterFiller.style.display = ""
170
- }
171
-
172
- export let scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}
173
-
174
- export function initScrollbars(cm) {
175
- if (cm.display.scrollbars) {
176
- cm.display.scrollbars.clear()
177
- if (cm.display.scrollbars.addClass)
178
- rmClass(cm.display.wrapper, cm.display.scrollbars.addClass)
179
- }
180
-
181
- cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](node => {
182
- cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller)
183
- // Prevent clicks in the scrollbars from killing focus
184
- on(node, "mousedown", () => {
185
- if (cm.state.focused) setTimeout(() => cm.display.input.focus(), 0)
186
- })
187
- node.setAttribute("cm-not-content", "true")
188
- }, (pos, axis) => {
189
- if (axis == "horizontal") setScrollLeft(cm, pos)
190
- else updateScrollTop(cm, pos)
191
- }, cm)
192
- if (cm.display.scrollbars.addClass)
193
- addClass(cm.display.wrapper, cm.display.scrollbars.addClass)
194
- }