@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.
- package/package.json +2 -2
- package/package.json~ +33 -0
- package/src/server.mjs +68 -61
- package/www/codemirror/addon/comment/comment.js +0 -211
- package/www/codemirror/addon/comment/continuecomment.js +0 -114
- package/www/codemirror/addon/dialog/dialog.css +0 -32
- package/www/codemirror/addon/dialog/dialog.js +0 -163
- package/www/codemirror/addon/display/autorefresh.js +0 -47
- package/www/codemirror/addon/display/fullscreen.css +0 -6
- package/www/codemirror/addon/display/fullscreen.js +0 -41
- package/www/codemirror/addon/display/panel.js +0 -133
- package/www/codemirror/addon/display/placeholder.js +0 -78
- package/www/codemirror/addon/display/rulers.js +0 -51
- package/www/codemirror/addon/edit/closebrackets.js +0 -201
- package/www/codemirror/addon/edit/closetag.js +0 -185
- package/www/codemirror/addon/edit/continuelist.js +0 -101
- package/www/codemirror/addon/edit/matchbrackets.js +0 -160
- package/www/codemirror/addon/edit/matchtags.js +0 -66
- package/www/codemirror/addon/edit/trailingspace.js +0 -27
- package/www/codemirror/addon/fold/brace-fold.js +0 -119
- package/www/codemirror/addon/fold/comment-fold.js +0 -59
- package/www/codemirror/addon/fold/foldcode.js +0 -159
- package/www/codemirror/addon/fold/foldgutter.css +0 -20
- package/www/codemirror/addon/fold/foldgutter.js +0 -169
- package/www/codemirror/addon/fold/indent-fold.js +0 -48
- package/www/codemirror/addon/fold/markdown-fold.js +0 -49
- package/www/codemirror/addon/fold/xml-fold.js +0 -184
- package/www/codemirror/addon/hint/anyword-hint.js +0 -41
- package/www/codemirror/addon/hint/css-hint.js +0 -66
- package/www/codemirror/addon/hint/html-hint.js +0 -351
- package/www/codemirror/addon/hint/javascript-hint.js +0 -162
- package/www/codemirror/addon/hint/show-hint.css +0 -37
- package/www/codemirror/addon/hint/show-hint.js +0 -523
- package/www/codemirror/addon/hint/sql-hint.js +0 -304
- package/www/codemirror/addon/hint/xml-hint.js +0 -132
- package/www/codemirror/addon/lint/coffeescript-lint.js +0 -47
- package/www/codemirror/addon/lint/css-lint.js +0 -40
- package/www/codemirror/addon/lint/html-lint.js +0 -59
- package/www/codemirror/addon/lint/json-lint.js +0 -40
- package/www/codemirror/addon/lint/yaml-lint.js +0 -41
- package/www/codemirror/addon/merge/merge.css +0 -119
- package/www/codemirror/addon/merge/merge.js +0 -1018
- package/www/codemirror/addon/mode/loadmode.js +0 -66
- package/www/codemirror/addon/mode/multiplex.js +0 -136
- package/www/codemirror/addon/mode/multiplex_test.js +0 -49
- package/www/codemirror/addon/mode/overlay.js +0 -90
- package/www/codemirror/addon/mode/simple.js +0 -216
- package/www/codemirror/addon/runmode/colorize.js +0 -40
- package/www/codemirror/addon/runmode/runmode-standalone.js +0 -334
- package/www/codemirror/addon/runmode/runmode.js +0 -76
- package/www/codemirror/addon/runmode/runmode.node.js +0 -329
- package/www/codemirror/addon/scroll/annotatescrollbar.js +0 -128
- package/www/codemirror/addon/scroll/scrollpastend.js +0 -48
- package/www/codemirror/addon/scroll/simplescrollbars.css +0 -66
- package/www/codemirror/addon/scroll/simplescrollbars.js +0 -152
- package/www/codemirror/addon/search/jump-to-line.js +0 -53
- package/www/codemirror/addon/search/match-highlighter.js +0 -167
- package/www/codemirror/addon/search/matchesonscrollbar.css +0 -8
- package/www/codemirror/addon/search/matchesonscrollbar.js +0 -97
- package/www/codemirror/addon/search/search.js +0 -295
- package/www/codemirror/addon/search/searchcursor.js +0 -305
- package/www/codemirror/addon/selection/active-line.js +0 -72
- package/www/codemirror/addon/selection/mark-selection.js +0 -119
- package/www/codemirror/addon/selection/selection-pointer.js +0 -98
- package/www/codemirror/addon/tern/tern.css +0 -87
- package/www/codemirror/addon/tern/tern.js +0 -756
- package/www/codemirror/addon/tern/worker.js +0 -44
- package/www/codemirror/addon/wrap/hardwrap.js +0 -160
- package/www/codemirror/bin/source-highlight +0 -48
- package/www/codemirror/keymap/emacs.js +0 -545
- package/www/codemirror/keymap/sublime.js +0 -720
- package/www/codemirror/keymap/vim.js +0 -5978
- package/www/codemirror/mode/apl/apl.js +0 -174
- package/www/codemirror/mode/asciiarmor/asciiarmor.js +0 -74
- package/www/codemirror/mode/asn.1/asn.1.js +0 -204
- package/www/codemirror/mode/asterisk/asterisk.js +0 -220
- package/www/codemirror/mode/brainfuck/brainfuck.js +0 -85
- package/www/codemirror/mode/clike/clike.js +0 -940
- package/www/codemirror/mode/clojure/clojure.js +0 -292
- package/www/codemirror/mode/cmake/cmake.js +0 -97
- package/www/codemirror/mode/cobol/cobol.js +0 -255
- package/www/codemirror/mode/coffeescript/coffeescript.js +0 -359
- package/www/codemirror/mode/commonlisp/commonlisp.js +0 -125
- package/www/codemirror/mode/crystal/crystal.js +0 -433
- package/www/codemirror/mode/css/css.js +0 -862
- package/www/codemirror/mode/cypher/cypher.js +0 -152
- package/www/codemirror/mode/d/d.js +0 -223
- package/www/codemirror/mode/dart/dart.js +0 -166
- package/www/codemirror/mode/diff/diff.js +0 -47
- package/www/codemirror/mode/django/django.js +0 -356
- package/www/codemirror/mode/dockerfile/dockerfile.js +0 -211
- package/www/codemirror/mode/dtd/dtd.js +0 -142
- package/www/codemirror/mode/dylan/dylan.js +0 -352
- package/www/codemirror/mode/ebnf/ebnf.js +0 -195
- package/www/codemirror/mode/ecl/ecl.js +0 -206
- package/www/codemirror/mode/eiffel/eiffel.js +0 -160
- package/www/codemirror/mode/elm/elm.js +0 -245
- package/www/codemirror/mode/erlang/erlang.js +0 -619
- package/www/codemirror/mode/factor/factor.js +0 -85
- package/www/codemirror/mode/fcl/fcl.js +0 -173
- package/www/codemirror/mode/forth/forth.js +0 -180
- package/www/codemirror/mode/fortran/fortran.js +0 -188
- package/www/codemirror/mode/gas/gas.js +0 -353
- package/www/codemirror/mode/gfm/gfm.js +0 -129
- package/www/codemirror/mode/gherkin/gherkin.js +0 -178
- package/www/codemirror/mode/go/go.js +0 -187
- package/www/codemirror/mode/groovy/groovy.js +0 -247
- package/www/codemirror/mode/haml/haml.js +0 -161
- package/www/codemirror/mode/handlebars/handlebars.js +0 -70
- package/www/codemirror/mode/haskell/haskell.js +0 -268
- package/www/codemirror/mode/haskell-literate/haskell-literate.js +0 -43
- package/www/codemirror/mode/haxe/haxe.js +0 -515
- package/www/codemirror/mode/htmlembedded/htmlembedded.js +0 -37
- package/www/codemirror/mode/htmlmixed/htmlmixed.js +0 -153
- package/www/codemirror/mode/http/http.js +0 -113
- package/www/codemirror/mode/idl/idl.js +0 -290
- package/www/codemirror/mode/jinja2/jinja2.js +0 -193
- package/www/codemirror/mode/jsx/jsx.js +0 -148
- package/www/codemirror/mode/julia/julia.js +0 -390
- package/www/codemirror/mode/livescript/livescript.js +0 -280
- package/www/codemirror/mode/lua/lua.js +0 -160
- package/www/codemirror/mode/markdown/markdown.js +0 -886
- package/www/codemirror/mode/mathematica/mathematica.js +0 -176
- package/www/codemirror/mode/mbox/mbox.js +0 -129
- package/www/codemirror/mode/meta.js +0 -221
- package/www/codemirror/mode/mirc/mirc.js +0 -193
- package/www/codemirror/mode/mllike/mllike.js +0 -359
- package/www/codemirror/mode/modelica/modelica.js +0 -245
- package/www/codemirror/mode/mscgen/mscgen.js +0 -175
- package/www/codemirror/mode/mumps/mumps.js +0 -148
- package/www/codemirror/mode/nginx/nginx.js +0 -178
- package/www/codemirror/mode/nsis/nsis.js +0 -95
- package/www/codemirror/mode/ntriples/ntriples.js +0 -195
- package/www/codemirror/mode/octave/octave.js +0 -139
- package/www/codemirror/mode/oz/oz.js +0 -252
- package/www/codemirror/mode/pascal/pascal.js +0 -136
- package/www/codemirror/mode/pegjs/pegjs.js +0 -111
- package/www/codemirror/mode/perl/perl.js +0 -836
- package/www/codemirror/mode/php/php.js +0 -234
- package/www/codemirror/mode/pig/pig.js +0 -178
- package/www/codemirror/mode/powershell/powershell.js +0 -398
- package/www/codemirror/mode/properties/properties.js +0 -78
- package/www/codemirror/mode/protobuf/protobuf.js +0 -72
- package/www/codemirror/mode/pug/pug.js +0 -591
- package/www/codemirror/mode/puppet/puppet.js +0 -220
- package/www/codemirror/mode/python/python.js +0 -402
- package/www/codemirror/mode/q/q.js +0 -139
- package/www/codemirror/mode/r/r.js +0 -190
- package/www/codemirror/mode/rpm/changes/index.html +0 -66
- package/www/codemirror/mode/rpm/rpm.js +0 -109
- package/www/codemirror/mode/rst/rst.js +0 -557
- package/www/codemirror/mode/ruby/ruby.js +0 -303
- package/www/codemirror/mode/rust/rust.js +0 -72
- package/www/codemirror/mode/sas/sas.js +0 -303
- package/www/codemirror/mode/sass/sass.js +0 -459
- package/www/codemirror/mode/scheme/scheme.js +0 -284
- package/www/codemirror/mode/shell/shell.js +0 -168
- package/www/codemirror/mode/sieve/sieve.js +0 -193
- package/www/codemirror/mode/slim/slim.js +0 -575
- package/www/codemirror/mode/smalltalk/smalltalk.js +0 -168
- package/www/codemirror/mode/smarty/smarty.js +0 -225
- package/www/codemirror/mode/solr/solr.js +0 -104
- package/www/codemirror/mode/soy/soy.js +0 -665
- package/www/codemirror/mode/sparql/sparql.js +0 -184
- package/www/codemirror/mode/spreadsheet/spreadsheet.js +0 -112
- package/www/codemirror/mode/sql/sql.js +0 -525
- package/www/codemirror/mode/stex/stex.js +0 -264
- package/www/codemirror/mode/stylus/stylus.js +0 -775
- package/www/codemirror/mode/swift/swift.js +0 -221
- package/www/codemirror/mode/tcl/tcl.js +0 -140
- package/www/codemirror/mode/textile/textile.js +0 -469
- package/www/codemirror/mode/tiddlywiki/tiddlywiki.css +0 -14
- package/www/codemirror/mode/tiddlywiki/tiddlywiki.js +0 -308
- package/www/codemirror/mode/tiki/tiki.css +0 -26
- package/www/codemirror/mode/tiki/tiki.js +0 -312
- package/www/codemirror/mode/toml/toml.js +0 -88
- package/www/codemirror/mode/tornado/tornado.js +0 -68
- package/www/codemirror/mode/troff/troff.js +0 -84
- package/www/codemirror/mode/ttcn/ttcn.js +0 -283
- package/www/codemirror/mode/ttcn-cfg/ttcn-cfg.js +0 -214
- package/www/codemirror/mode/turtle/turtle.js +0 -162
- package/www/codemirror/mode/twig/twig.js +0 -141
- package/www/codemirror/mode/vb/vb.js +0 -275
- package/www/codemirror/mode/vbscript/vbscript.js +0 -350
- package/www/codemirror/mode/velocity/velocity.js +0 -202
- package/www/codemirror/mode/verilog/verilog.js +0 -781
- package/www/codemirror/mode/vhdl/vhdl.js +0 -189
- package/www/codemirror/mode/vue/vue.js +0 -77
- package/www/codemirror/mode/wast/wast.js +0 -132
- package/www/codemirror/mode/webidl/webidl.js +0 -195
- package/www/codemirror/mode/xml/xml.js +0 -417
- package/www/codemirror/mode/xquery/xquery.js +0 -448
- package/www/codemirror/mode/yacas/yacas.js +0 -204
- package/www/codemirror/mode/yaml/yaml.js +0 -120
- package/www/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js +0 -72
- package/www/codemirror/mode/z80/z80.js +0 -116
- package/www/codemirror/rollup.config.js +0 -52
- package/www/codemirror/src/addon/runmode/codemirror-standalone.js +0 -24
- package/www/codemirror/src/addon/runmode/codemirror.node.js +0 -21
- package/www/codemirror/src/addon/runmode/runmode-standalone.js +0 -2
- package/www/codemirror/src/addon/runmode/runmode.node.js +0 -2
- package/www/codemirror/src/codemirror.js +0 -3
- package/www/codemirror/src/display/Display.js +0 -116
- package/www/codemirror/src/display/focus.js +0 -50
- package/www/codemirror/src/display/gutters.js +0 -44
- package/www/codemirror/src/display/highlight_worker.js +0 -55
- package/www/codemirror/src/display/line_numbers.js +0 -48
- package/www/codemirror/src/display/mode_state.js +0 -22
- package/www/codemirror/src/display/operations.js +0 -206
- package/www/codemirror/src/display/scroll_events.js +0 -132
- package/www/codemirror/src/display/scrollbars.js +0 -194
- package/www/codemirror/src/display/scrolling.js +0 -186
- package/www/codemirror/src/display/selection.js +0 -173
- package/www/codemirror/src/display/update_display.js +0 -267
- package/www/codemirror/src/display/update_line.js +0 -189
- package/www/codemirror/src/display/update_lines.js +0 -82
- package/www/codemirror/src/display/view_tracking.js +0 -153
- package/www/codemirror/src/edit/CodeMirror.js +0 -217
- package/www/codemirror/src/edit/commands.js +0 -178
- package/www/codemirror/src/edit/deleteNearSelection.js +0 -30
- package/www/codemirror/src/edit/drop_events.js +0 -130
- package/www/codemirror/src/edit/fromTextArea.js +0 -61
- package/www/codemirror/src/edit/global_events.js +0 -45
- package/www/codemirror/src/edit/key_events.js +0 -163
- package/www/codemirror/src/edit/legacy.js +0 -62
- package/www/codemirror/src/edit/main.js +0 -69
- package/www/codemirror/src/edit/methods.js +0 -555
- package/www/codemirror/src/edit/mouse_events.js +0 -417
- package/www/codemirror/src/edit/options.js +0 -194
- package/www/codemirror/src/edit/utils.js +0 -7
- package/www/codemirror/src/input/ContentEditableInput.js +0 -546
- package/www/codemirror/src/input/TextareaInput.js +0 -380
- package/www/codemirror/src/input/indent.js +0 -71
- package/www/codemirror/src/input/input.js +0 -134
- package/www/codemirror/src/input/keymap.js +0 -147
- package/www/codemirror/src/input/keynames.js +0 -17
- package/www/codemirror/src/input/movement.js +0 -111
- package/www/codemirror/src/line/highlight.js +0 -284
- package/www/codemirror/src/line/line_data.js +0 -349
- package/www/codemirror/src/line/pos.js +0 -40
- package/www/codemirror/src/line/saw_special_spans.js +0 -10
- package/www/codemirror/src/line/spans.js +0 -390
- package/www/codemirror/src/line/utils_line.js +0 -85
- package/www/codemirror/src/measurement/position_measurement.js +0 -702
- package/www/codemirror/src/measurement/widgets.js +0 -26
- package/www/codemirror/src/model/Doc.js +0 -436
- package/www/codemirror/src/model/change_measurement.js +0 -61
- package/www/codemirror/src/model/changes.js +0 -339
- package/www/codemirror/src/model/chunk.js +0 -167
- package/www/codemirror/src/model/document_data.js +0 -112
- package/www/codemirror/src/model/history.js +0 -228
- package/www/codemirror/src/model/line_widget.js +0 -78
- package/www/codemirror/src/model/mark_text.js +0 -293
- package/www/codemirror/src/model/selection.js +0 -84
- package/www/codemirror/src/model/selection_updates.js +0 -216
- package/www/codemirror/src/modes.js +0 -96
- package/www/codemirror/src/util/StringStream.js +0 -90
- package/www/codemirror/src/util/bidi.js +0 -215
- package/www/codemirror/src/util/browser.js +0 -34
- package/www/codemirror/src/util/dom.js +0 -101
- package/www/codemirror/src/util/event.js +0 -103
- package/www/codemirror/src/util/feature_detection.js +0 -84
- package/www/codemirror/src/util/misc.js +0 -168
- package/www/codemirror/src/util/operation_group.js +0 -72
- package/www/codemirror/theme/3024-day.css +0 -41
- package/www/codemirror/theme/3024-night.css +0 -39
- package/www/codemirror/theme/abbott.css +0 -268
- package/www/codemirror/theme/abcdef.css +0 -32
- package/www/codemirror/theme/ambiance-mobile.css +0 -5
- package/www/codemirror/theme/ambiance.css +0 -74
- package/www/codemirror/theme/ayu-dark.css +0 -44
- package/www/codemirror/theme/ayu-mirage.css +0 -45
- package/www/codemirror/theme/base16-dark.css +0 -40
- package/www/codemirror/theme/base16-light.css +0 -38
- package/www/codemirror/theme/bespin.css +0 -34
- package/www/codemirror/theme/blackboard.css +0 -32
- package/www/codemirror/theme/cobalt.css +0 -25
- package/www/codemirror/theme/colorforth.css +0 -33
- package/www/codemirror/theme/darcula.css +0 -53
- package/www/codemirror/theme/dracula.css +0 -40
- package/www/codemirror/theme/duotone-dark.css +0 -35
- package/www/codemirror/theme/duotone-light.css +0 -36
- package/www/codemirror/theme/eclipse.css +0 -23
- package/www/codemirror/theme/elegant.css +0 -13
- package/www/codemirror/theme/erlang-dark.css +0 -34
- package/www/codemirror/theme/gruvbox-dark.css +0 -39
- package/www/codemirror/theme/hopscotch.css +0 -34
- package/www/codemirror/theme/icecoder.css +0 -43
- package/www/codemirror/theme/idea.css +0 -42
- package/www/codemirror/theme/isotope.css +0 -34
- package/www/codemirror/theme/juejin.css +0 -30
- package/www/codemirror/theme/lesser-dark.css +0 -47
- package/www/codemirror/theme/liquibyte.css +0 -95
- package/www/codemirror/theme/lucario.css +0 -37
- package/www/codemirror/theme/material-darker.css +0 -135
- package/www/codemirror/theme/material-palenight.css +0 -141
- package/www/codemirror/theme/material.css +0 -141
- package/www/codemirror/theme/mbo.css +0 -37
- package/www/codemirror/theme/mdn-like.css +0 -46
- package/www/codemirror/theme/midnight.css +0 -39
- package/www/codemirror/theme/monokai.css +0 -41
- package/www/codemirror/theme/moxer.css +0 -143
- package/www/codemirror/theme/neat.css +0 -12
- package/www/codemirror/theme/neo.css +0 -43
- package/www/codemirror/theme/night.css +0 -27
- package/www/codemirror/theme/nord.css +0 -42
- package/www/codemirror/theme/oceanic-next.css +0 -46
- package/www/codemirror/theme/panda-syntax.css +0 -85
- package/www/codemirror/theme/paraiso-dark.css +0 -38
- package/www/codemirror/theme/paraiso-light.css +0 -38
- package/www/codemirror/theme/pastel-on-dark.css +0 -52
- package/www/codemirror/theme/railscasts.css +0 -34
- package/www/codemirror/theme/rubyblue.css +0 -25
- package/www/codemirror/theme/seti.css +0 -44
- package/www/codemirror/theme/shadowfox.css +0 -52
- package/www/codemirror/theme/solarized.css +0 -165
- package/www/codemirror/theme/ssms.css +0 -16
- package/www/codemirror/theme/the-matrix.css +0 -30
- package/www/codemirror/theme/tomorrow-night-bright.css +0 -35
- package/www/codemirror/theme/tomorrow-night-eighties.css +0 -38
- package/www/codemirror/theme/ttcn.css +0 -64
- package/www/codemirror/theme/twilight.css +0 -32
- package/www/codemirror/theme/vibrant-ink.css +0 -34
- package/www/codemirror/theme/xq-dark.css +0 -53
- package/www/codemirror/theme/xq-light.css +0 -43
- package/www/codemirror/theme/yeti.css +0 -44
- package/www/codemirror/theme/yonce.css +0 -59
- package/www/codemirror/theme/zenburn.css +0 -37
|
@@ -1,339 +0,0 @@
|
|
|
1
|
-
import { retreatFrontier } from "../line/highlight.js"
|
|
2
|
-
import { startWorker } from "../display/highlight_worker.js"
|
|
3
|
-
import { operation } from "../display/operations.js"
|
|
4
|
-
import { regChange, regLineChange } from "../display/view_tracking.js"
|
|
5
|
-
import { clipLine, clipPos, cmp, Pos } from "../line/pos.js"
|
|
6
|
-
import { sawReadOnlySpans } from "../line/saw_special_spans.js"
|
|
7
|
-
import { lineLength, removeReadOnlyRanges, stretchSpansOverChange, visualLine } from "../line/spans.js"
|
|
8
|
-
import { getBetween, getLine, lineNo } from "../line/utils_line.js"
|
|
9
|
-
import { estimateHeight } from "../measurement/position_measurement.js"
|
|
10
|
-
import { hasHandler, signal, signalCursorActivity } from "../util/event.js"
|
|
11
|
-
import { indexOf, lst, map, sel_dontScroll } from "../util/misc.js"
|
|
12
|
-
import { signalLater } from "../util/operation_group.js"
|
|
13
|
-
|
|
14
|
-
import { changeEnd, computeSelAfterChange } from "./change_measurement.js"
|
|
15
|
-
import { isWholeLineUpdate, linkedDocs, updateDoc } from "./document_data.js"
|
|
16
|
-
import { addChangeToHistory, historyChangeFromChange, mergeOldSpans, pushSelectionToHistory } from "./history.js"
|
|
17
|
-
import { Range, Selection } from "./selection.js"
|
|
18
|
-
import { setSelection, setSelectionNoUndo, skipAtomic } from "./selection_updates.js"
|
|
19
|
-
|
|
20
|
-
// UPDATING
|
|
21
|
-
|
|
22
|
-
// Allow "beforeChange" event handlers to influence a change
|
|
23
|
-
function filterChange(doc, change, update) {
|
|
24
|
-
let obj = {
|
|
25
|
-
canceled: false,
|
|
26
|
-
from: change.from,
|
|
27
|
-
to: change.to,
|
|
28
|
-
text: change.text,
|
|
29
|
-
origin: change.origin,
|
|
30
|
-
cancel: () => obj.canceled = true
|
|
31
|
-
}
|
|
32
|
-
if (update) obj.update = (from, to, text, origin) => {
|
|
33
|
-
if (from) obj.from = clipPos(doc, from)
|
|
34
|
-
if (to) obj.to = clipPos(doc, to)
|
|
35
|
-
if (text) obj.text = text
|
|
36
|
-
if (origin !== undefined) obj.origin = origin
|
|
37
|
-
}
|
|
38
|
-
signal(doc, "beforeChange", doc, obj)
|
|
39
|
-
if (doc.cm) signal(doc.cm, "beforeChange", doc.cm, obj)
|
|
40
|
-
|
|
41
|
-
if (obj.canceled) {
|
|
42
|
-
if (doc.cm) doc.cm.curOp.updateInput = 2
|
|
43
|
-
return null
|
|
44
|
-
}
|
|
45
|
-
return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// Apply a change to a document, and add it to the document's
|
|
49
|
-
// history, and propagating it to all linked documents.
|
|
50
|
-
export function makeChange(doc, change, ignoreReadOnly) {
|
|
51
|
-
if (doc.cm) {
|
|
52
|
-
if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly)
|
|
53
|
-
if (doc.cm.state.suppressEdits) return
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) {
|
|
57
|
-
change = filterChange(doc, change, true)
|
|
58
|
-
if (!change) return
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// Possibly split or suppress the update based on the presence
|
|
62
|
-
// of read-only spans in its range.
|
|
63
|
-
let split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to)
|
|
64
|
-
if (split) {
|
|
65
|
-
for (let i = split.length - 1; i >= 0; --i)
|
|
66
|
-
makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text, origin: change.origin})
|
|
67
|
-
} else {
|
|
68
|
-
makeChangeInner(doc, change)
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
function makeChangeInner(doc, change) {
|
|
73
|
-
if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) return
|
|
74
|
-
let selAfter = computeSelAfterChange(doc, change)
|
|
75
|
-
addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN)
|
|
76
|
-
|
|
77
|
-
makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change))
|
|
78
|
-
let rebased = []
|
|
79
|
-
|
|
80
|
-
linkedDocs(doc, (doc, sharedHist) => {
|
|
81
|
-
if (!sharedHist && indexOf(rebased, doc.history) == -1) {
|
|
82
|
-
rebaseHist(doc.history, change)
|
|
83
|
-
rebased.push(doc.history)
|
|
84
|
-
}
|
|
85
|
-
makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change))
|
|
86
|
-
})
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// Revert a change stored in a document's history.
|
|
90
|
-
export function makeChangeFromHistory(doc, type, allowSelectionOnly) {
|
|
91
|
-
let suppress = doc.cm && doc.cm.state.suppressEdits
|
|
92
|
-
if (suppress && !allowSelectionOnly) return
|
|
93
|
-
|
|
94
|
-
let hist = doc.history, event, selAfter = doc.sel
|
|
95
|
-
let source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done
|
|
96
|
-
|
|
97
|
-
// Verify that there is a useable event (so that ctrl-z won't
|
|
98
|
-
// needlessly clear selection events)
|
|
99
|
-
let i = 0
|
|
100
|
-
for (; i < source.length; i++) {
|
|
101
|
-
event = source[i]
|
|
102
|
-
if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)
|
|
103
|
-
break
|
|
104
|
-
}
|
|
105
|
-
if (i == source.length) return
|
|
106
|
-
hist.lastOrigin = hist.lastSelOrigin = null
|
|
107
|
-
|
|
108
|
-
for (;;) {
|
|
109
|
-
event = source.pop()
|
|
110
|
-
if (event.ranges) {
|
|
111
|
-
pushSelectionToHistory(event, dest)
|
|
112
|
-
if (allowSelectionOnly && !event.equals(doc.sel)) {
|
|
113
|
-
setSelection(doc, event, {clearRedo: false})
|
|
114
|
-
return
|
|
115
|
-
}
|
|
116
|
-
selAfter = event
|
|
117
|
-
} else if (suppress) {
|
|
118
|
-
source.push(event)
|
|
119
|
-
return
|
|
120
|
-
} else break
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// Build up a reverse change object to add to the opposite history
|
|
124
|
-
// stack (redo when undoing, and vice versa).
|
|
125
|
-
let antiChanges = []
|
|
126
|
-
pushSelectionToHistory(selAfter, dest)
|
|
127
|
-
dest.push({changes: antiChanges, generation: hist.generation})
|
|
128
|
-
hist.generation = event.generation || ++hist.maxGeneration
|
|
129
|
-
|
|
130
|
-
let filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")
|
|
131
|
-
|
|
132
|
-
for (let i = event.changes.length - 1; i >= 0; --i) {
|
|
133
|
-
let change = event.changes[i]
|
|
134
|
-
change.origin = type
|
|
135
|
-
if (filter && !filterChange(doc, change, false)) {
|
|
136
|
-
source.length = 0
|
|
137
|
-
return
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
antiChanges.push(historyChangeFromChange(doc, change))
|
|
141
|
-
|
|
142
|
-
let after = i ? computeSelAfterChange(doc, change) : lst(source)
|
|
143
|
-
makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change))
|
|
144
|
-
if (!i && doc.cm) doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)})
|
|
145
|
-
let rebased = []
|
|
146
|
-
|
|
147
|
-
// Propagate to the linked documents
|
|
148
|
-
linkedDocs(doc, (doc, sharedHist) => {
|
|
149
|
-
if (!sharedHist && indexOf(rebased, doc.history) == -1) {
|
|
150
|
-
rebaseHist(doc.history, change)
|
|
151
|
-
rebased.push(doc.history)
|
|
152
|
-
}
|
|
153
|
-
makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change))
|
|
154
|
-
})
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
// Sub-views need their line numbers shifted when text is added
|
|
159
|
-
// above or below them in the parent document.
|
|
160
|
-
function shiftDoc(doc, distance) {
|
|
161
|
-
if (distance == 0) return
|
|
162
|
-
doc.first += distance
|
|
163
|
-
doc.sel = new Selection(map(doc.sel.ranges, range => new Range(
|
|
164
|
-
Pos(range.anchor.line + distance, range.anchor.ch),
|
|
165
|
-
Pos(range.head.line + distance, range.head.ch)
|
|
166
|
-
)), doc.sel.primIndex)
|
|
167
|
-
if (doc.cm) {
|
|
168
|
-
regChange(doc.cm, doc.first, doc.first - distance, distance)
|
|
169
|
-
for (let d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)
|
|
170
|
-
regLineChange(doc.cm, l, "gutter")
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// More lower-level change function, handling only a single document
|
|
175
|
-
// (not linked ones).
|
|
176
|
-
function makeChangeSingleDoc(doc, change, selAfter, spans) {
|
|
177
|
-
if (doc.cm && !doc.cm.curOp)
|
|
178
|
-
return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans)
|
|
179
|
-
|
|
180
|
-
if (change.to.line < doc.first) {
|
|
181
|
-
shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line))
|
|
182
|
-
return
|
|
183
|
-
}
|
|
184
|
-
if (change.from.line > doc.lastLine()) return
|
|
185
|
-
|
|
186
|
-
// Clip the change to the size of this doc
|
|
187
|
-
if (change.from.line < doc.first) {
|
|
188
|
-
let shift = change.text.length - 1 - (doc.first - change.from.line)
|
|
189
|
-
shiftDoc(doc, shift)
|
|
190
|
-
change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),
|
|
191
|
-
text: [lst(change.text)], origin: change.origin}
|
|
192
|
-
}
|
|
193
|
-
let last = doc.lastLine()
|
|
194
|
-
if (change.to.line > last) {
|
|
195
|
-
change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),
|
|
196
|
-
text: [change.text[0]], origin: change.origin}
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
change.removed = getBetween(doc, change.from, change.to)
|
|
200
|
-
|
|
201
|
-
if (!selAfter) selAfter = computeSelAfterChange(doc, change)
|
|
202
|
-
if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans)
|
|
203
|
-
else updateDoc(doc, change, spans)
|
|
204
|
-
setSelectionNoUndo(doc, selAfter, sel_dontScroll)
|
|
205
|
-
|
|
206
|
-
if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0)))
|
|
207
|
-
doc.cantEdit = false
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
// Handle the interaction of a change to a document with the editor
|
|
211
|
-
// that this document is part of.
|
|
212
|
-
function makeChangeSingleDocInEditor(cm, change, spans) {
|
|
213
|
-
let doc = cm.doc, display = cm.display, from = change.from, to = change.to
|
|
214
|
-
|
|
215
|
-
let recomputeMaxLength = false, checkWidthStart = from.line
|
|
216
|
-
if (!cm.options.lineWrapping) {
|
|
217
|
-
checkWidthStart = lineNo(visualLine(getLine(doc, from.line)))
|
|
218
|
-
doc.iter(checkWidthStart, to.line + 1, line => {
|
|
219
|
-
if (line == display.maxLine) {
|
|
220
|
-
recomputeMaxLength = true
|
|
221
|
-
return true
|
|
222
|
-
}
|
|
223
|
-
})
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
if (doc.sel.contains(change.from, change.to) > -1)
|
|
227
|
-
signalCursorActivity(cm)
|
|
228
|
-
|
|
229
|
-
updateDoc(doc, change, spans, estimateHeight(cm))
|
|
230
|
-
|
|
231
|
-
if (!cm.options.lineWrapping) {
|
|
232
|
-
doc.iter(checkWidthStart, from.line + change.text.length, line => {
|
|
233
|
-
let len = lineLength(line)
|
|
234
|
-
if (len > display.maxLineLength) {
|
|
235
|
-
display.maxLine = line
|
|
236
|
-
display.maxLineLength = len
|
|
237
|
-
display.maxLineChanged = true
|
|
238
|
-
recomputeMaxLength = false
|
|
239
|
-
}
|
|
240
|
-
})
|
|
241
|
-
if (recomputeMaxLength) cm.curOp.updateMaxLine = true
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
retreatFrontier(doc, from.line)
|
|
245
|
-
startWorker(cm, 400)
|
|
246
|
-
|
|
247
|
-
let lendiff = change.text.length - (to.line - from.line) - 1
|
|
248
|
-
// Remember that these lines changed, for updating the display
|
|
249
|
-
if (change.full)
|
|
250
|
-
regChange(cm)
|
|
251
|
-
else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))
|
|
252
|
-
regLineChange(cm, from.line, "text")
|
|
253
|
-
else
|
|
254
|
-
regChange(cm, from.line, to.line + 1, lendiff)
|
|
255
|
-
|
|
256
|
-
let changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change")
|
|
257
|
-
if (changeHandler || changesHandler) {
|
|
258
|
-
let obj = {
|
|
259
|
-
from: from, to: to,
|
|
260
|
-
text: change.text,
|
|
261
|
-
removed: change.removed,
|
|
262
|
-
origin: change.origin
|
|
263
|
-
}
|
|
264
|
-
if (changeHandler) signalLater(cm, "change", cm, obj)
|
|
265
|
-
if (changesHandler) (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj)
|
|
266
|
-
}
|
|
267
|
-
cm.display.selForContextMenu = null
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
export function replaceRange(doc, code, from, to, origin) {
|
|
271
|
-
if (!to) to = from
|
|
272
|
-
if (cmp(to, from) < 0) [from, to] = [to, from]
|
|
273
|
-
if (typeof code == "string") code = doc.splitLines(code)
|
|
274
|
-
makeChange(doc, {from, to, text: code, origin})
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
// Rebasing/resetting history to deal with externally-sourced changes
|
|
278
|
-
|
|
279
|
-
function rebaseHistSelSingle(pos, from, to, diff) {
|
|
280
|
-
if (to < pos.line) {
|
|
281
|
-
pos.line += diff
|
|
282
|
-
} else if (from < pos.line) {
|
|
283
|
-
pos.line = from
|
|
284
|
-
pos.ch = 0
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
// Tries to rebase an array of history events given a change in the
|
|
289
|
-
// document. If the change touches the same lines as the event, the
|
|
290
|
-
// event, and everything 'behind' it, is discarded. If the change is
|
|
291
|
-
// before the event, the event's positions are updated. Uses a
|
|
292
|
-
// copy-on-write scheme for the positions, to avoid having to
|
|
293
|
-
// reallocate them all on every rebase, but also avoid problems with
|
|
294
|
-
// shared position objects being unsafely updated.
|
|
295
|
-
function rebaseHistArray(array, from, to, diff) {
|
|
296
|
-
for (let i = 0; i < array.length; ++i) {
|
|
297
|
-
let sub = array[i], ok = true
|
|
298
|
-
if (sub.ranges) {
|
|
299
|
-
if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true }
|
|
300
|
-
for (let j = 0; j < sub.ranges.length; j++) {
|
|
301
|
-
rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff)
|
|
302
|
-
rebaseHistSelSingle(sub.ranges[j].head, from, to, diff)
|
|
303
|
-
}
|
|
304
|
-
continue
|
|
305
|
-
}
|
|
306
|
-
for (let j = 0; j < sub.changes.length; ++j) {
|
|
307
|
-
let cur = sub.changes[j]
|
|
308
|
-
if (to < cur.from.line) {
|
|
309
|
-
cur.from = Pos(cur.from.line + diff, cur.from.ch)
|
|
310
|
-
cur.to = Pos(cur.to.line + diff, cur.to.ch)
|
|
311
|
-
} else if (from <= cur.to.line) {
|
|
312
|
-
ok = false
|
|
313
|
-
break
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
if (!ok) {
|
|
317
|
-
array.splice(0, i + 1)
|
|
318
|
-
i = 0
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
function rebaseHist(hist, change) {
|
|
324
|
-
let from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1
|
|
325
|
-
rebaseHistArray(hist.done, from, to, diff)
|
|
326
|
-
rebaseHistArray(hist.undone, from, to, diff)
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
// Utility for applying a change to a line by handle or number,
|
|
330
|
-
// returning the number and optionally registering the line as
|
|
331
|
-
// changed.
|
|
332
|
-
export function changeLine(doc, handle, changeType, op) {
|
|
333
|
-
let no = handle, line = handle
|
|
334
|
-
if (typeof handle == "number") line = getLine(doc, clipLine(doc, handle))
|
|
335
|
-
else no = lineNo(handle)
|
|
336
|
-
if (no == null) return null
|
|
337
|
-
if (op(line, no) && doc.cm) regLineChange(doc.cm, no, changeType)
|
|
338
|
-
return line
|
|
339
|
-
}
|
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
import { cleanUpLine } from "../line/line_data.js"
|
|
2
|
-
import { indexOf } from "../util/misc.js"
|
|
3
|
-
import { signalLater } from "../util/operation_group.js"
|
|
4
|
-
|
|
5
|
-
// The document is represented as a BTree consisting of leaves, with
|
|
6
|
-
// chunk of lines in them, and branches, with up to ten leaves or
|
|
7
|
-
// other branch nodes below them. The top node is always a branch
|
|
8
|
-
// node, and is the document object itself (meaning it has
|
|
9
|
-
// additional methods and properties).
|
|
10
|
-
//
|
|
11
|
-
// All nodes have parent links. The tree is used both to go from
|
|
12
|
-
// line numbers to line objects, and to go from objects to numbers.
|
|
13
|
-
// It also indexes by height, and is used to convert between height
|
|
14
|
-
// and line object, and to find the total height of the document.
|
|
15
|
-
//
|
|
16
|
-
// See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html
|
|
17
|
-
|
|
18
|
-
export function LeafChunk(lines) {
|
|
19
|
-
this.lines = lines
|
|
20
|
-
this.parent = null
|
|
21
|
-
let height = 0
|
|
22
|
-
for (let i = 0; i < lines.length; ++i) {
|
|
23
|
-
lines[i].parent = this
|
|
24
|
-
height += lines[i].height
|
|
25
|
-
}
|
|
26
|
-
this.height = height
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
LeafChunk.prototype = {
|
|
30
|
-
chunkSize() { return this.lines.length },
|
|
31
|
-
|
|
32
|
-
// Remove the n lines at offset 'at'.
|
|
33
|
-
removeInner(at, n) {
|
|
34
|
-
for (let i = at, e = at + n; i < e; ++i) {
|
|
35
|
-
let line = this.lines[i]
|
|
36
|
-
this.height -= line.height
|
|
37
|
-
cleanUpLine(line)
|
|
38
|
-
signalLater(line, "delete")
|
|
39
|
-
}
|
|
40
|
-
this.lines.splice(at, n)
|
|
41
|
-
},
|
|
42
|
-
|
|
43
|
-
// Helper used to collapse a small branch into a single leaf.
|
|
44
|
-
collapse(lines) {
|
|
45
|
-
lines.push.apply(lines, this.lines)
|
|
46
|
-
},
|
|
47
|
-
|
|
48
|
-
// Insert the given array of lines at offset 'at', count them as
|
|
49
|
-
// having the given height.
|
|
50
|
-
insertInner(at, lines, height) {
|
|
51
|
-
this.height += height
|
|
52
|
-
this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at))
|
|
53
|
-
for (let i = 0; i < lines.length; ++i) lines[i].parent = this
|
|
54
|
-
},
|
|
55
|
-
|
|
56
|
-
// Used to iterate over a part of the tree.
|
|
57
|
-
iterN(at, n, op) {
|
|
58
|
-
for (let e = at + n; at < e; ++at)
|
|
59
|
-
if (op(this.lines[at])) return true
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export function BranchChunk(children) {
|
|
64
|
-
this.children = children
|
|
65
|
-
let size = 0, height = 0
|
|
66
|
-
for (let i = 0; i < children.length; ++i) {
|
|
67
|
-
let ch = children[i]
|
|
68
|
-
size += ch.chunkSize(); height += ch.height
|
|
69
|
-
ch.parent = this
|
|
70
|
-
}
|
|
71
|
-
this.size = size
|
|
72
|
-
this.height = height
|
|
73
|
-
this.parent = null
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
BranchChunk.prototype = {
|
|
77
|
-
chunkSize() { return this.size },
|
|
78
|
-
|
|
79
|
-
removeInner(at, n) {
|
|
80
|
-
this.size -= n
|
|
81
|
-
for (let i = 0; i < this.children.length; ++i) {
|
|
82
|
-
let child = this.children[i], sz = child.chunkSize()
|
|
83
|
-
if (at < sz) {
|
|
84
|
-
let rm = Math.min(n, sz - at), oldHeight = child.height
|
|
85
|
-
child.removeInner(at, rm)
|
|
86
|
-
this.height -= oldHeight - child.height
|
|
87
|
-
if (sz == rm) { this.children.splice(i--, 1); child.parent = null }
|
|
88
|
-
if ((n -= rm) == 0) break
|
|
89
|
-
at = 0
|
|
90
|
-
} else at -= sz
|
|
91
|
-
}
|
|
92
|
-
// If the result is smaller than 25 lines, ensure that it is a
|
|
93
|
-
// single leaf node.
|
|
94
|
-
if (this.size - n < 25 &&
|
|
95
|
-
(this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {
|
|
96
|
-
let lines = []
|
|
97
|
-
this.collapse(lines)
|
|
98
|
-
this.children = [new LeafChunk(lines)]
|
|
99
|
-
this.children[0].parent = this
|
|
100
|
-
}
|
|
101
|
-
},
|
|
102
|
-
|
|
103
|
-
collapse(lines) {
|
|
104
|
-
for (let i = 0; i < this.children.length; ++i) this.children[i].collapse(lines)
|
|
105
|
-
},
|
|
106
|
-
|
|
107
|
-
insertInner(at, lines, height) {
|
|
108
|
-
this.size += lines.length
|
|
109
|
-
this.height += height
|
|
110
|
-
for (let i = 0; i < this.children.length; ++i) {
|
|
111
|
-
let child = this.children[i], sz = child.chunkSize()
|
|
112
|
-
if (at <= sz) {
|
|
113
|
-
child.insertInner(at, lines, height)
|
|
114
|
-
if (child.lines && child.lines.length > 50) {
|
|
115
|
-
// To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.
|
|
116
|
-
// Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.
|
|
117
|
-
let remaining = child.lines.length % 25 + 25
|
|
118
|
-
for (let pos = remaining; pos < child.lines.length;) {
|
|
119
|
-
let leaf = new LeafChunk(child.lines.slice(pos, pos += 25))
|
|
120
|
-
child.height -= leaf.height
|
|
121
|
-
this.children.splice(++i, 0, leaf)
|
|
122
|
-
leaf.parent = this
|
|
123
|
-
}
|
|
124
|
-
child.lines = child.lines.slice(0, remaining)
|
|
125
|
-
this.maybeSpill()
|
|
126
|
-
}
|
|
127
|
-
break
|
|
128
|
-
}
|
|
129
|
-
at -= sz
|
|
130
|
-
}
|
|
131
|
-
},
|
|
132
|
-
|
|
133
|
-
// When a node has grown, check whether it should be split.
|
|
134
|
-
maybeSpill() {
|
|
135
|
-
if (this.children.length <= 10) return
|
|
136
|
-
let me = this
|
|
137
|
-
do {
|
|
138
|
-
let spilled = me.children.splice(me.children.length - 5, 5)
|
|
139
|
-
let sibling = new BranchChunk(spilled)
|
|
140
|
-
if (!me.parent) { // Become the parent node
|
|
141
|
-
let copy = new BranchChunk(me.children)
|
|
142
|
-
copy.parent = me
|
|
143
|
-
me.children = [copy, sibling]
|
|
144
|
-
me = copy
|
|
145
|
-
} else {
|
|
146
|
-
me.size -= sibling.size
|
|
147
|
-
me.height -= sibling.height
|
|
148
|
-
let myIndex = indexOf(me.parent.children, me)
|
|
149
|
-
me.parent.children.splice(myIndex + 1, 0, sibling)
|
|
150
|
-
}
|
|
151
|
-
sibling.parent = me.parent
|
|
152
|
-
} while (me.children.length > 10)
|
|
153
|
-
me.parent.maybeSpill()
|
|
154
|
-
},
|
|
155
|
-
|
|
156
|
-
iterN(at, n, op) {
|
|
157
|
-
for (let i = 0; i < this.children.length; ++i) {
|
|
158
|
-
let child = this.children[i], sz = child.chunkSize()
|
|
159
|
-
if (at < sz) {
|
|
160
|
-
let used = Math.min(n, sz - at)
|
|
161
|
-
if (child.iterN(at, used, op)) return true
|
|
162
|
-
if ((n -= used) == 0) break
|
|
163
|
-
at = 0
|
|
164
|
-
} else at -= sz
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { loadMode } from "../display/mode_state.js"
|
|
2
|
-
import { runInOp } from "../display/operations.js"
|
|
3
|
-
import { regChange } from "../display/view_tracking.js"
|
|
4
|
-
import { Line, updateLine } from "../line/line_data.js"
|
|
5
|
-
import { findMaxLine } from "../line/spans.js"
|
|
6
|
-
import { getLine } from "../line/utils_line.js"
|
|
7
|
-
import { estimateLineHeights } from "../measurement/position_measurement.js"
|
|
8
|
-
import { addClass, rmClass } from "../util/dom.js"
|
|
9
|
-
import { lst } from "../util/misc.js"
|
|
10
|
-
import { signalLater } from "../util/operation_group.js"
|
|
11
|
-
|
|
12
|
-
// DOCUMENT DATA STRUCTURE
|
|
13
|
-
|
|
14
|
-
// By default, updates that start and end at the beginning of a line
|
|
15
|
-
// are treated specially, in order to make the association of line
|
|
16
|
-
// widgets and marker elements with the text behave more intuitive.
|
|
17
|
-
export function isWholeLineUpdate(doc, change) {
|
|
18
|
-
return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" &&
|
|
19
|
-
(!doc.cm || doc.cm.options.wholeLineUpdateBefore)
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// Perform a change on the document data structure.
|
|
23
|
-
export function updateDoc(doc, change, markedSpans, estimateHeight) {
|
|
24
|
-
function spansFor(n) {return markedSpans ? markedSpans[n] : null}
|
|
25
|
-
function update(line, text, spans) {
|
|
26
|
-
updateLine(line, text, spans, estimateHeight)
|
|
27
|
-
signalLater(line, "change", line, change)
|
|
28
|
-
}
|
|
29
|
-
function linesFor(start, end) {
|
|
30
|
-
let result = []
|
|
31
|
-
for (let i = start; i < end; ++i)
|
|
32
|
-
result.push(new Line(text[i], spansFor(i), estimateHeight))
|
|
33
|
-
return result
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
let from = change.from, to = change.to, text = change.text
|
|
37
|
-
let firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line)
|
|
38
|
-
let lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line
|
|
39
|
-
|
|
40
|
-
// Adjust the line structure
|
|
41
|
-
if (change.full) {
|
|
42
|
-
doc.insert(0, linesFor(0, text.length))
|
|
43
|
-
doc.remove(text.length, doc.size - text.length)
|
|
44
|
-
} else if (isWholeLineUpdate(doc, change)) {
|
|
45
|
-
// This is a whole-line replace. Treated specially to make
|
|
46
|
-
// sure line objects move the way they are supposed to.
|
|
47
|
-
let added = linesFor(0, text.length - 1)
|
|
48
|
-
update(lastLine, lastLine.text, lastSpans)
|
|
49
|
-
if (nlines) doc.remove(from.line, nlines)
|
|
50
|
-
if (added.length) doc.insert(from.line, added)
|
|
51
|
-
} else if (firstLine == lastLine) {
|
|
52
|
-
if (text.length == 1) {
|
|
53
|
-
update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans)
|
|
54
|
-
} else {
|
|
55
|
-
let added = linesFor(1, text.length - 1)
|
|
56
|
-
added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight))
|
|
57
|
-
update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0))
|
|
58
|
-
doc.insert(from.line + 1, added)
|
|
59
|
-
}
|
|
60
|
-
} else if (text.length == 1) {
|
|
61
|
-
update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0))
|
|
62
|
-
doc.remove(from.line + 1, nlines)
|
|
63
|
-
} else {
|
|
64
|
-
update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0))
|
|
65
|
-
update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans)
|
|
66
|
-
let added = linesFor(1, text.length - 1)
|
|
67
|
-
if (nlines > 1) doc.remove(from.line + 1, nlines - 1)
|
|
68
|
-
doc.insert(from.line + 1, added)
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
signalLater(doc, "change", doc, change)
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// Call f for all linked documents.
|
|
75
|
-
export function linkedDocs(doc, f, sharedHistOnly) {
|
|
76
|
-
function propagate(doc, skip, sharedHist) {
|
|
77
|
-
if (doc.linked) for (let i = 0; i < doc.linked.length; ++i) {
|
|
78
|
-
let rel = doc.linked[i]
|
|
79
|
-
if (rel.doc == skip) continue
|
|
80
|
-
let shared = sharedHist && rel.sharedHist
|
|
81
|
-
if (sharedHistOnly && !shared) continue
|
|
82
|
-
f(rel.doc, shared)
|
|
83
|
-
propagate(rel.doc, doc, shared)
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
propagate(doc, null, true)
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// Attach a document to an editor.
|
|
90
|
-
export function attachDoc(cm, doc) {
|
|
91
|
-
if (doc.cm) throw new Error("This document is already in use.")
|
|
92
|
-
cm.doc = doc
|
|
93
|
-
doc.cm = cm
|
|
94
|
-
estimateLineHeights(cm)
|
|
95
|
-
loadMode(cm)
|
|
96
|
-
setDirectionClass(cm)
|
|
97
|
-
cm.options.direction = doc.direction
|
|
98
|
-
if (!cm.options.lineWrapping) findMaxLine(cm)
|
|
99
|
-
cm.options.mode = doc.modeOption
|
|
100
|
-
regChange(cm)
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
function setDirectionClass(cm) {
|
|
104
|
-
;(cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl")
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
export function directionChanged(cm) {
|
|
108
|
-
runInOp(cm, () => {
|
|
109
|
-
setDirectionClass(cm)
|
|
110
|
-
regChange(cm)
|
|
111
|
-
})
|
|
112
|
-
}
|