@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.
- package/package.json +2 -2
- package/package.json~ +33 -0
- package/src/commands.mjs +1 -0
- package/src/server.mjs +69 -62
- package/src/worker-command-init.mjs +2 -1
- package/src/worker-command.mjs +3 -3
- 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,189 +0,0 @@
|
|
|
1
|
-
import { buildLineContent } from "../line/line_data.js"
|
|
2
|
-
import { lineNumberFor } from "../line/utils_line.js"
|
|
3
|
-
import { ie, ie_version } from "../util/browser.js"
|
|
4
|
-
import { elt, classTest } from "../util/dom.js"
|
|
5
|
-
import { signalLater } from "../util/operation_group.js"
|
|
6
|
-
|
|
7
|
-
// When an aspect of a line changes, a string is added to
|
|
8
|
-
// lineView.changes. This updates the relevant part of the line's
|
|
9
|
-
// DOM structure.
|
|
10
|
-
export function updateLineForChanges(cm, lineView, lineN, dims) {
|
|
11
|
-
for (let j = 0; j < lineView.changes.length; j++) {
|
|
12
|
-
let type = lineView.changes[j]
|
|
13
|
-
if (type == "text") updateLineText(cm, lineView)
|
|
14
|
-
else if (type == "gutter") updateLineGutter(cm, lineView, lineN, dims)
|
|
15
|
-
else if (type == "class") updateLineClasses(cm, lineView)
|
|
16
|
-
else if (type == "widget") updateLineWidgets(cm, lineView, dims)
|
|
17
|
-
}
|
|
18
|
-
lineView.changes = null
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
// Lines with gutter elements, widgets or a background class need to
|
|
22
|
-
// be wrapped, and have the extra elements added to the wrapper div
|
|
23
|
-
function ensureLineWrapped(lineView) {
|
|
24
|
-
if (lineView.node == lineView.text) {
|
|
25
|
-
lineView.node = elt("div", null, null, "position: relative")
|
|
26
|
-
if (lineView.text.parentNode)
|
|
27
|
-
lineView.text.parentNode.replaceChild(lineView.node, lineView.text)
|
|
28
|
-
lineView.node.appendChild(lineView.text)
|
|
29
|
-
if (ie && ie_version < 8) lineView.node.style.zIndex = 2
|
|
30
|
-
}
|
|
31
|
-
return lineView.node
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function updateLineBackground(cm, lineView) {
|
|
35
|
-
let cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass
|
|
36
|
-
if (cls) cls += " CodeMirror-linebackground"
|
|
37
|
-
if (lineView.background) {
|
|
38
|
-
if (cls) lineView.background.className = cls
|
|
39
|
-
else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null }
|
|
40
|
-
} else if (cls) {
|
|
41
|
-
let wrap = ensureLineWrapped(lineView)
|
|
42
|
-
lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild)
|
|
43
|
-
cm.display.input.setUneditable(lineView.background)
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// Wrapper around buildLineContent which will reuse the structure
|
|
48
|
-
// in display.externalMeasured when possible.
|
|
49
|
-
function getLineContent(cm, lineView) {
|
|
50
|
-
let ext = cm.display.externalMeasured
|
|
51
|
-
if (ext && ext.line == lineView.line) {
|
|
52
|
-
cm.display.externalMeasured = null
|
|
53
|
-
lineView.measure = ext.measure
|
|
54
|
-
return ext.built
|
|
55
|
-
}
|
|
56
|
-
return buildLineContent(cm, lineView)
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// Redraw the line's text. Interacts with the background and text
|
|
60
|
-
// classes because the mode may output tokens that influence these
|
|
61
|
-
// classes.
|
|
62
|
-
function updateLineText(cm, lineView) {
|
|
63
|
-
let cls = lineView.text.className
|
|
64
|
-
let built = getLineContent(cm, lineView)
|
|
65
|
-
if (lineView.text == lineView.node) lineView.node = built.pre
|
|
66
|
-
lineView.text.parentNode.replaceChild(built.pre, lineView.text)
|
|
67
|
-
lineView.text = built.pre
|
|
68
|
-
if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {
|
|
69
|
-
lineView.bgClass = built.bgClass
|
|
70
|
-
lineView.textClass = built.textClass
|
|
71
|
-
updateLineClasses(cm, lineView)
|
|
72
|
-
} else if (cls) {
|
|
73
|
-
lineView.text.className = cls
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
function updateLineClasses(cm, lineView) {
|
|
78
|
-
updateLineBackground(cm, lineView)
|
|
79
|
-
if (lineView.line.wrapClass)
|
|
80
|
-
ensureLineWrapped(lineView).className = lineView.line.wrapClass
|
|
81
|
-
else if (lineView.node != lineView.text)
|
|
82
|
-
lineView.node.className = ""
|
|
83
|
-
let textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass
|
|
84
|
-
lineView.text.className = textClass || ""
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function updateLineGutter(cm, lineView, lineN, dims) {
|
|
88
|
-
if (lineView.gutter) {
|
|
89
|
-
lineView.node.removeChild(lineView.gutter)
|
|
90
|
-
lineView.gutter = null
|
|
91
|
-
}
|
|
92
|
-
if (lineView.gutterBackground) {
|
|
93
|
-
lineView.node.removeChild(lineView.gutterBackground)
|
|
94
|
-
lineView.gutterBackground = null
|
|
95
|
-
}
|
|
96
|
-
if (lineView.line.gutterClass) {
|
|
97
|
-
let wrap = ensureLineWrapped(lineView)
|
|
98
|
-
lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass,
|
|
99
|
-
`left: ${cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth}px; width: ${dims.gutterTotalWidth}px`)
|
|
100
|
-
cm.display.input.setUneditable(lineView.gutterBackground)
|
|
101
|
-
wrap.insertBefore(lineView.gutterBackground, lineView.text)
|
|
102
|
-
}
|
|
103
|
-
let markers = lineView.line.gutterMarkers
|
|
104
|
-
if (cm.options.lineNumbers || markers) {
|
|
105
|
-
let wrap = ensureLineWrapped(lineView)
|
|
106
|
-
let gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", `left: ${cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth}px`)
|
|
107
|
-
gutterWrap.setAttribute("aria-hidden", "true")
|
|
108
|
-
cm.display.input.setUneditable(gutterWrap)
|
|
109
|
-
wrap.insertBefore(gutterWrap, lineView.text)
|
|
110
|
-
if (lineView.line.gutterClass)
|
|
111
|
-
gutterWrap.className += " " + lineView.line.gutterClass
|
|
112
|
-
if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"]))
|
|
113
|
-
lineView.lineNumber = gutterWrap.appendChild(
|
|
114
|
-
elt("div", lineNumberFor(cm.options, lineN),
|
|
115
|
-
"CodeMirror-linenumber CodeMirror-gutter-elt",
|
|
116
|
-
`left: ${dims.gutterLeft["CodeMirror-linenumbers"]}px; width: ${cm.display.lineNumInnerWidth}px`))
|
|
117
|
-
if (markers) for (let k = 0; k < cm.display.gutterSpecs.length; ++k) {
|
|
118
|
-
let id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id]
|
|
119
|
-
if (found)
|
|
120
|
-
gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt",
|
|
121
|
-
`left: ${dims.gutterLeft[id]}px; width: ${dims.gutterWidth[id]}px`))
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
function updateLineWidgets(cm, lineView, dims) {
|
|
127
|
-
if (lineView.alignable) lineView.alignable = null
|
|
128
|
-
let isWidget = classTest("CodeMirror-linewidget")
|
|
129
|
-
for (let node = lineView.node.firstChild, next; node; node = next) {
|
|
130
|
-
next = node.nextSibling
|
|
131
|
-
if (isWidget.test(node.className)) lineView.node.removeChild(node)
|
|
132
|
-
}
|
|
133
|
-
insertLineWidgets(cm, lineView, dims)
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// Build a line's DOM representation from scratch
|
|
137
|
-
export function buildLineElement(cm, lineView, lineN, dims) {
|
|
138
|
-
let built = getLineContent(cm, lineView)
|
|
139
|
-
lineView.text = lineView.node = built.pre
|
|
140
|
-
if (built.bgClass) lineView.bgClass = built.bgClass
|
|
141
|
-
if (built.textClass) lineView.textClass = built.textClass
|
|
142
|
-
|
|
143
|
-
updateLineClasses(cm, lineView)
|
|
144
|
-
updateLineGutter(cm, lineView, lineN, dims)
|
|
145
|
-
insertLineWidgets(cm, lineView, dims)
|
|
146
|
-
return lineView.node
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
// A lineView may contain multiple logical lines (when merged by
|
|
150
|
-
// collapsed spans). The widgets for all of them need to be drawn.
|
|
151
|
-
function insertLineWidgets(cm, lineView, dims) {
|
|
152
|
-
insertLineWidgetsFor(cm, lineView.line, lineView, dims, true)
|
|
153
|
-
if (lineView.rest) for (let i = 0; i < lineView.rest.length; i++)
|
|
154
|
-
insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false)
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {
|
|
158
|
-
if (!line.widgets) return
|
|
159
|
-
let wrap = ensureLineWrapped(lineView)
|
|
160
|
-
for (let i = 0, ws = line.widgets; i < ws.length; ++i) {
|
|
161
|
-
let widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget" + (widget.className ? " " + widget.className : ""))
|
|
162
|
-
if (!widget.handleMouseEvents) node.setAttribute("cm-ignore-events", "true")
|
|
163
|
-
positionLineWidget(widget, node, lineView, dims)
|
|
164
|
-
cm.display.input.setUneditable(node)
|
|
165
|
-
if (allowAbove && widget.above)
|
|
166
|
-
wrap.insertBefore(node, lineView.gutter || lineView.text)
|
|
167
|
-
else
|
|
168
|
-
wrap.appendChild(node)
|
|
169
|
-
signalLater(widget, "redraw")
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
function positionLineWidget(widget, node, lineView, dims) {
|
|
174
|
-
if (widget.noHScroll) {
|
|
175
|
-
;(lineView.alignable || (lineView.alignable = [])).push(node)
|
|
176
|
-
let width = dims.wrapperWidth
|
|
177
|
-
node.style.left = dims.fixedPos + "px"
|
|
178
|
-
if (!widget.coverGutter) {
|
|
179
|
-
width -= dims.gutterTotalWidth
|
|
180
|
-
node.style.paddingLeft = dims.gutterTotalWidth + "px"
|
|
181
|
-
}
|
|
182
|
-
node.style.width = width + "px"
|
|
183
|
-
}
|
|
184
|
-
if (widget.coverGutter) {
|
|
185
|
-
node.style.zIndex = 5
|
|
186
|
-
node.style.position = "relative"
|
|
187
|
-
if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + "px"
|
|
188
|
-
}
|
|
189
|
-
}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { heightAtLine } from "../line/spans.js"
|
|
2
|
-
import { getLine, lineAtHeight, updateLineHeight } from "../line/utils_line.js"
|
|
3
|
-
import { paddingTop, charWidth } from "../measurement/position_measurement.js"
|
|
4
|
-
import { ie, ie_version } from "../util/browser.js"
|
|
5
|
-
|
|
6
|
-
// Read the actual heights of the rendered lines, and update their
|
|
7
|
-
// stored heights to match.
|
|
8
|
-
export function updateHeightsInViewport(cm) {
|
|
9
|
-
let display = cm.display
|
|
10
|
-
let prevBottom = display.lineDiv.offsetTop
|
|
11
|
-
let viewTop = Math.max(0, display.scroller.getBoundingClientRect().top)
|
|
12
|
-
let oldHeight = display.lineDiv.getBoundingClientRect().top
|
|
13
|
-
let mustScroll = 0
|
|
14
|
-
for (let i = 0; i < display.view.length; i++) {
|
|
15
|
-
let cur = display.view[i], wrapping = cm.options.lineWrapping
|
|
16
|
-
let height, width = 0
|
|
17
|
-
if (cur.hidden) continue
|
|
18
|
-
oldHeight += cur.line.height
|
|
19
|
-
if (ie && ie_version < 8) {
|
|
20
|
-
let bot = cur.node.offsetTop + cur.node.offsetHeight
|
|
21
|
-
height = bot - prevBottom
|
|
22
|
-
prevBottom = bot
|
|
23
|
-
} else {
|
|
24
|
-
let box = cur.node.getBoundingClientRect()
|
|
25
|
-
height = box.bottom - box.top
|
|
26
|
-
// Check that lines don't extend past the right of the current
|
|
27
|
-
// editor width
|
|
28
|
-
if (!wrapping && cur.text.firstChild)
|
|
29
|
-
width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1
|
|
30
|
-
}
|
|
31
|
-
let diff = cur.line.height - height
|
|
32
|
-
if (diff > .005 || diff < -.005) {
|
|
33
|
-
if (oldHeight < viewTop) mustScroll -= diff
|
|
34
|
-
updateLineHeight(cur.line, height)
|
|
35
|
-
updateWidgetHeight(cur.line)
|
|
36
|
-
if (cur.rest) for (let j = 0; j < cur.rest.length; j++)
|
|
37
|
-
updateWidgetHeight(cur.rest[j])
|
|
38
|
-
}
|
|
39
|
-
if (width > cm.display.sizerWidth) {
|
|
40
|
-
let chWidth = Math.ceil(width / charWidth(cm.display))
|
|
41
|
-
if (chWidth > cm.display.maxLineLength) {
|
|
42
|
-
cm.display.maxLineLength = chWidth
|
|
43
|
-
cm.display.maxLine = cur.line
|
|
44
|
-
cm.display.maxLineChanged = true
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
if (Math.abs(mustScroll) > 2) display.scroller.scrollTop += mustScroll
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// Read and store the height of line widgets associated with the
|
|
52
|
-
// given line.
|
|
53
|
-
function updateWidgetHeight(line) {
|
|
54
|
-
if (line.widgets) for (let i = 0; i < line.widgets.length; ++i) {
|
|
55
|
-
let w = line.widgets[i], parent = w.node.parentNode
|
|
56
|
-
if (parent) w.height = parent.offsetHeight
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Compute the lines that are visible in a given viewport (defaults
|
|
61
|
-
// the the current scroll position). viewport may contain top,
|
|
62
|
-
// height, and ensure (see op.scrollToPos) properties.
|
|
63
|
-
export function visibleLines(display, doc, viewport) {
|
|
64
|
-
let top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop
|
|
65
|
-
top = Math.floor(top - paddingTop(display))
|
|
66
|
-
let bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight
|
|
67
|
-
|
|
68
|
-
let from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom)
|
|
69
|
-
// Ensure is a {from: {line, ch}, to: {line, ch}} object, and
|
|
70
|
-
// forces those lines into the viewport (if possible).
|
|
71
|
-
if (viewport && viewport.ensure) {
|
|
72
|
-
let ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line
|
|
73
|
-
if (ensureFrom < from) {
|
|
74
|
-
from = ensureFrom
|
|
75
|
-
to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight)
|
|
76
|
-
} else if (Math.min(ensureTo, doc.lastLine()) >= to) {
|
|
77
|
-
from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight)
|
|
78
|
-
to = ensureTo
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return {from: from, to: Math.max(to, from + 1)}
|
|
82
|
-
}
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import { buildViewArray } from "../line/line_data.js"
|
|
2
|
-
import { sawCollapsedSpans } from "../line/saw_special_spans.js"
|
|
3
|
-
import { visualLineEndNo, visualLineNo } from "../line/spans.js"
|
|
4
|
-
import { findViewIndex } from "../measurement/position_measurement.js"
|
|
5
|
-
import { indexOf } from "../util/misc.js"
|
|
6
|
-
|
|
7
|
-
// Updates the display.view data structure for a given change to the
|
|
8
|
-
// document. From and to are in pre-change coordinates. Lendiff is
|
|
9
|
-
// the amount of lines added or subtracted by the change. This is
|
|
10
|
-
// used for changes that span multiple lines, or change the way
|
|
11
|
-
// lines are divided into visual lines. regLineChange (below)
|
|
12
|
-
// registers single-line changes.
|
|
13
|
-
export function regChange(cm, from, to, lendiff) {
|
|
14
|
-
if (from == null) from = cm.doc.first
|
|
15
|
-
if (to == null) to = cm.doc.first + cm.doc.size
|
|
16
|
-
if (!lendiff) lendiff = 0
|
|
17
|
-
|
|
18
|
-
let display = cm.display
|
|
19
|
-
if (lendiff && to < display.viewTo &&
|
|
20
|
-
(display.updateLineNumbers == null || display.updateLineNumbers > from))
|
|
21
|
-
display.updateLineNumbers = from
|
|
22
|
-
|
|
23
|
-
cm.curOp.viewChanged = true
|
|
24
|
-
|
|
25
|
-
if (from >= display.viewTo) { // Change after
|
|
26
|
-
if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)
|
|
27
|
-
resetView(cm)
|
|
28
|
-
} else if (to <= display.viewFrom) { // Change before
|
|
29
|
-
if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {
|
|
30
|
-
resetView(cm)
|
|
31
|
-
} else {
|
|
32
|
-
display.viewFrom += lendiff
|
|
33
|
-
display.viewTo += lendiff
|
|
34
|
-
}
|
|
35
|
-
} else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap
|
|
36
|
-
resetView(cm)
|
|
37
|
-
} else if (from <= display.viewFrom) { // Top overlap
|
|
38
|
-
let cut = viewCuttingPoint(cm, to, to + lendiff, 1)
|
|
39
|
-
if (cut) {
|
|
40
|
-
display.view = display.view.slice(cut.index)
|
|
41
|
-
display.viewFrom = cut.lineN
|
|
42
|
-
display.viewTo += lendiff
|
|
43
|
-
} else {
|
|
44
|
-
resetView(cm)
|
|
45
|
-
}
|
|
46
|
-
} else if (to >= display.viewTo) { // Bottom overlap
|
|
47
|
-
let cut = viewCuttingPoint(cm, from, from, -1)
|
|
48
|
-
if (cut) {
|
|
49
|
-
display.view = display.view.slice(0, cut.index)
|
|
50
|
-
display.viewTo = cut.lineN
|
|
51
|
-
} else {
|
|
52
|
-
resetView(cm)
|
|
53
|
-
}
|
|
54
|
-
} else { // Gap in the middle
|
|
55
|
-
let cutTop = viewCuttingPoint(cm, from, from, -1)
|
|
56
|
-
let cutBot = viewCuttingPoint(cm, to, to + lendiff, 1)
|
|
57
|
-
if (cutTop && cutBot) {
|
|
58
|
-
display.view = display.view.slice(0, cutTop.index)
|
|
59
|
-
.concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))
|
|
60
|
-
.concat(display.view.slice(cutBot.index))
|
|
61
|
-
display.viewTo += lendiff
|
|
62
|
-
} else {
|
|
63
|
-
resetView(cm)
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
let ext = display.externalMeasured
|
|
68
|
-
if (ext) {
|
|
69
|
-
if (to < ext.lineN)
|
|
70
|
-
ext.lineN += lendiff
|
|
71
|
-
else if (from < ext.lineN + ext.size)
|
|
72
|
-
display.externalMeasured = null
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// Register a change to a single line. Type must be one of "text",
|
|
77
|
-
// "gutter", "class", "widget"
|
|
78
|
-
export function regLineChange(cm, line, type) {
|
|
79
|
-
cm.curOp.viewChanged = true
|
|
80
|
-
let display = cm.display, ext = cm.display.externalMeasured
|
|
81
|
-
if (ext && line >= ext.lineN && line < ext.lineN + ext.size)
|
|
82
|
-
display.externalMeasured = null
|
|
83
|
-
|
|
84
|
-
if (line < display.viewFrom || line >= display.viewTo) return
|
|
85
|
-
let lineView = display.view[findViewIndex(cm, line)]
|
|
86
|
-
if (lineView.node == null) return
|
|
87
|
-
let arr = lineView.changes || (lineView.changes = [])
|
|
88
|
-
if (indexOf(arr, type) == -1) arr.push(type)
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// Clear the view.
|
|
92
|
-
export function resetView(cm) {
|
|
93
|
-
cm.display.viewFrom = cm.display.viewTo = cm.doc.first
|
|
94
|
-
cm.display.view = []
|
|
95
|
-
cm.display.viewOffset = 0
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
function viewCuttingPoint(cm, oldN, newN, dir) {
|
|
99
|
-
let index = findViewIndex(cm, oldN), diff, view = cm.display.view
|
|
100
|
-
if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)
|
|
101
|
-
return {index: index, lineN: newN}
|
|
102
|
-
let n = cm.display.viewFrom
|
|
103
|
-
for (let i = 0; i < index; i++)
|
|
104
|
-
n += view[i].size
|
|
105
|
-
if (n != oldN) {
|
|
106
|
-
if (dir > 0) {
|
|
107
|
-
if (index == view.length - 1) return null
|
|
108
|
-
diff = (n + view[index].size) - oldN
|
|
109
|
-
index++
|
|
110
|
-
} else {
|
|
111
|
-
diff = n - oldN
|
|
112
|
-
}
|
|
113
|
-
oldN += diff; newN += diff
|
|
114
|
-
}
|
|
115
|
-
while (visualLineNo(cm.doc, newN) != newN) {
|
|
116
|
-
if (index == (dir < 0 ? 0 : view.length - 1)) return null
|
|
117
|
-
newN += dir * view[index - (dir < 0 ? 1 : 0)].size
|
|
118
|
-
index += dir
|
|
119
|
-
}
|
|
120
|
-
return {index: index, lineN: newN}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// Force the view to cover a given range, adding empty view element
|
|
124
|
-
// or clipping off existing ones as needed.
|
|
125
|
-
export function adjustView(cm, from, to) {
|
|
126
|
-
let display = cm.display, view = display.view
|
|
127
|
-
if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {
|
|
128
|
-
display.view = buildViewArray(cm, from, to)
|
|
129
|
-
display.viewFrom = from
|
|
130
|
-
} else {
|
|
131
|
-
if (display.viewFrom > from)
|
|
132
|
-
display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view)
|
|
133
|
-
else if (display.viewFrom < from)
|
|
134
|
-
display.view = display.view.slice(findViewIndex(cm, from))
|
|
135
|
-
display.viewFrom = from
|
|
136
|
-
if (display.viewTo < to)
|
|
137
|
-
display.view = display.view.concat(buildViewArray(cm, display.viewTo, to))
|
|
138
|
-
else if (display.viewTo > to)
|
|
139
|
-
display.view = display.view.slice(0, findViewIndex(cm, to))
|
|
140
|
-
}
|
|
141
|
-
display.viewTo = to
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
// Count the number of lines in the view whose DOM representation is
|
|
145
|
-
// out of date (or nonexistent).
|
|
146
|
-
export function countDirtyView(cm) {
|
|
147
|
-
let view = cm.display.view, dirty = 0
|
|
148
|
-
for (let i = 0; i < view.length; i++) {
|
|
149
|
-
let lineView = view[i]
|
|
150
|
-
if (!lineView.hidden && (!lineView.node || lineView.changes)) ++dirty
|
|
151
|
-
}
|
|
152
|
-
return dirty
|
|
153
|
-
}
|
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
import { Display } from "../display/Display.js"
|
|
2
|
-
import { onFocus, onBlur } from "../display/focus.js"
|
|
3
|
-
import { maybeUpdateLineNumberWidth } from "../display/line_numbers.js"
|
|
4
|
-
import { endOperation, operation, startOperation } from "../display/operations.js"
|
|
5
|
-
import { initScrollbars } from "../display/scrollbars.js"
|
|
6
|
-
import { onScrollWheel } from "../display/scroll_events.js"
|
|
7
|
-
import { setScrollLeft, updateScrollTop } from "../display/scrolling.js"
|
|
8
|
-
import { clipPos, Pos } from "../line/pos.js"
|
|
9
|
-
import { posFromMouse } from "../measurement/position_measurement.js"
|
|
10
|
-
import { eventInWidget } from "../measurement/widgets.js"
|
|
11
|
-
import Doc from "../model/Doc.js"
|
|
12
|
-
import { attachDoc } from "../model/document_data.js"
|
|
13
|
-
import { Range } from "../model/selection.js"
|
|
14
|
-
import { extendSelection } from "../model/selection_updates.js"
|
|
15
|
-
import { ie, ie_version, mobile, webkit } from "../util/browser.js"
|
|
16
|
-
import { e_preventDefault, e_stop, on, signal, signalDOMEvent } from "../util/event.js"
|
|
17
|
-
import { copyObj, Delayed } from "../util/misc.js"
|
|
18
|
-
|
|
19
|
-
import { clearDragCursor, onDragOver, onDragStart, onDrop } from "./drop_events.js"
|
|
20
|
-
import { ensureGlobalHandlers } from "./global_events.js"
|
|
21
|
-
import { onKeyDown, onKeyPress, onKeyUp } from "./key_events.js"
|
|
22
|
-
import { clickInGutter, onContextMenu, onMouseDown } from "./mouse_events.js"
|
|
23
|
-
import { themeChanged } from "./utils.js"
|
|
24
|
-
import { defaults, optionHandlers, Init } from "./options.js"
|
|
25
|
-
|
|
26
|
-
// A CodeMirror instance represents an editor. This is the object
|
|
27
|
-
// that user code is usually dealing with.
|
|
28
|
-
|
|
29
|
-
export function CodeMirror(place, options) {
|
|
30
|
-
if (!(this instanceof CodeMirror)) return new CodeMirror(place, options)
|
|
31
|
-
|
|
32
|
-
this.options = options = options ? copyObj(options) : {}
|
|
33
|
-
// Determine effective options based on given values and defaults.
|
|
34
|
-
copyObj(defaults, options, false)
|
|
35
|
-
|
|
36
|
-
let doc = options.value
|
|
37
|
-
if (typeof doc == "string") doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction)
|
|
38
|
-
else if (options.mode) doc.modeOption = options.mode
|
|
39
|
-
this.doc = doc
|
|
40
|
-
|
|
41
|
-
let input = new CodeMirror.inputStyles[options.inputStyle](this)
|
|
42
|
-
let display = this.display = new Display(place, doc, input, options)
|
|
43
|
-
display.wrapper.CodeMirror = this
|
|
44
|
-
themeChanged(this)
|
|
45
|
-
if (options.lineWrapping)
|
|
46
|
-
this.display.wrapper.className += " CodeMirror-wrap"
|
|
47
|
-
initScrollbars(this)
|
|
48
|
-
|
|
49
|
-
this.state = {
|
|
50
|
-
keyMaps: [], // stores maps added by addKeyMap
|
|
51
|
-
overlays: [], // highlighting overlays, as added by addOverlay
|
|
52
|
-
modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info
|
|
53
|
-
overwrite: false,
|
|
54
|
-
delayingBlurEvent: false,
|
|
55
|
-
focused: false,
|
|
56
|
-
suppressEdits: false, // used to disable editing during key handlers when in readOnly mode
|
|
57
|
-
pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll
|
|
58
|
-
selectingText: false,
|
|
59
|
-
draggingText: false,
|
|
60
|
-
highlight: new Delayed(), // stores highlight worker timeout
|
|
61
|
-
keySeq: null, // Unfinished key sequence
|
|
62
|
-
specialChars: null
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (options.autofocus && !mobile) display.input.focus()
|
|
66
|
-
|
|
67
|
-
// Override magic textarea content restore that IE sometimes does
|
|
68
|
-
// on our hidden textarea on reload
|
|
69
|
-
if (ie && ie_version < 11) setTimeout(() => this.display.input.reset(true), 20)
|
|
70
|
-
|
|
71
|
-
registerEventHandlers(this)
|
|
72
|
-
ensureGlobalHandlers()
|
|
73
|
-
|
|
74
|
-
startOperation(this)
|
|
75
|
-
this.curOp.forceUpdate = true
|
|
76
|
-
attachDoc(this, doc)
|
|
77
|
-
|
|
78
|
-
if ((options.autofocus && !mobile) || this.hasFocus())
|
|
79
|
-
setTimeout(() => {
|
|
80
|
-
if (this.hasFocus() && !this.state.focused) onFocus(this)
|
|
81
|
-
}, 20)
|
|
82
|
-
else
|
|
83
|
-
onBlur(this)
|
|
84
|
-
|
|
85
|
-
for (let opt in optionHandlers) if (optionHandlers.hasOwnProperty(opt))
|
|
86
|
-
optionHandlers[opt](this, options[opt], Init)
|
|
87
|
-
maybeUpdateLineNumberWidth(this)
|
|
88
|
-
if (options.finishInit) options.finishInit(this)
|
|
89
|
-
for (let i = 0; i < initHooks.length; ++i) initHooks[i](this)
|
|
90
|
-
endOperation(this)
|
|
91
|
-
// Suppress optimizelegibility in Webkit, since it breaks text
|
|
92
|
-
// measuring on line wrapping boundaries.
|
|
93
|
-
if (webkit && options.lineWrapping &&
|
|
94
|
-
getComputedStyle(display.lineDiv).textRendering == "optimizelegibility")
|
|
95
|
-
display.lineDiv.style.textRendering = "auto"
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// The default configuration options.
|
|
99
|
-
CodeMirror.defaults = defaults
|
|
100
|
-
// Functions to run when options are changed.
|
|
101
|
-
CodeMirror.optionHandlers = optionHandlers
|
|
102
|
-
|
|
103
|
-
export default CodeMirror
|
|
104
|
-
|
|
105
|
-
// Attach the necessary event handlers when initializing the editor
|
|
106
|
-
function registerEventHandlers(cm) {
|
|
107
|
-
let d = cm.display
|
|
108
|
-
on(d.scroller, "mousedown", operation(cm, onMouseDown))
|
|
109
|
-
// Older IE's will not fire a second mousedown for a double click
|
|
110
|
-
if (ie && ie_version < 11)
|
|
111
|
-
on(d.scroller, "dblclick", operation(cm, e => {
|
|
112
|
-
if (signalDOMEvent(cm, e)) return
|
|
113
|
-
let pos = posFromMouse(cm, e)
|
|
114
|
-
if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return
|
|
115
|
-
e_preventDefault(e)
|
|
116
|
-
let word = cm.findWordAt(pos)
|
|
117
|
-
extendSelection(cm.doc, word.anchor, word.head)
|
|
118
|
-
}))
|
|
119
|
-
else
|
|
120
|
-
on(d.scroller, "dblclick", e => signalDOMEvent(cm, e) || e_preventDefault(e))
|
|
121
|
-
// Some browsers fire contextmenu *after* opening the menu, at
|
|
122
|
-
// which point we can't mess with it anymore. Context menu is
|
|
123
|
-
// handled in onMouseDown for these browsers.
|
|
124
|
-
on(d.scroller, "contextmenu", e => onContextMenu(cm, e))
|
|
125
|
-
on(d.input.getField(), "contextmenu", e => {
|
|
126
|
-
if (!d.scroller.contains(e.target)) onContextMenu(cm, e)
|
|
127
|
-
})
|
|
128
|
-
|
|
129
|
-
// Used to suppress mouse event handling when a touch happens
|
|
130
|
-
let touchFinished, prevTouch = {end: 0}
|
|
131
|
-
function finishTouch() {
|
|
132
|
-
if (d.activeTouch) {
|
|
133
|
-
touchFinished = setTimeout(() => d.activeTouch = null, 1000)
|
|
134
|
-
prevTouch = d.activeTouch
|
|
135
|
-
prevTouch.end = +new Date
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
function isMouseLikeTouchEvent(e) {
|
|
139
|
-
if (e.touches.length != 1) return false
|
|
140
|
-
let touch = e.touches[0]
|
|
141
|
-
return touch.radiusX <= 1 && touch.radiusY <= 1
|
|
142
|
-
}
|
|
143
|
-
function farAway(touch, other) {
|
|
144
|
-
if (other.left == null) return true
|
|
145
|
-
let dx = other.left - touch.left, dy = other.top - touch.top
|
|
146
|
-
return dx * dx + dy * dy > 20 * 20
|
|
147
|
-
}
|
|
148
|
-
on(d.scroller, "touchstart", e => {
|
|
149
|
-
if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {
|
|
150
|
-
d.input.ensurePolled()
|
|
151
|
-
clearTimeout(touchFinished)
|
|
152
|
-
let now = +new Date
|
|
153
|
-
d.activeTouch = {start: now, moved: false,
|
|
154
|
-
prev: now - prevTouch.end <= 300 ? prevTouch : null}
|
|
155
|
-
if (e.touches.length == 1) {
|
|
156
|
-
d.activeTouch.left = e.touches[0].pageX
|
|
157
|
-
d.activeTouch.top = e.touches[0].pageY
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
})
|
|
161
|
-
on(d.scroller, "touchmove", () => {
|
|
162
|
-
if (d.activeTouch) d.activeTouch.moved = true
|
|
163
|
-
})
|
|
164
|
-
on(d.scroller, "touchend", e => {
|
|
165
|
-
let touch = d.activeTouch
|
|
166
|
-
if (touch && !eventInWidget(d, e) && touch.left != null &&
|
|
167
|
-
!touch.moved && new Date - touch.start < 300) {
|
|
168
|
-
let pos = cm.coordsChar(d.activeTouch, "page"), range
|
|
169
|
-
if (!touch.prev || farAway(touch, touch.prev)) // Single tap
|
|
170
|
-
range = new Range(pos, pos)
|
|
171
|
-
else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap
|
|
172
|
-
range = cm.findWordAt(pos)
|
|
173
|
-
else // Triple tap
|
|
174
|
-
range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0)))
|
|
175
|
-
cm.setSelection(range.anchor, range.head)
|
|
176
|
-
cm.focus()
|
|
177
|
-
e_preventDefault(e)
|
|
178
|
-
}
|
|
179
|
-
finishTouch()
|
|
180
|
-
})
|
|
181
|
-
on(d.scroller, "touchcancel", finishTouch)
|
|
182
|
-
|
|
183
|
-
// Sync scrolling between fake scrollbars and real scrollable
|
|
184
|
-
// area, ensure viewport is updated when scrolling.
|
|
185
|
-
on(d.scroller, "scroll", () => {
|
|
186
|
-
if (d.scroller.clientHeight) {
|
|
187
|
-
updateScrollTop(cm, d.scroller.scrollTop)
|
|
188
|
-
setScrollLeft(cm, d.scroller.scrollLeft, true)
|
|
189
|
-
signal(cm, "scroll", cm)
|
|
190
|
-
}
|
|
191
|
-
})
|
|
192
|
-
|
|
193
|
-
// Listen to wheel events in order to try and update the viewport on time.
|
|
194
|
-
on(d.scroller, "mousewheel", e => onScrollWheel(cm, e))
|
|
195
|
-
on(d.scroller, "DOMMouseScroll", e => onScrollWheel(cm, e))
|
|
196
|
-
|
|
197
|
-
// Prevent wrapper from ever scrolling
|
|
198
|
-
on(d.wrapper, "scroll", () => d.wrapper.scrollTop = d.wrapper.scrollLeft = 0)
|
|
199
|
-
|
|
200
|
-
d.dragFunctions = {
|
|
201
|
-
enter: e => {if (!signalDOMEvent(cm, e)) e_stop(e)},
|
|
202
|
-
over: e => {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e) }},
|
|
203
|
-
start: e => onDragStart(cm, e),
|
|
204
|
-
drop: operation(cm, onDrop),
|
|
205
|
-
leave: e => {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm) }}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
let inp = d.input.getField()
|
|
209
|
-
on(inp, "keyup", e => onKeyUp.call(cm, e))
|
|
210
|
-
on(inp, "keydown", operation(cm, onKeyDown))
|
|
211
|
-
on(inp, "keypress", operation(cm, onKeyPress))
|
|
212
|
-
on(inp, "focus", e => onFocus(cm, e))
|
|
213
|
-
on(inp, "blur", e => onBlur(cm, e))
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
let initHooks = []
|
|
217
|
-
CodeMirror.defineInitHook = f => initHooks.push(f)
|