@muze-nl/simplystore 0.1.2

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