@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,228 +0,0 @@
1
- import { cmp, copyPos } from "../line/pos.js"
2
- import { stretchSpansOverChange } from "../line/spans.js"
3
- import { getBetween } from "../line/utils_line.js"
4
- import { signal } from "../util/event.js"
5
- import { indexOf, lst } from "../util/misc.js"
6
-
7
- import { changeEnd } from "./change_measurement.js"
8
- import { linkedDocs } from "./document_data.js"
9
- import { Selection } from "./selection.js"
10
-
11
- export function History(prev) {
12
- // Arrays of change events and selections. Doing something adds an
13
- // event to done and clears undo. Undoing moves events from done
14
- // to undone, redoing moves them in the other direction.
15
- this.done = []; this.undone = []
16
- this.undoDepth = prev ? prev.undoDepth : Infinity
17
- // Used to track when changes can be merged into a single undo
18
- // event
19
- this.lastModTime = this.lastSelTime = 0
20
- this.lastOp = this.lastSelOp = null
21
- this.lastOrigin = this.lastSelOrigin = null
22
- // Used by the isClean() method
23
- this.generation = this.maxGeneration = prev ? prev.maxGeneration : 1
24
- }
25
-
26
- // Create a history change event from an updateDoc-style change
27
- // object.
28
- export function historyChangeFromChange(doc, change) {
29
- let histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}
30
- attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1)
31
- linkedDocs(doc, doc => attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1), true)
32
- return histChange
33
- }
34
-
35
- // Pop all selection events off the end of a history array. Stop at
36
- // a change event.
37
- function clearSelectionEvents(array) {
38
- while (array.length) {
39
- let last = lst(array)
40
- if (last.ranges) array.pop()
41
- else break
42
- }
43
- }
44
-
45
- // Find the top change event in the history. Pop off selection
46
- // events that are in the way.
47
- function lastChangeEvent(hist, force) {
48
- if (force) {
49
- clearSelectionEvents(hist.done)
50
- return lst(hist.done)
51
- } else if (hist.done.length && !lst(hist.done).ranges) {
52
- return lst(hist.done)
53
- } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {
54
- hist.done.pop()
55
- return lst(hist.done)
56
- }
57
- }
58
-
59
- // Register a change in the history. Merges changes that are within
60
- // a single operation, or are close together with an origin that
61
- // allows merging (starting with "+") into a single event.
62
- export function addChangeToHistory(doc, change, selAfter, opId) {
63
- let hist = doc.history
64
- hist.undone.length = 0
65
- let time = +new Date, cur
66
- let last
67
-
68
- if ((hist.lastOp == opId ||
69
- hist.lastOrigin == change.origin && change.origin &&
70
- ((change.origin.charAt(0) == "+" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||
71
- change.origin.charAt(0) == "*")) &&
72
- (cur = lastChangeEvent(hist, hist.lastOp == opId))) {
73
- // Merge this change into the last event
74
- last = lst(cur.changes)
75
- if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {
76
- // Optimized case for simple insertion -- don't want to add
77
- // new changesets for every character typed
78
- last.to = changeEnd(change)
79
- } else {
80
- // Add new sub-event
81
- cur.changes.push(historyChangeFromChange(doc, change))
82
- }
83
- } else {
84
- // Can not be merged, start a new event.
85
- let before = lst(hist.done)
86
- if (!before || !before.ranges)
87
- pushSelectionToHistory(doc.sel, hist.done)
88
- cur = {changes: [historyChangeFromChange(doc, change)],
89
- generation: hist.generation}
90
- hist.done.push(cur)
91
- while (hist.done.length > hist.undoDepth) {
92
- hist.done.shift()
93
- if (!hist.done[0].ranges) hist.done.shift()
94
- }
95
- }
96
- hist.done.push(selAfter)
97
- hist.generation = ++hist.maxGeneration
98
- hist.lastModTime = hist.lastSelTime = time
99
- hist.lastOp = hist.lastSelOp = opId
100
- hist.lastOrigin = hist.lastSelOrigin = change.origin
101
-
102
- if (!last) signal(doc, "historyAdded")
103
- }
104
-
105
- function selectionEventCanBeMerged(doc, origin, prev, sel) {
106
- let ch = origin.charAt(0)
107
- return ch == "*" ||
108
- ch == "+" &&
109
- prev.ranges.length == sel.ranges.length &&
110
- prev.somethingSelected() == sel.somethingSelected() &&
111
- new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)
112
- }
113
-
114
- // Called whenever the selection changes, sets the new selection as
115
- // the pending selection in the history, and pushes the old pending
116
- // selection into the 'done' array when it was significantly
117
- // different (in number of selected ranges, emptiness, or time).
118
- export function addSelectionToHistory(doc, sel, opId, options) {
119
- let hist = doc.history, origin = options && options.origin
120
-
121
- // A new event is started when the previous origin does not match
122
- // the current, or the origins don't allow matching. Origins
123
- // starting with * are always merged, those starting with + are
124
- // merged when similar and close together in time.
125
- if (opId == hist.lastSelOp ||
126
- (origin && hist.lastSelOrigin == origin &&
127
- (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||
128
- selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))
129
- hist.done[hist.done.length - 1] = sel
130
- else
131
- pushSelectionToHistory(sel, hist.done)
132
-
133
- hist.lastSelTime = +new Date
134
- hist.lastSelOrigin = origin
135
- hist.lastSelOp = opId
136
- if (options && options.clearRedo !== false)
137
- clearSelectionEvents(hist.undone)
138
- }
139
-
140
- export function pushSelectionToHistory(sel, dest) {
141
- let top = lst(dest)
142
- if (!(top && top.ranges && top.equals(sel)))
143
- dest.push(sel)
144
- }
145
-
146
- // Used to store marked span information in the history.
147
- function attachLocalSpans(doc, change, from, to) {
148
- let existing = change["spans_" + doc.id], n = 0
149
- doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), line => {
150
- if (line.markedSpans)
151
- (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans
152
- ++n
153
- })
154
- }
155
-
156
- // When un/re-doing restores text containing marked spans, those
157
- // that have been explicitly cleared should not be restored.
158
- function removeClearedSpans(spans) {
159
- if (!spans) return null
160
- let out
161
- for (let i = 0; i < spans.length; ++i) {
162
- if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i) }
163
- else if (out) out.push(spans[i])
164
- }
165
- return !out ? spans : out.length ? out : null
166
- }
167
-
168
- // Retrieve and filter the old marked spans stored in a change event.
169
- function getOldSpans(doc, change) {
170
- let found = change["spans_" + doc.id]
171
- if (!found) return null
172
- let nw = []
173
- for (let i = 0; i < change.text.length; ++i)
174
- nw.push(removeClearedSpans(found[i]))
175
- return nw
176
- }
177
-
178
- // Used for un/re-doing changes from the history. Combines the
179
- // result of computing the existing spans with the set of spans that
180
- // existed in the history (so that deleting around a span and then
181
- // undoing brings back the span).
182
- export function mergeOldSpans(doc, change) {
183
- let old = getOldSpans(doc, change)
184
- let stretched = stretchSpansOverChange(doc, change)
185
- if (!old) return stretched
186
- if (!stretched) return old
187
-
188
- for (let i = 0; i < old.length; ++i) {
189
- let oldCur = old[i], stretchCur = stretched[i]
190
- if (oldCur && stretchCur) {
191
- spans: for (let j = 0; j < stretchCur.length; ++j) {
192
- let span = stretchCur[j]
193
- for (let k = 0; k < oldCur.length; ++k)
194
- if (oldCur[k].marker == span.marker) continue spans
195
- oldCur.push(span)
196
- }
197
- } else if (stretchCur) {
198
- old[i] = stretchCur
199
- }
200
- }
201
- return old
202
- }
203
-
204
- // Used both to provide a JSON-safe object in .getHistory, and, when
205
- // detaching a document, to split the history in two
206
- export function copyHistoryArray(events, newGroup, instantiateSel) {
207
- let copy = []
208
- for (let i = 0; i < events.length; ++i) {
209
- let event = events[i]
210
- if (event.ranges) {
211
- copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event)
212
- continue
213
- }
214
- let changes = event.changes, newChanges = []
215
- copy.push({changes: newChanges})
216
- for (let j = 0; j < changes.length; ++j) {
217
- let change = changes[j], m
218
- newChanges.push({from: change.from, to: change.to, text: change.text})
219
- if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\d+)$/)) {
220
- if (indexOf(newGroup, Number(m[1])) > -1) {
221
- lst(newChanges)[prop] = change[prop]
222
- delete change[prop]
223
- }
224
- }
225
- }
226
- }
227
- return copy
228
- }
@@ -1,78 +0,0 @@
1
- import { runInOp } from "../display/operations.js"
2
- import { addToScrollTop } from "../display/scrolling.js"
3
- import { regLineChange } from "../display/view_tracking.js"
4
- import { heightAtLine, lineIsHidden } from "../line/spans.js"
5
- import { lineNo, updateLineHeight } from "../line/utils_line.js"
6
- import { widgetHeight } from "../measurement/widgets.js"
7
- import { changeLine } from "./changes.js"
8
- import { eventMixin } from "../util/event.js"
9
- import { signalLater } from "../util/operation_group.js"
10
-
11
- // Line widgets are block elements displayed above or below a line.
12
-
13
- export class LineWidget {
14
- constructor(doc, node, options) {
15
- if (options) for (let opt in options) if (options.hasOwnProperty(opt))
16
- this[opt] = options[opt]
17
- this.doc = doc
18
- this.node = node
19
- }
20
-
21
- clear() {
22
- let cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line)
23
- if (no == null || !ws) return
24
- for (let i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1)
25
- if (!ws.length) line.widgets = null
26
- let height = widgetHeight(this)
27
- updateLineHeight(line, Math.max(0, line.height - height))
28
- if (cm) {
29
- runInOp(cm, () => {
30
- adjustScrollWhenAboveVisible(cm, line, -height)
31
- regLineChange(cm, no, "widget")
32
- })
33
- signalLater(cm, "lineWidgetCleared", cm, this, no)
34
- }
35
- }
36
-
37
- changed() {
38
- let oldH = this.height, cm = this.doc.cm, line = this.line
39
- this.height = null
40
- let diff = widgetHeight(this) - oldH
41
- if (!diff) return
42
- if (!lineIsHidden(this.doc, line)) updateLineHeight(line, line.height + diff)
43
- if (cm) {
44
- runInOp(cm, () => {
45
- cm.curOp.forceUpdate = true
46
- adjustScrollWhenAboveVisible(cm, line, diff)
47
- signalLater(cm, "lineWidgetChanged", cm, this, lineNo(line))
48
- })
49
- }
50
- }
51
- }
52
- eventMixin(LineWidget)
53
-
54
- function adjustScrollWhenAboveVisible(cm, line, diff) {
55
- if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))
56
- addToScrollTop(cm, diff)
57
- }
58
-
59
- export function addLineWidget(doc, handle, node, options) {
60
- let widget = new LineWidget(doc, node, options)
61
- let cm = doc.cm
62
- if (cm && widget.noHScroll) cm.display.alignWidgets = true
63
- changeLine(doc, handle, "widget", line => {
64
- let widgets = line.widgets || (line.widgets = [])
65
- if (widget.insertAt == null) widgets.push(widget)
66
- else widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget)
67
- widget.line = line
68
- if (cm && !lineIsHidden(doc, line)) {
69
- let aboveVisible = heightAtLine(line) < doc.scrollTop
70
- updateLineHeight(line, line.height + widgetHeight(widget))
71
- if (aboveVisible) addToScrollTop(cm, widget.height)
72
- cm.curOp.forceUpdate = true
73
- }
74
- return true
75
- })
76
- if (cm) signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle))
77
- return widget
78
- }
@@ -1,293 +0,0 @@
1
- import { eltP } from "../util/dom.js"
2
- import { eventMixin, hasHandler, on } from "../util/event.js"
3
- import { endOperation, operation, runInOp, startOperation } from "../display/operations.js"
4
- import { clipPos, cmp, Pos } from "../line/pos.js"
5
- import { lineNo, updateLineHeight } from "../line/utils_line.js"
6
- import { clearLineMeasurementCacheFor, findViewForLine, textHeight } from "../measurement/position_measurement.js"
7
- import { seeReadOnlySpans, seeCollapsedSpans } from "../line/saw_special_spans.js"
8
- import { addMarkedSpan, conflictingCollapsedRange, getMarkedSpanFor, lineIsHidden, lineLength, MarkedSpan, removeMarkedSpan, visualLine } from "../line/spans.js"
9
- import { copyObj, indexOf, lst } from "../util/misc.js"
10
- import { signalLater } from "../util/operation_group.js"
11
- import { widgetHeight } from "../measurement/widgets.js"
12
- import { regChange, regLineChange } from "../display/view_tracking.js"
13
-
14
- import { linkedDocs } from "./document_data.js"
15
- import { addChangeToHistory } from "./history.js"
16
- import { reCheckSelection } from "./selection_updates.js"
17
-
18
- // TEXTMARKERS
19
-
20
- // Created with markText and setBookmark methods. A TextMarker is a
21
- // handle that can be used to clear or find a marked position in the
22
- // document. Line objects hold arrays (markedSpans) containing
23
- // {from, to, marker} object pointing to such marker objects, and
24
- // indicating that such a marker is present on that line. Multiple
25
- // lines may point to the same marker when it spans across lines.
26
- // The spans will have null for their from/to properties when the
27
- // marker continues beyond the start/end of the line. Markers have
28
- // links back to the lines they currently touch.
29
-
30
- // Collapsed markers have unique ids, in order to be able to order
31
- // them, which is needed for uniquely determining an outer marker
32
- // when they overlap (they may nest, but not partially overlap).
33
- let nextMarkerId = 0
34
-
35
- export class TextMarker {
36
- constructor(doc, type) {
37
- this.lines = []
38
- this.type = type
39
- this.doc = doc
40
- this.id = ++nextMarkerId
41
- }
42
-
43
- // Clear the marker.
44
- clear() {
45
- if (this.explicitlyCleared) return
46
- let cm = this.doc.cm, withOp = cm && !cm.curOp
47
- if (withOp) startOperation(cm)
48
- if (hasHandler(this, "clear")) {
49
- let found = this.find()
50
- if (found) signalLater(this, "clear", found.from, found.to)
51
- }
52
- let min = null, max = null
53
- for (let i = 0; i < this.lines.length; ++i) {
54
- let line = this.lines[i]
55
- let span = getMarkedSpanFor(line.markedSpans, this)
56
- if (cm && !this.collapsed) regLineChange(cm, lineNo(line), "text")
57
- else if (cm) {
58
- if (span.to != null) max = lineNo(line)
59
- if (span.from != null) min = lineNo(line)
60
- }
61
- line.markedSpans = removeMarkedSpan(line.markedSpans, span)
62
- if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm)
63
- updateLineHeight(line, textHeight(cm.display))
64
- }
65
- if (cm && this.collapsed && !cm.options.lineWrapping) for (let i = 0; i < this.lines.length; ++i) {
66
- let visual = visualLine(this.lines[i]), len = lineLength(visual)
67
- if (len > cm.display.maxLineLength) {
68
- cm.display.maxLine = visual
69
- cm.display.maxLineLength = len
70
- cm.display.maxLineChanged = true
71
- }
72
- }
73
-
74
- if (min != null && cm && this.collapsed) regChange(cm, min, max + 1)
75
- this.lines.length = 0
76
- this.explicitlyCleared = true
77
- if (this.atomic && this.doc.cantEdit) {
78
- this.doc.cantEdit = false
79
- if (cm) reCheckSelection(cm.doc)
80
- }
81
- if (cm) signalLater(cm, "markerCleared", cm, this, min, max)
82
- if (withOp) endOperation(cm)
83
- if (this.parent) this.parent.clear()
84
- }
85
-
86
- // Find the position of the marker in the document. Returns a {from,
87
- // to} object by default. Side can be passed to get a specific side
88
- // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the
89
- // Pos objects returned contain a line object, rather than a line
90
- // number (used to prevent looking up the same line twice).
91
- find(side, lineObj) {
92
- if (side == null && this.type == "bookmark") side = 1
93
- let from, to
94
- for (let i = 0; i < this.lines.length; ++i) {
95
- let line = this.lines[i]
96
- let span = getMarkedSpanFor(line.markedSpans, this)
97
- if (span.from != null) {
98
- from = Pos(lineObj ? line : lineNo(line), span.from)
99
- if (side == -1) return from
100
- }
101
- if (span.to != null) {
102
- to = Pos(lineObj ? line : lineNo(line), span.to)
103
- if (side == 1) return to
104
- }
105
- }
106
- return from && {from: from, to: to}
107
- }
108
-
109
- // Signals that the marker's widget changed, and surrounding layout
110
- // should be recomputed.
111
- changed() {
112
- let pos = this.find(-1, true), widget = this, cm = this.doc.cm
113
- if (!pos || !cm) return
114
- runInOp(cm, () => {
115
- let line = pos.line, lineN = lineNo(pos.line)
116
- let view = findViewForLine(cm, lineN)
117
- if (view) {
118
- clearLineMeasurementCacheFor(view)
119
- cm.curOp.selectionChanged = cm.curOp.forceUpdate = true
120
- }
121
- cm.curOp.updateMaxLine = true
122
- if (!lineIsHidden(widget.doc, line) && widget.height != null) {
123
- let oldHeight = widget.height
124
- widget.height = null
125
- let dHeight = widgetHeight(widget) - oldHeight
126
- if (dHeight)
127
- updateLineHeight(line, line.height + dHeight)
128
- }
129
- signalLater(cm, "markerChanged", cm, this)
130
- })
131
- }
132
-
133
- attachLine(line) {
134
- if (!this.lines.length && this.doc.cm) {
135
- let op = this.doc.cm.curOp
136
- if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)
137
- (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this)
138
- }
139
- this.lines.push(line)
140
- }
141
-
142
- detachLine(line) {
143
- this.lines.splice(indexOf(this.lines, line), 1)
144
- if (!this.lines.length && this.doc.cm) {
145
- let op = this.doc.cm.curOp
146
- ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this)
147
- }
148
- }
149
- }
150
- eventMixin(TextMarker)
151
-
152
- // Create a marker, wire it up to the right lines, and
153
- export function markText(doc, from, to, options, type) {
154
- // Shared markers (across linked documents) are handled separately
155
- // (markTextShared will call out to this again, once per
156
- // document).
157
- if (options && options.shared) return markTextShared(doc, from, to, options, type)
158
- // Ensure we are in an operation.
159
- if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type)
160
-
161
- let marker = new TextMarker(doc, type), diff = cmp(from, to)
162
- if (options) copyObj(options, marker, false)
163
- // Don't connect empty markers unless clearWhenEmpty is false
164
- if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)
165
- return marker
166
- if (marker.replacedWith) {
167
- // Showing up as a widget implies collapsed (widget replaces text)
168
- marker.collapsed = true
169
- marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget")
170
- if (!options.handleMouseEvents) marker.widgetNode.setAttribute("cm-ignore-events", "true")
171
- if (options.insertLeft) marker.widgetNode.insertLeft = true
172
- }
173
- if (marker.collapsed) {
174
- if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||
175
- from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))
176
- throw new Error("Inserting collapsed marker partially overlapping an existing one")
177
- seeCollapsedSpans()
178
- }
179
-
180
- if (marker.addToHistory)
181
- addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN)
182
-
183
- let curLine = from.line, cm = doc.cm, updateMaxLine
184
- doc.iter(curLine, to.line + 1, line => {
185
- if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)
186
- updateMaxLine = true
187
- if (marker.collapsed && curLine != from.line) updateLineHeight(line, 0)
188
- addMarkedSpan(line, new MarkedSpan(marker,
189
- curLine == from.line ? from.ch : null,
190
- curLine == to.line ? to.ch : null), doc.cm && doc.cm.curOp)
191
- ++curLine
192
- })
193
- // lineIsHidden depends on the presence of the spans, so needs a second pass
194
- if (marker.collapsed) doc.iter(from.line, to.line + 1, line => {
195
- if (lineIsHidden(doc, line)) updateLineHeight(line, 0)
196
- })
197
-
198
- if (marker.clearOnEnter) on(marker, "beforeCursorEnter", () => marker.clear())
199
-
200
- if (marker.readOnly) {
201
- seeReadOnlySpans()
202
- if (doc.history.done.length || doc.history.undone.length)
203
- doc.clearHistory()
204
- }
205
- if (marker.collapsed) {
206
- marker.id = ++nextMarkerId
207
- marker.atomic = true
208
- }
209
- if (cm) {
210
- // Sync editor state
211
- if (updateMaxLine) cm.curOp.updateMaxLine = true
212
- if (marker.collapsed)
213
- regChange(cm, from.line, to.line + 1)
214
- else if (marker.className || marker.startStyle || marker.endStyle || marker.css ||
215
- marker.attributes || marker.title)
216
- for (let i = from.line; i <= to.line; i++) regLineChange(cm, i, "text")
217
- if (marker.atomic) reCheckSelection(cm.doc)
218
- signalLater(cm, "markerAdded", cm, marker)
219
- }
220
- return marker
221
- }
222
-
223
- // SHARED TEXTMARKERS
224
-
225
- // A shared marker spans multiple linked documents. It is
226
- // implemented as a meta-marker-object controlling multiple normal
227
- // markers.
228
- export class SharedTextMarker {
229
- constructor(markers, primary) {
230
- this.markers = markers
231
- this.primary = primary
232
- for (let i = 0; i < markers.length; ++i)
233
- markers[i].parent = this
234
- }
235
-
236
- clear() {
237
- if (this.explicitlyCleared) return
238
- this.explicitlyCleared = true
239
- for (let i = 0; i < this.markers.length; ++i)
240
- this.markers[i].clear()
241
- signalLater(this, "clear")
242
- }
243
-
244
- find(side, lineObj) {
245
- return this.primary.find(side, lineObj)
246
- }
247
- }
248
- eventMixin(SharedTextMarker)
249
-
250
- function markTextShared(doc, from, to, options, type) {
251
- options = copyObj(options)
252
- options.shared = false
253
- let markers = [markText(doc, from, to, options, type)], primary = markers[0]
254
- let widget = options.widgetNode
255
- linkedDocs(doc, doc => {
256
- if (widget) options.widgetNode = widget.cloneNode(true)
257
- markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type))
258
- for (let i = 0; i < doc.linked.length; ++i)
259
- if (doc.linked[i].isParent) return
260
- primary = lst(markers)
261
- })
262
- return new SharedTextMarker(markers, primary)
263
- }
264
-
265
- export function findSharedMarkers(doc) {
266
- return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), m => m.parent)
267
- }
268
-
269
- export function copySharedMarkers(doc, markers) {
270
- for (let i = 0; i < markers.length; i++) {
271
- let marker = markers[i], pos = marker.find()
272
- let mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to)
273
- if (cmp(mFrom, mTo)) {
274
- let subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type)
275
- marker.markers.push(subMark)
276
- subMark.parent = marker
277
- }
278
- }
279
- }
280
-
281
- export function detachSharedMarkers(markers) {
282
- for (let i = 0; i < markers.length; i++) {
283
- let marker = markers[i], linked = [marker.primary.doc]
284
- linkedDocs(marker.primary.doc, d => linked.push(d))
285
- for (let j = 0; j < marker.markers.length; j++) {
286
- let subMarker = marker.markers[j]
287
- if (indexOf(linked, subMarker.doc) == -1) {
288
- subMarker.parent = null
289
- marker.markers.splice(j--, 1)
290
- }
291
- }
292
- }
293
- }
@@ -1,84 +0,0 @@
1
- import { cmp, copyPos, equalCursorPos, maxPos, minPos } from "../line/pos.js"
2
- import { indexOf } from "../util/misc.js"
3
-
4
- // Selection objects are immutable. A new one is created every time
5
- // the selection changes. A selection is one or more non-overlapping
6
- // (and non-touching) ranges, sorted, and an integer that indicates
7
- // which one is the primary selection (the one that's scrolled into
8
- // view, that getCursor returns, etc).
9
- export class Selection {
10
- constructor(ranges, primIndex) {
11
- this.ranges = ranges
12
- this.primIndex = primIndex
13
- }
14
-
15
- primary() { return this.ranges[this.primIndex] }
16
-
17
- equals(other) {
18
- if (other == this) return true
19
- if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) return false
20
- for (let i = 0; i < this.ranges.length; i++) {
21
- let here = this.ranges[i], there = other.ranges[i]
22
- if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) return false
23
- }
24
- return true
25
- }
26
-
27
- deepCopy() {
28
- let out = []
29
- for (let i = 0; i < this.ranges.length; i++)
30
- out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head))
31
- return new Selection(out, this.primIndex)
32
- }
33
-
34
- somethingSelected() {
35
- for (let i = 0; i < this.ranges.length; i++)
36
- if (!this.ranges[i].empty()) return true
37
- return false
38
- }
39
-
40
- contains(pos, end) {
41
- if (!end) end = pos
42
- for (let i = 0; i < this.ranges.length; i++) {
43
- let range = this.ranges[i]
44
- if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)
45
- return i
46
- }
47
- return -1
48
- }
49
- }
50
-
51
- export class Range {
52
- constructor(anchor, head) {
53
- this.anchor = anchor; this.head = head
54
- }
55
-
56
- from() { return minPos(this.anchor, this.head) }
57
- to() { return maxPos(this.anchor, this.head) }
58
- empty() { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch }
59
- }
60
-
61
- // Take an unsorted, potentially overlapping set of ranges, and
62
- // build a selection out of it. 'Consumes' ranges array (modifying
63
- // it).
64
- export function normalizeSelection(cm, ranges, primIndex) {
65
- let mayTouch = cm && cm.options.selectionsMayTouch
66
- let prim = ranges[primIndex]
67
- ranges.sort((a, b) => cmp(a.from(), b.from()))
68
- primIndex = indexOf(ranges, prim)
69
- for (let i = 1; i < ranges.length; i++) {
70
- let cur = ranges[i], prev = ranges[i - 1]
71
- let diff = cmp(prev.to(), cur.from())
72
- if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {
73
- let from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to())
74
- let inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head
75
- if (i <= primIndex) --primIndex
76
- ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to))
77
- }
78
- }
79
- return new Selection(ranges, primIndex)
80
- }
81
-
82
- export function simpleSelection(anchor, head) {
83
- return new Selection([new Range(anchor, head || anchor)], 0)
84
- }