@muze-nl/simplystore 0.3.6 → 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 (328) hide show
  1. package/package.json +2 -2
  2. package/package.json~ +33 -0
  3. package/src/server.mjs +68 -61
  4. package/www/codemirror/addon/comment/comment.js +0 -211
  5. package/www/codemirror/addon/comment/continuecomment.js +0 -114
  6. package/www/codemirror/addon/dialog/dialog.css +0 -32
  7. package/www/codemirror/addon/dialog/dialog.js +0 -163
  8. package/www/codemirror/addon/display/autorefresh.js +0 -47
  9. package/www/codemirror/addon/display/fullscreen.css +0 -6
  10. package/www/codemirror/addon/display/fullscreen.js +0 -41
  11. package/www/codemirror/addon/display/panel.js +0 -133
  12. package/www/codemirror/addon/display/placeholder.js +0 -78
  13. package/www/codemirror/addon/display/rulers.js +0 -51
  14. package/www/codemirror/addon/edit/closebrackets.js +0 -201
  15. package/www/codemirror/addon/edit/closetag.js +0 -185
  16. package/www/codemirror/addon/edit/continuelist.js +0 -101
  17. package/www/codemirror/addon/edit/matchbrackets.js +0 -160
  18. package/www/codemirror/addon/edit/matchtags.js +0 -66
  19. package/www/codemirror/addon/edit/trailingspace.js +0 -27
  20. package/www/codemirror/addon/fold/brace-fold.js +0 -119
  21. package/www/codemirror/addon/fold/comment-fold.js +0 -59
  22. package/www/codemirror/addon/fold/foldcode.js +0 -159
  23. package/www/codemirror/addon/fold/foldgutter.css +0 -20
  24. package/www/codemirror/addon/fold/foldgutter.js +0 -169
  25. package/www/codemirror/addon/fold/indent-fold.js +0 -48
  26. package/www/codemirror/addon/fold/markdown-fold.js +0 -49
  27. package/www/codemirror/addon/fold/xml-fold.js +0 -184
  28. package/www/codemirror/addon/hint/anyword-hint.js +0 -41
  29. package/www/codemirror/addon/hint/css-hint.js +0 -66
  30. package/www/codemirror/addon/hint/html-hint.js +0 -351
  31. package/www/codemirror/addon/hint/javascript-hint.js +0 -162
  32. package/www/codemirror/addon/hint/show-hint.css +0 -37
  33. package/www/codemirror/addon/hint/show-hint.js +0 -523
  34. package/www/codemirror/addon/hint/sql-hint.js +0 -304
  35. package/www/codemirror/addon/hint/xml-hint.js +0 -132
  36. package/www/codemirror/addon/lint/coffeescript-lint.js +0 -47
  37. package/www/codemirror/addon/lint/css-lint.js +0 -40
  38. package/www/codemirror/addon/lint/html-lint.js +0 -59
  39. package/www/codemirror/addon/lint/json-lint.js +0 -40
  40. package/www/codemirror/addon/lint/yaml-lint.js +0 -41
  41. package/www/codemirror/addon/merge/merge.css +0 -119
  42. package/www/codemirror/addon/merge/merge.js +0 -1018
  43. package/www/codemirror/addon/mode/loadmode.js +0 -66
  44. package/www/codemirror/addon/mode/multiplex.js +0 -136
  45. package/www/codemirror/addon/mode/multiplex_test.js +0 -49
  46. package/www/codemirror/addon/mode/overlay.js +0 -90
  47. package/www/codemirror/addon/mode/simple.js +0 -216
  48. package/www/codemirror/addon/runmode/colorize.js +0 -40
  49. package/www/codemirror/addon/runmode/runmode-standalone.js +0 -334
  50. package/www/codemirror/addon/runmode/runmode.js +0 -76
  51. package/www/codemirror/addon/runmode/runmode.node.js +0 -329
  52. package/www/codemirror/addon/scroll/annotatescrollbar.js +0 -128
  53. package/www/codemirror/addon/scroll/scrollpastend.js +0 -48
  54. package/www/codemirror/addon/scroll/simplescrollbars.css +0 -66
  55. package/www/codemirror/addon/scroll/simplescrollbars.js +0 -152
  56. package/www/codemirror/addon/search/jump-to-line.js +0 -53
  57. package/www/codemirror/addon/search/match-highlighter.js +0 -167
  58. package/www/codemirror/addon/search/matchesonscrollbar.css +0 -8
  59. package/www/codemirror/addon/search/matchesonscrollbar.js +0 -97
  60. package/www/codemirror/addon/search/search.js +0 -295
  61. package/www/codemirror/addon/search/searchcursor.js +0 -305
  62. package/www/codemirror/addon/selection/active-line.js +0 -72
  63. package/www/codemirror/addon/selection/mark-selection.js +0 -119
  64. package/www/codemirror/addon/selection/selection-pointer.js +0 -98
  65. package/www/codemirror/addon/tern/tern.css +0 -87
  66. package/www/codemirror/addon/tern/tern.js +0 -756
  67. package/www/codemirror/addon/tern/worker.js +0 -44
  68. package/www/codemirror/addon/wrap/hardwrap.js +0 -160
  69. package/www/codemirror/bin/source-highlight +0 -48
  70. package/www/codemirror/keymap/emacs.js +0 -545
  71. package/www/codemirror/keymap/sublime.js +0 -720
  72. package/www/codemirror/keymap/vim.js +0 -5978
  73. package/www/codemirror/mode/apl/apl.js +0 -174
  74. package/www/codemirror/mode/asciiarmor/asciiarmor.js +0 -74
  75. package/www/codemirror/mode/asn.1/asn.1.js +0 -204
  76. package/www/codemirror/mode/asterisk/asterisk.js +0 -220
  77. package/www/codemirror/mode/brainfuck/brainfuck.js +0 -85
  78. package/www/codemirror/mode/clike/clike.js +0 -940
  79. package/www/codemirror/mode/clojure/clojure.js +0 -292
  80. package/www/codemirror/mode/cmake/cmake.js +0 -97
  81. package/www/codemirror/mode/cobol/cobol.js +0 -255
  82. package/www/codemirror/mode/coffeescript/coffeescript.js +0 -359
  83. package/www/codemirror/mode/commonlisp/commonlisp.js +0 -125
  84. package/www/codemirror/mode/crystal/crystal.js +0 -433
  85. package/www/codemirror/mode/css/css.js +0 -862
  86. package/www/codemirror/mode/cypher/cypher.js +0 -152
  87. package/www/codemirror/mode/d/d.js +0 -223
  88. package/www/codemirror/mode/dart/dart.js +0 -166
  89. package/www/codemirror/mode/diff/diff.js +0 -47
  90. package/www/codemirror/mode/django/django.js +0 -356
  91. package/www/codemirror/mode/dockerfile/dockerfile.js +0 -211
  92. package/www/codemirror/mode/dtd/dtd.js +0 -142
  93. package/www/codemirror/mode/dylan/dylan.js +0 -352
  94. package/www/codemirror/mode/ebnf/ebnf.js +0 -195
  95. package/www/codemirror/mode/ecl/ecl.js +0 -206
  96. package/www/codemirror/mode/eiffel/eiffel.js +0 -160
  97. package/www/codemirror/mode/elm/elm.js +0 -245
  98. package/www/codemirror/mode/erlang/erlang.js +0 -619
  99. package/www/codemirror/mode/factor/factor.js +0 -85
  100. package/www/codemirror/mode/fcl/fcl.js +0 -173
  101. package/www/codemirror/mode/forth/forth.js +0 -180
  102. package/www/codemirror/mode/fortran/fortran.js +0 -188
  103. package/www/codemirror/mode/gas/gas.js +0 -353
  104. package/www/codemirror/mode/gfm/gfm.js +0 -129
  105. package/www/codemirror/mode/gherkin/gherkin.js +0 -178
  106. package/www/codemirror/mode/go/go.js +0 -187
  107. package/www/codemirror/mode/groovy/groovy.js +0 -247
  108. package/www/codemirror/mode/haml/haml.js +0 -161
  109. package/www/codemirror/mode/handlebars/handlebars.js +0 -70
  110. package/www/codemirror/mode/haskell/haskell.js +0 -268
  111. package/www/codemirror/mode/haskell-literate/haskell-literate.js +0 -43
  112. package/www/codemirror/mode/haxe/haxe.js +0 -515
  113. package/www/codemirror/mode/htmlembedded/htmlembedded.js +0 -37
  114. package/www/codemirror/mode/htmlmixed/htmlmixed.js +0 -153
  115. package/www/codemirror/mode/http/http.js +0 -113
  116. package/www/codemirror/mode/idl/idl.js +0 -290
  117. package/www/codemirror/mode/jinja2/jinja2.js +0 -193
  118. package/www/codemirror/mode/jsx/jsx.js +0 -148
  119. package/www/codemirror/mode/julia/julia.js +0 -390
  120. package/www/codemirror/mode/livescript/livescript.js +0 -280
  121. package/www/codemirror/mode/lua/lua.js +0 -160
  122. package/www/codemirror/mode/markdown/markdown.js +0 -886
  123. package/www/codemirror/mode/mathematica/mathematica.js +0 -176
  124. package/www/codemirror/mode/mbox/mbox.js +0 -129
  125. package/www/codemirror/mode/meta.js +0 -221
  126. package/www/codemirror/mode/mirc/mirc.js +0 -193
  127. package/www/codemirror/mode/mllike/mllike.js +0 -359
  128. package/www/codemirror/mode/modelica/modelica.js +0 -245
  129. package/www/codemirror/mode/mscgen/mscgen.js +0 -175
  130. package/www/codemirror/mode/mumps/mumps.js +0 -148
  131. package/www/codemirror/mode/nginx/nginx.js +0 -178
  132. package/www/codemirror/mode/nsis/nsis.js +0 -95
  133. package/www/codemirror/mode/ntriples/ntriples.js +0 -195
  134. package/www/codemirror/mode/octave/octave.js +0 -139
  135. package/www/codemirror/mode/oz/oz.js +0 -252
  136. package/www/codemirror/mode/pascal/pascal.js +0 -136
  137. package/www/codemirror/mode/pegjs/pegjs.js +0 -111
  138. package/www/codemirror/mode/perl/perl.js +0 -836
  139. package/www/codemirror/mode/php/php.js +0 -234
  140. package/www/codemirror/mode/pig/pig.js +0 -178
  141. package/www/codemirror/mode/powershell/powershell.js +0 -398
  142. package/www/codemirror/mode/properties/properties.js +0 -78
  143. package/www/codemirror/mode/protobuf/protobuf.js +0 -72
  144. package/www/codemirror/mode/pug/pug.js +0 -591
  145. package/www/codemirror/mode/puppet/puppet.js +0 -220
  146. package/www/codemirror/mode/python/python.js +0 -402
  147. package/www/codemirror/mode/q/q.js +0 -139
  148. package/www/codemirror/mode/r/r.js +0 -190
  149. package/www/codemirror/mode/rpm/changes/index.html +0 -66
  150. package/www/codemirror/mode/rpm/rpm.js +0 -109
  151. package/www/codemirror/mode/rst/rst.js +0 -557
  152. package/www/codemirror/mode/ruby/ruby.js +0 -303
  153. package/www/codemirror/mode/rust/rust.js +0 -72
  154. package/www/codemirror/mode/sas/sas.js +0 -303
  155. package/www/codemirror/mode/sass/sass.js +0 -459
  156. package/www/codemirror/mode/scheme/scheme.js +0 -284
  157. package/www/codemirror/mode/shell/shell.js +0 -168
  158. package/www/codemirror/mode/sieve/sieve.js +0 -193
  159. package/www/codemirror/mode/slim/slim.js +0 -575
  160. package/www/codemirror/mode/smalltalk/smalltalk.js +0 -168
  161. package/www/codemirror/mode/smarty/smarty.js +0 -225
  162. package/www/codemirror/mode/solr/solr.js +0 -104
  163. package/www/codemirror/mode/soy/soy.js +0 -665
  164. package/www/codemirror/mode/sparql/sparql.js +0 -184
  165. package/www/codemirror/mode/spreadsheet/spreadsheet.js +0 -112
  166. package/www/codemirror/mode/sql/sql.js +0 -525
  167. package/www/codemirror/mode/stex/stex.js +0 -264
  168. package/www/codemirror/mode/stylus/stylus.js +0 -775
  169. package/www/codemirror/mode/swift/swift.js +0 -221
  170. package/www/codemirror/mode/tcl/tcl.js +0 -140
  171. package/www/codemirror/mode/textile/textile.js +0 -469
  172. package/www/codemirror/mode/tiddlywiki/tiddlywiki.css +0 -14
  173. package/www/codemirror/mode/tiddlywiki/tiddlywiki.js +0 -308
  174. package/www/codemirror/mode/tiki/tiki.css +0 -26
  175. package/www/codemirror/mode/tiki/tiki.js +0 -312
  176. package/www/codemirror/mode/toml/toml.js +0 -88
  177. package/www/codemirror/mode/tornado/tornado.js +0 -68
  178. package/www/codemirror/mode/troff/troff.js +0 -84
  179. package/www/codemirror/mode/ttcn/ttcn.js +0 -283
  180. package/www/codemirror/mode/ttcn-cfg/ttcn-cfg.js +0 -214
  181. package/www/codemirror/mode/turtle/turtle.js +0 -162
  182. package/www/codemirror/mode/twig/twig.js +0 -141
  183. package/www/codemirror/mode/vb/vb.js +0 -275
  184. package/www/codemirror/mode/vbscript/vbscript.js +0 -350
  185. package/www/codemirror/mode/velocity/velocity.js +0 -202
  186. package/www/codemirror/mode/verilog/verilog.js +0 -781
  187. package/www/codemirror/mode/vhdl/vhdl.js +0 -189
  188. package/www/codemirror/mode/vue/vue.js +0 -77
  189. package/www/codemirror/mode/wast/wast.js +0 -132
  190. package/www/codemirror/mode/webidl/webidl.js +0 -195
  191. package/www/codemirror/mode/xml/xml.js +0 -417
  192. package/www/codemirror/mode/xquery/xquery.js +0 -448
  193. package/www/codemirror/mode/yacas/yacas.js +0 -204
  194. package/www/codemirror/mode/yaml/yaml.js +0 -120
  195. package/www/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js +0 -72
  196. package/www/codemirror/mode/z80/z80.js +0 -116
  197. package/www/codemirror/rollup.config.js +0 -52
  198. package/www/codemirror/src/addon/runmode/codemirror-standalone.js +0 -24
  199. package/www/codemirror/src/addon/runmode/codemirror.node.js +0 -21
  200. package/www/codemirror/src/addon/runmode/runmode-standalone.js +0 -2
  201. package/www/codemirror/src/addon/runmode/runmode.node.js +0 -2
  202. package/www/codemirror/src/codemirror.js +0 -3
  203. package/www/codemirror/src/display/Display.js +0 -116
  204. package/www/codemirror/src/display/focus.js +0 -50
  205. package/www/codemirror/src/display/gutters.js +0 -44
  206. package/www/codemirror/src/display/highlight_worker.js +0 -55
  207. package/www/codemirror/src/display/line_numbers.js +0 -48
  208. package/www/codemirror/src/display/mode_state.js +0 -22
  209. package/www/codemirror/src/display/operations.js +0 -206
  210. package/www/codemirror/src/display/scroll_events.js +0 -132
  211. package/www/codemirror/src/display/scrollbars.js +0 -194
  212. package/www/codemirror/src/display/scrolling.js +0 -186
  213. package/www/codemirror/src/display/selection.js +0 -173
  214. package/www/codemirror/src/display/update_display.js +0 -267
  215. package/www/codemirror/src/display/update_line.js +0 -189
  216. package/www/codemirror/src/display/update_lines.js +0 -82
  217. package/www/codemirror/src/display/view_tracking.js +0 -153
  218. package/www/codemirror/src/edit/CodeMirror.js +0 -217
  219. package/www/codemirror/src/edit/commands.js +0 -178
  220. package/www/codemirror/src/edit/deleteNearSelection.js +0 -30
  221. package/www/codemirror/src/edit/drop_events.js +0 -130
  222. package/www/codemirror/src/edit/fromTextArea.js +0 -61
  223. package/www/codemirror/src/edit/global_events.js +0 -45
  224. package/www/codemirror/src/edit/key_events.js +0 -163
  225. package/www/codemirror/src/edit/legacy.js +0 -62
  226. package/www/codemirror/src/edit/main.js +0 -69
  227. package/www/codemirror/src/edit/methods.js +0 -555
  228. package/www/codemirror/src/edit/mouse_events.js +0 -417
  229. package/www/codemirror/src/edit/options.js +0 -194
  230. package/www/codemirror/src/edit/utils.js +0 -7
  231. package/www/codemirror/src/input/ContentEditableInput.js +0 -546
  232. package/www/codemirror/src/input/TextareaInput.js +0 -380
  233. package/www/codemirror/src/input/indent.js +0 -71
  234. package/www/codemirror/src/input/input.js +0 -134
  235. package/www/codemirror/src/input/keymap.js +0 -147
  236. package/www/codemirror/src/input/keynames.js +0 -17
  237. package/www/codemirror/src/input/movement.js +0 -111
  238. package/www/codemirror/src/line/highlight.js +0 -284
  239. package/www/codemirror/src/line/line_data.js +0 -349
  240. package/www/codemirror/src/line/pos.js +0 -40
  241. package/www/codemirror/src/line/saw_special_spans.js +0 -10
  242. package/www/codemirror/src/line/spans.js +0 -390
  243. package/www/codemirror/src/line/utils_line.js +0 -85
  244. package/www/codemirror/src/measurement/position_measurement.js +0 -702
  245. package/www/codemirror/src/measurement/widgets.js +0 -26
  246. package/www/codemirror/src/model/Doc.js +0 -436
  247. package/www/codemirror/src/model/change_measurement.js +0 -61
  248. package/www/codemirror/src/model/changes.js +0 -339
  249. package/www/codemirror/src/model/chunk.js +0 -167
  250. package/www/codemirror/src/model/document_data.js +0 -112
  251. package/www/codemirror/src/model/history.js +0 -228
  252. package/www/codemirror/src/model/line_widget.js +0 -78
  253. package/www/codemirror/src/model/mark_text.js +0 -293
  254. package/www/codemirror/src/model/selection.js +0 -84
  255. package/www/codemirror/src/model/selection_updates.js +0 -216
  256. package/www/codemirror/src/modes.js +0 -96
  257. package/www/codemirror/src/util/StringStream.js +0 -90
  258. package/www/codemirror/src/util/bidi.js +0 -215
  259. package/www/codemirror/src/util/browser.js +0 -34
  260. package/www/codemirror/src/util/dom.js +0 -101
  261. package/www/codemirror/src/util/event.js +0 -103
  262. package/www/codemirror/src/util/feature_detection.js +0 -84
  263. package/www/codemirror/src/util/misc.js +0 -168
  264. package/www/codemirror/src/util/operation_group.js +0 -72
  265. package/www/codemirror/theme/3024-day.css +0 -41
  266. package/www/codemirror/theme/3024-night.css +0 -39
  267. package/www/codemirror/theme/abbott.css +0 -268
  268. package/www/codemirror/theme/abcdef.css +0 -32
  269. package/www/codemirror/theme/ambiance-mobile.css +0 -5
  270. package/www/codemirror/theme/ambiance.css +0 -74
  271. package/www/codemirror/theme/ayu-dark.css +0 -44
  272. package/www/codemirror/theme/ayu-mirage.css +0 -45
  273. package/www/codemirror/theme/base16-dark.css +0 -40
  274. package/www/codemirror/theme/base16-light.css +0 -38
  275. package/www/codemirror/theme/bespin.css +0 -34
  276. package/www/codemirror/theme/blackboard.css +0 -32
  277. package/www/codemirror/theme/cobalt.css +0 -25
  278. package/www/codemirror/theme/colorforth.css +0 -33
  279. package/www/codemirror/theme/darcula.css +0 -53
  280. package/www/codemirror/theme/dracula.css +0 -40
  281. package/www/codemirror/theme/duotone-dark.css +0 -35
  282. package/www/codemirror/theme/duotone-light.css +0 -36
  283. package/www/codemirror/theme/eclipse.css +0 -23
  284. package/www/codemirror/theme/elegant.css +0 -13
  285. package/www/codemirror/theme/erlang-dark.css +0 -34
  286. package/www/codemirror/theme/gruvbox-dark.css +0 -39
  287. package/www/codemirror/theme/hopscotch.css +0 -34
  288. package/www/codemirror/theme/icecoder.css +0 -43
  289. package/www/codemirror/theme/idea.css +0 -42
  290. package/www/codemirror/theme/isotope.css +0 -34
  291. package/www/codemirror/theme/juejin.css +0 -30
  292. package/www/codemirror/theme/lesser-dark.css +0 -47
  293. package/www/codemirror/theme/liquibyte.css +0 -95
  294. package/www/codemirror/theme/lucario.css +0 -37
  295. package/www/codemirror/theme/material-darker.css +0 -135
  296. package/www/codemirror/theme/material-palenight.css +0 -141
  297. package/www/codemirror/theme/material.css +0 -141
  298. package/www/codemirror/theme/mbo.css +0 -37
  299. package/www/codemirror/theme/mdn-like.css +0 -46
  300. package/www/codemirror/theme/midnight.css +0 -39
  301. package/www/codemirror/theme/monokai.css +0 -41
  302. package/www/codemirror/theme/moxer.css +0 -143
  303. package/www/codemirror/theme/neat.css +0 -12
  304. package/www/codemirror/theme/neo.css +0 -43
  305. package/www/codemirror/theme/night.css +0 -27
  306. package/www/codemirror/theme/nord.css +0 -42
  307. package/www/codemirror/theme/oceanic-next.css +0 -46
  308. package/www/codemirror/theme/panda-syntax.css +0 -85
  309. package/www/codemirror/theme/paraiso-dark.css +0 -38
  310. package/www/codemirror/theme/paraiso-light.css +0 -38
  311. package/www/codemirror/theme/pastel-on-dark.css +0 -52
  312. package/www/codemirror/theme/railscasts.css +0 -34
  313. package/www/codemirror/theme/rubyblue.css +0 -25
  314. package/www/codemirror/theme/seti.css +0 -44
  315. package/www/codemirror/theme/shadowfox.css +0 -52
  316. package/www/codemirror/theme/solarized.css +0 -165
  317. package/www/codemirror/theme/ssms.css +0 -16
  318. package/www/codemirror/theme/the-matrix.css +0 -30
  319. package/www/codemirror/theme/tomorrow-night-bright.css +0 -35
  320. package/www/codemirror/theme/tomorrow-night-eighties.css +0 -38
  321. package/www/codemirror/theme/ttcn.css +0 -64
  322. package/www/codemirror/theme/twilight.css +0 -32
  323. package/www/codemirror/theme/vibrant-ink.css +0 -34
  324. package/www/codemirror/theme/xq-dark.css +0 -53
  325. package/www/codemirror/theme/xq-light.css +0 -43
  326. package/www/codemirror/theme/yeti.css +0 -44
  327. package/www/codemirror/theme/yonce.css +0 -59
  328. 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
- }