administrate-field-simple_mde_markdown 0.1.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.
- checksums.yaml +7 -0
- data/.circleci/config.yml +72 -0
- data/.circleci/setup-rubygems.sh +3 -0
- data/.gitignore +11 -0
- data/.rspec +3 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +196 -0
- data/LICENSE.txt +21 -0
- data/README.md +44 -0
- data/Rakefile +8 -0
- data/administrate-field-simple_mde_markdown.gemspec +31 -0
- data/app/assets/javascripts/administrate-field-simple_mde_markdown/application.js +6 -0
- data/app/assets/stylesheets/administrate-field-simple_mde_markdown/application.css +3 -0
- data/app/views/fields/simple_mde_markdown/_form.html.erb +6 -0
- data/app/views/fields/simple_mde_markdown/_index.html.erb +1 -0
- data/app/views/fields/simple_mde_markdown/_show.html.erb +1 -0
- data/lib/administrate/field/simple_mde_markdown.rb +31 -0
- data/node_modules/.bin/marked +1 -0
- data/node_modules/codemirror-spell-checker/.eslintrc +23 -0
- data/node_modules/codemirror-spell-checker/.npmignore +2 -0
- data/node_modules/codemirror-spell-checker/.travis.yml +18 -0
- data/node_modules/codemirror-spell-checker/CONTRIBUTING 2.md +10 -0
- data/node_modules/codemirror-spell-checker/CONTRIBUTING.md +10 -0
- data/node_modules/codemirror-spell-checker/LICENSE +22 -0
- data/node_modules/codemirror-spell-checker/README.md +50 -0
- data/node_modules/codemirror-spell-checker/bower.json +27 -0
- data/node_modules/codemirror-spell-checker/debug/.spell-checker 2.css.icloud +0 -0
- data/node_modules/codemirror-spell-checker/debug/spell-checker.css +9 -0
- data/node_modules/codemirror-spell-checker/debug/spell-checker.debug.js +2844 -0
- data/node_modules/codemirror-spell-checker/debug/spell-checker.js +2841 -0
- data/node_modules/codemirror-spell-checker/dist/.spell-checker.min 2.css.icloud +0 -0
- data/node_modules/codemirror-spell-checker/dist/en_US.aff +201 -0
- data/node_modules/codemirror-spell-checker/dist/en_US.dic +62120 -0
- data/node_modules/codemirror-spell-checker/dist/spell-checker.min 2.js +7 -0
- data/node_modules/codemirror-spell-checker/dist/spell-checker.min.css +7 -0
- data/node_modules/codemirror-spell-checker/dist/spell-checker.min.js +7 -0
- data/node_modules/codemirror-spell-checker/gulpfile.js +94 -0
- data/node_modules/codemirror-spell-checker/package.json +75 -0
- data/node_modules/codemirror-spell-checker/src/css/spell-checker.css +3 -0
- data/node_modules/codemirror-spell-checker/src/data/en_US.aff +201 -0
- data/node_modules/codemirror-spell-checker/src/data/en_US.dic +62120 -0
- data/node_modules/codemirror-spell-checker/src/js/spell-checker.js +119 -0
- data/node_modules/codemirror/.package 2.json.icloud +0 -0
- data/node_modules/codemirror/AUTHORS +773 -0
- data/node_modules/codemirror/CHANGELOG.md +1486 -0
- data/node_modules/codemirror/CONTRIBUTING.md +92 -0
- data/node_modules/codemirror/LICENSE +21 -0
- data/node_modules/codemirror/README.md +49 -0
- data/node_modules/codemirror/addon/comment/comment.js +209 -0
- data/node_modules/codemirror/addon/comment/continuecomment.js +78 -0
- data/node_modules/codemirror/addon/dialog/dialog.css +32 -0
- data/node_modules/codemirror/addon/dialog/dialog.js +161 -0
- data/node_modules/codemirror/addon/display/autorefresh.js +47 -0
- data/node_modules/codemirror/addon/display/fullscreen.css +6 -0
- data/node_modules/codemirror/addon/display/fullscreen.js +41 -0
- data/node_modules/codemirror/addon/display/panel.js +127 -0
- data/node_modules/codemirror/addon/display/placeholder.js +63 -0
- data/node_modules/codemirror/addon/display/rulers.js +51 -0
- data/node_modules/codemirror/addon/edit/closebrackets.js +187 -0
- data/node_modules/codemirror/addon/edit/closetag.js +175 -0
- data/node_modules/codemirror/addon/edit/continuelist.js +89 -0
- data/node_modules/codemirror/addon/edit/matchbrackets.js +145 -0
- data/node_modules/codemirror/addon/edit/matchtags.js +66 -0
- data/node_modules/codemirror/addon/edit/trailingspace.js +27 -0
- data/node_modules/codemirror/addon/fold/brace-fold.js +105 -0
- data/node_modules/codemirror/addon/fold/comment-fold.js +59 -0
- data/node_modules/codemirror/addon/fold/foldcode.js +152 -0
- data/node_modules/codemirror/addon/fold/foldgutter.css +20 -0
- data/node_modules/codemirror/addon/fold/foldgutter.js +146 -0
- data/node_modules/codemirror/addon/fold/indent-fold.js +48 -0
- data/node_modules/codemirror/addon/fold/markdown-fold.js +49 -0
- data/node_modules/codemirror/addon/fold/xml-fold.js +184 -0
- data/node_modules/codemirror/addon/hint/anyword-hint.js +41 -0
- data/node_modules/codemirror/addon/hint/css-hint.js +60 -0
- data/node_modules/codemirror/addon/hint/html-hint.js +348 -0
- data/node_modules/codemirror/addon/hint/javascript-hint.js +157 -0
- data/node_modules/codemirror/addon/hint/show-hint.css +36 -0
- data/node_modules/codemirror/addon/hint/show-hint.js +434 -0
- data/node_modules/codemirror/addon/hint/sql-hint.js +299 -0
- data/node_modules/codemirror/addon/hint/xml-hint.js +110 -0
- data/node_modules/codemirror/addon/lint/coffeescript-lint.js +47 -0
- data/node_modules/codemirror/addon/lint/css-lint.js +40 -0
- data/node_modules/codemirror/addon/lint/html-lint.js +53 -0
- data/node_modules/codemirror/addon/lint/javascript-lint.js +63 -0
- data/node_modules/codemirror/addon/lint/json-lint.js +40 -0
- data/node_modules/codemirror/addon/lint/lint.css +73 -0
- data/node_modules/codemirror/addon/lint/lint.js +252 -0
- data/node_modules/codemirror/addon/lint/yaml-lint.js +41 -0
- data/node_modules/codemirror/addon/merge/merge.css +119 -0
- data/node_modules/codemirror/addon/merge/merge.js +1002 -0
- data/node_modules/codemirror/addon/mode/loadmode.js +64 -0
- data/node_modules/codemirror/addon/mode/multiplex.js +131 -0
- data/node_modules/codemirror/addon/mode/multiplex_test.js +33 -0
- data/node_modules/codemirror/addon/mode/overlay.js +90 -0
- data/node_modules/codemirror/addon/mode/simple.js +216 -0
- data/node_modules/codemirror/addon/runmode/colorize.js +40 -0
- data/node_modules/codemirror/addon/runmode/runmode-standalone.js +158 -0
- data/node_modules/codemirror/addon/runmode/runmode.js +72 -0
- data/node_modules/codemirror/addon/runmode/runmode.node.js +197 -0
- data/node_modules/codemirror/addon/scroll/annotatescrollbar.js +122 -0
- data/node_modules/codemirror/addon/scroll/scrollpastend.js +48 -0
- data/node_modules/codemirror/addon/scroll/simplescrollbars.css +66 -0
- data/node_modules/codemirror/addon/scroll/simplescrollbars.js +152 -0
- data/node_modules/codemirror/addon/search/jump-to-line.js +50 -0
- data/node_modules/codemirror/addon/search/match-highlighter.js +165 -0
- data/node_modules/codemirror/addon/search/matchesonscrollbar.css +8 -0
- data/node_modules/codemirror/addon/search/matchesonscrollbar.js +97 -0
- data/node_modules/codemirror/addon/search/search.js +258 -0
- data/node_modules/codemirror/addon/search/searchcursor.js +293 -0
- data/node_modules/codemirror/addon/selection/active-line.js +72 -0
- data/node_modules/codemirror/addon/selection/mark-selection.js +119 -0
- data/node_modules/codemirror/addon/selection/selection-pointer.js +98 -0
- data/node_modules/codemirror/addon/tern/tern.css +87 -0
- data/node_modules/codemirror/addon/tern/tern.js +718 -0
- data/node_modules/codemirror/addon/tern/worker.js +44 -0
- data/node_modules/codemirror/addon/wrap/hardwrap.js +145 -0
- data/node_modules/codemirror/bin/source-highlight +48 -0
- data/node_modules/codemirror/keymap/emacs.js +417 -0
- data/node_modules/codemirror/keymap/sublime.js +691 -0
- data/node_modules/codemirror/keymap/vim.js +5467 -0
- data/node_modules/codemirror/lib/codemirror.css +346 -0
- data/node_modules/codemirror/lib/codemirror.js +9698 -0
- data/node_modules/codemirror/mode/apl/apl.js +174 -0
- data/node_modules/codemirror/mode/asciiarmor/asciiarmor.js +74 -0
- data/node_modules/codemirror/mode/asn.1/asn.1.js +204 -0
- data/node_modules/codemirror/mode/asterisk/asterisk.js +196 -0
- data/node_modules/codemirror/mode/brainfuck/brainfuck.js +85 -0
- data/node_modules/codemirror/mode/clike/clike.js +879 -0
- data/node_modules/codemirror/mode/clojure/clojure.js +292 -0
- data/node_modules/codemirror/mode/cmake/cmake.js +97 -0
- data/node_modules/codemirror/mode/cobol/cobol.js +255 -0
- data/node_modules/codemirror/mode/coffeescript/coffeescript.js +359 -0
- data/node_modules/codemirror/mode/commonlisp/commonlisp.js +124 -0
- data/node_modules/codemirror/mode/crystal/crystal.js +433 -0
- data/node_modules/codemirror/mode/css/css.js +832 -0
- data/node_modules/codemirror/mode/cypher/cypher.js +150 -0
- data/node_modules/codemirror/mode/d/d.js +223 -0
- data/node_modules/codemirror/mode/dart/dart.js +157 -0
- data/node_modules/codemirror/mode/diff/diff.js +47 -0
- data/node_modules/codemirror/mode/django/django.js +356 -0
- data/node_modules/codemirror/mode/dockerfile/dockerfile.js +211 -0
- data/node_modules/codemirror/mode/dtd/dtd.js +142 -0
- data/node_modules/codemirror/mode/dylan/dylan.js +352 -0
- data/node_modules/codemirror/mode/ebnf/ebnf.js +195 -0
- data/node_modules/codemirror/mode/ecl/ecl.js +206 -0
- data/node_modules/codemirror/mode/eiffel/eiffel.js +160 -0
- data/node_modules/codemirror/mode/elm/elm.js +205 -0
- data/node_modules/codemirror/mode/erlang/erlang.js +619 -0
- data/node_modules/codemirror/mode/factor/factor.js +85 -0
- data/node_modules/codemirror/mode/fcl/fcl.js +173 -0
- data/node_modules/codemirror/mode/forth/forth.js +180 -0
- data/node_modules/codemirror/mode/fortran/fortran.js +188 -0
- data/node_modules/codemirror/mode/gas/gas.js +345 -0
- data/node_modules/codemirror/mode/gfm/gfm.js +129 -0
- data/node_modules/codemirror/mode/gherkin/gherkin.js +178 -0
- data/node_modules/codemirror/mode/go/go.js +187 -0
- data/node_modules/codemirror/mode/groovy/groovy.js +230 -0
- data/node_modules/codemirror/mode/haml/haml.js +161 -0
- data/node_modules/codemirror/mode/handlebars/handlebars.js +66 -0
- data/node_modules/codemirror/mode/haskell-literate/haskell-literate.js +43 -0
- data/node_modules/codemirror/mode/haskell/haskell.js +268 -0
- data/node_modules/codemirror/mode/haxe/haxe.js +515 -0
- data/node_modules/codemirror/mode/htmlembedded/htmlembedded.js +37 -0
- data/node_modules/codemirror/mode/htmlmixed/htmlmixed.js +152 -0
- data/node_modules/codemirror/mode/http/http.js +113 -0
- data/node_modules/codemirror/mode/idl/idl.js +290 -0
- data/node_modules/codemirror/mode/javascript/javascript.js +899 -0
- data/node_modules/codemirror/mode/jinja2/jinja2.js +144 -0
- data/node_modules/codemirror/mode/jsx/jsx.js +148 -0
- data/node_modules/codemirror/mode/julia/julia.js +433 -0
- data/node_modules/codemirror/mode/livescript/livescript.js +280 -0
- data/node_modules/codemirror/mode/lua/lua.js +159 -0
- data/node_modules/codemirror/mode/markdown/markdown.js +884 -0
- data/node_modules/codemirror/mode/mathematica/mathematica.js +176 -0
- data/node_modules/codemirror/mode/mbox/mbox.js +129 -0
- data/node_modules/codemirror/mode/meta.js +217 -0
- data/node_modules/codemirror/mode/mirc/mirc.js +193 -0
- data/node_modules/codemirror/mode/mllike/mllike.js +359 -0
- data/node_modules/codemirror/mode/modelica/modelica.js +245 -0
- data/node_modules/codemirror/mode/mscgen/mscgen.js +175 -0
- data/node_modules/codemirror/mode/mumps/mumps.js +148 -0
- data/node_modules/codemirror/mode/nginx/nginx.js +178 -0
- data/node_modules/codemirror/mode/nsis/nsis.js +95 -0
- data/node_modules/codemirror/mode/ntriples/ntriples.js +195 -0
- data/node_modules/codemirror/mode/octave/octave.js +139 -0
- data/node_modules/codemirror/mode/oz/oz.js +252 -0
- data/node_modules/codemirror/mode/pascal/pascal.js +121 -0
- data/node_modules/codemirror/mode/pegjs/pegjs.js +114 -0
- data/node_modules/codemirror/mode/perl/perl.js +837 -0
- data/node_modules/codemirror/mode/php/php.js +234 -0
- data/node_modules/codemirror/mode/pig/pig.js +178 -0
- data/node_modules/codemirror/mode/powershell/powershell.js +398 -0
- data/node_modules/codemirror/mode/properties/properties 2.js +78 -0
- data/node_modules/codemirror/mode/properties/properties.js +78 -0
- data/node_modules/codemirror/mode/protobuf/protobuf.js +69 -0
- data/node_modules/codemirror/mode/pug/pug.js +591 -0
- data/node_modules/codemirror/mode/puppet/puppet.js +220 -0
- data/node_modules/codemirror/mode/python/python.js +409 -0
- data/node_modules/codemirror/mode/q/q.js +139 -0
- data/node_modules/codemirror/mode/r/r.js +190 -0
- data/node_modules/codemirror/mode/rpm/changes/index.html +66 -0
- data/node_modules/codemirror/mode/rpm/rpm.js +109 -0
- data/node_modules/codemirror/mode/rst/rst.js +557 -0
- data/node_modules/codemirror/mode/ruby/ruby.js +296 -0
- data/node_modules/codemirror/mode/rust/rust.js +72 -0
- data/node_modules/codemirror/mode/sas/sas.js +303 -0
- data/node_modules/codemirror/mode/sass/sass.js +454 -0
- data/node_modules/codemirror/mode/scheme/scheme.js +265 -0
- data/node_modules/codemirror/mode/shell/shell.js +152 -0
- data/node_modules/codemirror/mode/sieve/sieve.js +193 -0
- data/node_modules/codemirror/mode/slim/slim.js +575 -0
- data/node_modules/codemirror/mode/smalltalk/smalltalk.js +168 -0
- data/node_modules/codemirror/mode/smarty/smarty.js +225 -0
- data/node_modules/codemirror/mode/solr/solr.js +104 -0
- data/node_modules/codemirror/mode/soy/soy 2.js +359 -0
- data/node_modules/codemirror/mode/soy/soy.js +235 -0
- data/node_modules/codemirror/mode/sparql/sparql.js +180 -0
- data/node_modules/codemirror/mode/spreadsheet/spreadsheet.js +112 -0
- data/node_modules/codemirror/mode/sql/sql.js +499 -0
- data/node_modules/codemirror/mode/stex/stex.js +264 -0
- data/node_modules/codemirror/mode/stylus/stylus.js +771 -0
- data/node_modules/codemirror/mode/swift/swift.js +219 -0
- data/node_modules/codemirror/mode/tcl/tcl.js +139 -0
- data/node_modules/codemirror/mode/textile/textile.js +469 -0
- data/node_modules/codemirror/mode/tiddlywiki/tiddlywiki.css +14 -0
- data/node_modules/codemirror/mode/tiddlywiki/tiddlywiki.js +308 -0
- data/node_modules/codemirror/mode/tiki/tiki.css +26 -0
- data/node_modules/codemirror/mode/tiki/tiki.js +312 -0
- data/node_modules/codemirror/mode/toml/toml.js +88 -0
- data/node_modules/codemirror/mode/tornado/tornado.js +68 -0
- data/node_modules/codemirror/mode/troff/troff.js +84 -0
- data/node_modules/codemirror/mode/ttcn-cfg/ttcn-cfg.js +214 -0
- data/node_modules/codemirror/mode/ttcn/ttcn.js +283 -0
- data/node_modules/codemirror/mode/turtle/turtle.js +162 -0
- data/node_modules/codemirror/mode/twig/twig.js +141 -0
- data/node_modules/codemirror/mode/vb/vb.js +275 -0
- data/node_modules/codemirror/mode/vbscript/vbscript.js +350 -0
- data/node_modules/codemirror/mode/velocity/velocity.js +201 -0
- data/node_modules/codemirror/mode/verilog/verilog.js +675 -0
- data/node_modules/codemirror/mode/vhdl/vhdl.js +189 -0
- data/node_modules/codemirror/mode/vue/vue.js +77 -0
- data/node_modules/codemirror/mode/webidl/webidl.js +195 -0
- data/node_modules/codemirror/mode/xml/xml.js +402 -0
- data/node_modules/codemirror/mode/xquery/xquery.js +448 -0
- data/node_modules/codemirror/mode/yacas/yacas.js +204 -0
- data/node_modules/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js +68 -0
- data/node_modules/codemirror/mode/yaml/yaml.js +120 -0
- data/node_modules/codemirror/mode/z80/z80.js +116 -0
- data/node_modules/codemirror/package.json +2395 -0
- data/node_modules/codemirror/rollup.config.js +20 -0
- data/node_modules/codemirror/src/codemirror.js +3 -0
- data/node_modules/codemirror/src/display/Display.js +106 -0
- data/node_modules/codemirror/src/display/focus.js +47 -0
- data/node_modules/codemirror/src/display/gutters.js +34 -0
- data/node_modules/codemirror/src/display/highlight_worker.js +55 -0
- data/node_modules/codemirror/src/display/line_numbers.js +48 -0
- data/node_modules/codemirror/src/display/mode_state.js +22 -0
- data/node_modules/codemirror/src/display/operations.js +205 -0
- data/node_modules/codemirror/src/display/scroll_events.js +115 -0
- data/node_modules/codemirror/src/display/scrollbars.js +193 -0
- data/node_modules/codemirror/src/display/scrolling.js +184 -0
- data/node_modules/codemirror/src/display/selection.js +158 -0
- data/node_modules/codemirror/src/display/update_display.js +260 -0
- data/node_modules/codemirror/src/display/update_line.js +188 -0
- data/node_modules/codemirror/src/display/update_lines.js +64 -0
- data/node_modules/codemirror/src/display/view_tracking.js +153 -0
- data/node_modules/codemirror/src/edit/CodeMirror.js +215 -0
- data/node_modules/codemirror/src/edit/commands.js +178 -0
- data/node_modules/codemirror/src/edit/deleteNearSelection.js +30 -0
- data/node_modules/codemirror/src/edit/drop_events.js +119 -0
- data/node_modules/codemirror/src/edit/fromTextArea.js +61 -0
- data/node_modules/codemirror/src/edit/global_events.js +42 -0
- data/node_modules/codemirror/src/edit/key_events.js +159 -0
- data/node_modules/codemirror/src/edit/legacy.js +62 -0
- data/node_modules/codemirror/src/edit/main.js +69 -0
- data/node_modules/codemirror/src/edit/methods.js +544 -0
- data/node_modules/codemirror/src/edit/mouse_events.js +407 -0
- data/node_modules/codemirror/src/edit/options.js +193 -0
- data/node_modules/codemirror/src/edit/utils.js +7 -0
- data/node_modules/codemirror/src/input/ContentEditableInput.js +527 -0
- data/node_modules/codemirror/src/input/TextareaInput.js +355 -0
- data/node_modules/codemirror/src/input/indent.js +71 -0
- data/node_modules/codemirror/src/input/input.js +135 -0
- data/node_modules/codemirror/src/input/keymap.js +148 -0
- data/node_modules/codemirror/src/input/keynames.js +17 -0
- data/node_modules/codemirror/src/input/movement.js +110 -0
- data/node_modules/codemirror/src/line/highlight.js +284 -0
- data/node_modules/codemirror/src/line/line_data.js +339 -0
- data/node_modules/codemirror/src/line/pos.js +40 -0
- data/node_modules/codemirror/src/line/saw_special_spans.js +10 -0
- data/node_modules/codemirror/src/line/spans.js +382 -0
- data/node_modules/codemirror/src/line/utils_line.js +85 -0
- data/node_modules/codemirror/src/measurement/position_measurement.js +699 -0
- data/node_modules/codemirror/src/measurement/widgets.js +26 -0
- data/node_modules/codemirror/src/model/Doc.js +432 -0
- data/node_modules/codemirror/src/model/change_measurement.js +61 -0
- data/node_modules/codemirror/src/model/changes.js +333 -0
- data/node_modules/codemirror/src/model/chunk.js +167 -0
- data/node_modules/codemirror/src/model/document_data.js +111 -0
- data/node_modules/codemirror/src/model/history.js +228 -0
- data/node_modules/codemirror/src/model/line_widget.js +78 -0
- data/node_modules/codemirror/src/model/mark_text.js +292 -0
- data/node_modules/codemirror/src/model/selection.js +84 -0
- data/node_modules/codemirror/src/model/selection_updates.js +208 -0
- data/node_modules/codemirror/src/modes.js +96 -0
- data/node_modules/codemirror/src/util/StringStream.js +90 -0
- data/node_modules/codemirror/src/util/bidi.js +214 -0
- data/node_modules/codemirror/src/util/browser.js +33 -0
- data/node_modules/codemirror/src/util/dom.js +97 -0
- data/node_modules/codemirror/src/util/event.js +103 -0
- data/node_modules/codemirror/src/util/feature_detection.js +84 -0
- data/node_modules/codemirror/src/util/misc.js +150 -0
- data/node_modules/codemirror/src/util/operation_group.js +72 -0
- data/node_modules/codemirror/theme/3024-day.css +41 -0
- data/node_modules/codemirror/theme/3024-night.css +39 -0
- data/node_modules/codemirror/theme/abcdef.css +32 -0
- data/node_modules/codemirror/theme/ambiance-mobile.css +5 -0
- data/node_modules/codemirror/theme/ambiance.css +74 -0
- data/node_modules/codemirror/theme/base16-dark.css +38 -0
- data/node_modules/codemirror/theme/base16-light.css +38 -0
- data/node_modules/codemirror/theme/bespin.css +34 -0
- data/node_modules/codemirror/theme/blackboard.css +32 -0
- data/node_modules/codemirror/theme/cobalt.css +25 -0
- data/node_modules/codemirror/theme/colorforth.css +33 -0
- data/node_modules/codemirror/theme/darcula.css +46 -0
- data/node_modules/codemirror/theme/dracula.css +40 -0
- data/node_modules/codemirror/theme/duotone-dark.css +35 -0
- data/node_modules/codemirror/theme/duotone-light.css +36 -0
- data/node_modules/codemirror/theme/eclipse.css +23 -0
- data/node_modules/codemirror/theme/elegant.css +13 -0
- data/node_modules/codemirror/theme/erlang-dark.css +34 -0
- data/node_modules/codemirror/theme/gruvbox-dark.css +37 -0
- data/node_modules/codemirror/theme/hopscotch.css +34 -0
- data/node_modules/codemirror/theme/icecoder.css +43 -0
- data/node_modules/codemirror/theme/idea.css +42 -0
- data/node_modules/codemirror/theme/isotope.css +34 -0
- data/node_modules/codemirror/theme/lesser-dark.css +47 -0
- data/node_modules/codemirror/theme/liquibyte.css +95 -0
- data/node_modules/codemirror/theme/lucario.css +37 -0
- data/node_modules/codemirror/theme/material.css +53 -0
- data/node_modules/codemirror/theme/mbo.css +37 -0
- data/node_modules/codemirror/theme/mdn-like.css +46 -0
- data/node_modules/codemirror/theme/midnight.css +43 -0
- data/node_modules/codemirror/theme/monokai.css +41 -0
- data/node_modules/codemirror/theme/neat.css +12 -0
- data/node_modules/codemirror/theme/neo.css +43 -0
- data/node_modules/codemirror/theme/night.css +27 -0
- data/node_modules/codemirror/theme/oceanic-next.css +44 -0
- data/node_modules/codemirror/theme/panda-syntax.css +85 -0
- data/node_modules/codemirror/theme/paraiso-dark.css +38 -0
- data/node_modules/codemirror/theme/paraiso-light.css +38 -0
- data/node_modules/codemirror/theme/pastel-on-dark.css +52 -0
- data/node_modules/codemirror/theme/railscasts.css +34 -0
- data/node_modules/codemirror/theme/rubyblue.css +25 -0
- data/node_modules/codemirror/theme/seti.css +44 -0
- data/node_modules/codemirror/theme/shadowfox.css +52 -0
- data/node_modules/codemirror/theme/solarized.css +168 -0
- data/node_modules/codemirror/theme/ssms.css +16 -0
- data/node_modules/codemirror/theme/the-matrix.css +30 -0
- data/node_modules/codemirror/theme/tomorrow-night-bright.css +35 -0
- data/node_modules/codemirror/theme/tomorrow-night-eighties.css +38 -0
- data/node_modules/codemirror/theme/ttcn.css +64 -0
- data/node_modules/codemirror/theme/twilight.css +32 -0
- data/node_modules/codemirror/theme/vibrant-ink.css +34 -0
- data/node_modules/codemirror/theme/xq-dark.css +53 -0
- data/node_modules/codemirror/theme/xq-light.css +43 -0
- data/node_modules/codemirror/theme/yeti.css +44 -0
- data/node_modules/codemirror/theme/zenburn.css +37 -0
- data/node_modules/marked/.editorconfig +16 -0
- data/node_modules/marked/.eslintignore +1 -0
- data/node_modules/marked/.eslintrc.json +28 -0
- data/node_modules/marked/.package 2.json.icloud +0 -0
- data/node_modules/marked/.travis.yml +47 -0
- data/node_modules/marked/Makefile +15 -0
- data/node_modules/marked/Makefile 2 +15 -0
- data/node_modules/marked/README 2.md +75 -0
- data/node_modules/marked/README.md +75 -0
- data/node_modules/marked/bin/marked +199 -0
- data/node_modules/marked/bower.json +23 -0
- data/node_modules/marked/component.json +10 -0
- data/node_modules/marked/index.js +1 -0
- data/node_modules/marked/jasmine.json +11 -0
- data/node_modules/marked/lib/marked 2.js +1604 -0
- data/node_modules/marked/lib/marked.js +1604 -0
- data/node_modules/marked/man/marked.1 +91 -0
- data/node_modules/marked/man/marked.1.txt +96 -0
- data/node_modules/marked/marked.min.js +6 -0
- data/node_modules/marked/package.json +95 -0
- data/node_modules/simplemde/.eslintrc +23 -0
- data/node_modules/simplemde/.npmignore +9 -0
- data/node_modules/simplemde/.travis.yml +18 -0
- data/node_modules/simplemde/CONTRIBUTING 2.md +10 -0
- data/node_modules/simplemde/CONTRIBUTING.md +10 -0
- data/node_modules/simplemde/LICENSE +22 -0
- data/node_modules/simplemde/README.md +331 -0
- data/node_modules/simplemde/bower.json +23 -0
- data/node_modules/simplemde/debug/.simplemde 2.css.icloud +0 -0
- data/node_modules/simplemde/debug/simplemde.css +676 -0
- data/node_modules/simplemde/debug/simplemde.debug.js +17023 -0
- data/node_modules/simplemde/debug/simplemde.js +17019 -0
- data/node_modules/simplemde/dist/simplemde.min.css +7 -0
- data/node_modules/simplemde/dist/simplemde.min.js +15 -0
- data/node_modules/simplemde/gulpfile.js +96 -0
- data/node_modules/simplemde/package.json +73 -0
- data/node_modules/simplemde/src/css/simplemde.css +328 -0
- data/node_modules/simplemde/src/js/codemirror/tablist 2.js +44 -0
- data/node_modules/simplemde/src/js/codemirror/tablist.js +44 -0
- data/node_modules/simplemde/src/js/simplemde.js +2028 -0
- data/node_modules/typo-js/README.md +45 -0
- data/node_modules/typo-js/dictionaries/en_US/.en_US 2.dic.icloud +0 -0
- data/node_modules/typo-js/dictionaries/en_US/README.md +7 -0
- data/node_modules/typo-js/dictionaries/en_US/en_US.aff +201 -0
- data/node_modules/typo-js/dictionaries/en_US/en_US.dic +62120 -0
- data/node_modules/typo-js/package.json +56 -0
- data/node_modules/typo-js/typo.js +931 -0
- data/package-lock.json +40 -0
- data/package.json +7 -0
- metadata +557 -0
@@ -0,0 +1,115 @@
|
|
1
|
+
import { chrome, gecko, ie, mac, presto, safari, webkit } from "../util/browser.js"
|
2
|
+
import { e_preventDefault } from "../util/event.js"
|
3
|
+
|
4
|
+
import { updateDisplaySimple } from "./update_display.js"
|
5
|
+
import { setScrollLeft, updateScrollTop } from "./scrolling.js"
|
6
|
+
|
7
|
+
// Since the delta values reported on mouse wheel events are
|
8
|
+
// unstandardized between browsers and even browser versions, and
|
9
|
+
// generally horribly unpredictable, this code starts by measuring
|
10
|
+
// the scroll effect that the first few mouse wheel events have,
|
11
|
+
// and, from that, detects the way it can convert deltas to pixel
|
12
|
+
// offsets afterwards.
|
13
|
+
//
|
14
|
+
// The reason we want to know the amount a wheel event will scroll
|
15
|
+
// is that it gives us a chance to update the display before the
|
16
|
+
// actual scrolling happens, reducing flickering.
|
17
|
+
|
18
|
+
let wheelSamples = 0, wheelPixelsPerUnit = null
|
19
|
+
// Fill in a browser-detected starting value on browsers where we
|
20
|
+
// know one. These don't have to be accurate -- the result of them
|
21
|
+
// being wrong would just be a slight flicker on the first wheel
|
22
|
+
// scroll (if it is large enough).
|
23
|
+
if (ie) wheelPixelsPerUnit = -.53
|
24
|
+
else if (gecko) wheelPixelsPerUnit = 15
|
25
|
+
else if (chrome) wheelPixelsPerUnit = -.7
|
26
|
+
else if (safari) wheelPixelsPerUnit = -1/3
|
27
|
+
|
28
|
+
function wheelEventDelta(e) {
|
29
|
+
let dx = e.wheelDeltaX, dy = e.wheelDeltaY
|
30
|
+
if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail
|
31
|
+
if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail
|
32
|
+
else if (dy == null) dy = e.wheelDelta
|
33
|
+
return {x: dx, y: dy}
|
34
|
+
}
|
35
|
+
export function wheelEventPixels(e) {
|
36
|
+
let delta = wheelEventDelta(e)
|
37
|
+
delta.x *= wheelPixelsPerUnit
|
38
|
+
delta.y *= wheelPixelsPerUnit
|
39
|
+
return delta
|
40
|
+
}
|
41
|
+
|
42
|
+
export function onScrollWheel(cm, e) {
|
43
|
+
let delta = wheelEventDelta(e), dx = delta.x, dy = delta.y
|
44
|
+
|
45
|
+
let display = cm.display, scroll = display.scroller
|
46
|
+
// Quit if there's nothing to scroll here
|
47
|
+
let canScrollX = scroll.scrollWidth > scroll.clientWidth
|
48
|
+
let canScrollY = scroll.scrollHeight > scroll.clientHeight
|
49
|
+
if (!(dx && canScrollX || dy && canScrollY)) return
|
50
|
+
|
51
|
+
// Webkit browsers on OS X abort momentum scrolls when the target
|
52
|
+
// of the scroll event is removed from the scrollable element.
|
53
|
+
// This hack (see related code in patchDisplay) makes sure the
|
54
|
+
// element is kept around.
|
55
|
+
if (dy && mac && webkit) {
|
56
|
+
outer: for (let cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {
|
57
|
+
for (let i = 0; i < view.length; i++) {
|
58
|
+
if (view[i].node == cur) {
|
59
|
+
cm.display.currentWheelTarget = cur
|
60
|
+
break outer
|
61
|
+
}
|
62
|
+
}
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
// On some browsers, horizontal scrolling will cause redraws to
|
67
|
+
// happen before the gutter has been realigned, causing it to
|
68
|
+
// wriggle around in a most unseemly way. When we have an
|
69
|
+
// estimated pixels/delta value, we just handle horizontal
|
70
|
+
// scrolling entirely here. It'll be slightly off from native, but
|
71
|
+
// better than glitching out.
|
72
|
+
if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {
|
73
|
+
if (dy && canScrollY)
|
74
|
+
updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit))
|
75
|
+
setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit))
|
76
|
+
// Only prevent default scrolling if vertical scrolling is
|
77
|
+
// actually possible. Otherwise, it causes vertical scroll
|
78
|
+
// jitter on OSX trackpads when deltaX is small and deltaY
|
79
|
+
// is large (issue #3579)
|
80
|
+
if (!dy || (dy && canScrollY))
|
81
|
+
e_preventDefault(e)
|
82
|
+
display.wheelStartX = null // Abort measurement, if in progress
|
83
|
+
return
|
84
|
+
}
|
85
|
+
|
86
|
+
// 'Project' the visible viewport to cover the area that is being
|
87
|
+
// scrolled into view (if we know enough to estimate it).
|
88
|
+
if (dy && wheelPixelsPerUnit != null) {
|
89
|
+
let pixels = dy * wheelPixelsPerUnit
|
90
|
+
let top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight
|
91
|
+
if (pixels < 0) top = Math.max(0, top + pixels - 50)
|
92
|
+
else bot = Math.min(cm.doc.height, bot + pixels + 50)
|
93
|
+
updateDisplaySimple(cm, {top: top, bottom: bot})
|
94
|
+
}
|
95
|
+
|
96
|
+
if (wheelSamples < 20) {
|
97
|
+
if (display.wheelStartX == null) {
|
98
|
+
display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop
|
99
|
+
display.wheelDX = dx; display.wheelDY = dy
|
100
|
+
setTimeout(() => {
|
101
|
+
if (display.wheelStartX == null) return
|
102
|
+
let movedX = scroll.scrollLeft - display.wheelStartX
|
103
|
+
let movedY = scroll.scrollTop - display.wheelStartY
|
104
|
+
let sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||
|
105
|
+
(movedX && display.wheelDX && movedX / display.wheelDX)
|
106
|
+
display.wheelStartX = display.wheelStartY = null
|
107
|
+
if (!sample) return
|
108
|
+
wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1)
|
109
|
+
++wheelSamples
|
110
|
+
}, 200)
|
111
|
+
} else {
|
112
|
+
display.wheelDX += dx; display.wheelDY += dy
|
113
|
+
}
|
114
|
+
}
|
115
|
+
}
|
@@ -0,0 +1,193 @@
|
|
1
|
+
import { addClass, elt, rmClass } from "../util/dom.js"
|
2
|
+
import { on } from "../util/event.js"
|
3
|
+
import { scrollGap, paddingVert } from "../measurement/position_measurement.js"
|
4
|
+
import { ie, ie_version, mac, mac_geMountainLion } from "../util/browser.js"
|
5
|
+
import { updateHeightsInViewport } from "./update_lines.js"
|
6
|
+
import { Delayed } from "../util/misc.js"
|
7
|
+
|
8
|
+
import { setScrollLeft, updateScrollTop } from "./scrolling.js"
|
9
|
+
|
10
|
+
// SCROLLBARS
|
11
|
+
|
12
|
+
// Prepare DOM reads needed to update the scrollbars. Done in one
|
13
|
+
// shot to minimize update/measure roundtrips.
|
14
|
+
export function measureForScrollbars(cm) {
|
15
|
+
let d = cm.display, gutterW = d.gutters.offsetWidth
|
16
|
+
let docH = Math.round(cm.doc.height + paddingVert(cm.display))
|
17
|
+
return {
|
18
|
+
clientHeight: d.scroller.clientHeight,
|
19
|
+
viewHeight: d.wrapper.clientHeight,
|
20
|
+
scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,
|
21
|
+
viewWidth: d.wrapper.clientWidth,
|
22
|
+
barLeft: cm.options.fixedGutter ? gutterW : 0,
|
23
|
+
docHeight: docH,
|
24
|
+
scrollHeight: docH + scrollGap(cm) + d.barHeight,
|
25
|
+
nativeBarWidth: d.nativeBarWidth,
|
26
|
+
gutterWidth: gutterW
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
class NativeScrollbars {
|
31
|
+
constructor(place, scroll, cm) {
|
32
|
+
this.cm = cm
|
33
|
+
let vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar")
|
34
|
+
let horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar")
|
35
|
+
vert.tabIndex = horiz.tabIndex = -1
|
36
|
+
place(vert); place(horiz)
|
37
|
+
|
38
|
+
on(vert, "scroll", () => {
|
39
|
+
if (vert.clientHeight) scroll(vert.scrollTop, "vertical")
|
40
|
+
})
|
41
|
+
on(horiz, "scroll", () => {
|
42
|
+
if (horiz.clientWidth) scroll(horiz.scrollLeft, "horizontal")
|
43
|
+
})
|
44
|
+
|
45
|
+
this.checkedZeroWidth = false
|
46
|
+
// Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).
|
47
|
+
if (ie && ie_version < 8) this.horiz.style.minHeight = this.vert.style.minWidth = "18px"
|
48
|
+
}
|
49
|
+
|
50
|
+
update(measure) {
|
51
|
+
let needsH = measure.scrollWidth > measure.clientWidth + 1
|
52
|
+
let needsV = measure.scrollHeight > measure.clientHeight + 1
|
53
|
+
let sWidth = measure.nativeBarWidth
|
54
|
+
|
55
|
+
if (needsV) {
|
56
|
+
this.vert.style.display = "block"
|
57
|
+
this.vert.style.bottom = needsH ? sWidth + "px" : "0"
|
58
|
+
let totalHeight = measure.viewHeight - (needsH ? sWidth : 0)
|
59
|
+
// A bug in IE8 can cause this value to be negative, so guard it.
|
60
|
+
this.vert.firstChild.style.height =
|
61
|
+
Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"
|
62
|
+
} else {
|
63
|
+
this.vert.style.display = ""
|
64
|
+
this.vert.firstChild.style.height = "0"
|
65
|
+
}
|
66
|
+
|
67
|
+
if (needsH) {
|
68
|
+
this.horiz.style.display = "block"
|
69
|
+
this.horiz.style.right = needsV ? sWidth + "px" : "0"
|
70
|
+
this.horiz.style.left = measure.barLeft + "px"
|
71
|
+
let totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0)
|
72
|
+
this.horiz.firstChild.style.width =
|
73
|
+
Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px"
|
74
|
+
} else {
|
75
|
+
this.horiz.style.display = ""
|
76
|
+
this.horiz.firstChild.style.width = "0"
|
77
|
+
}
|
78
|
+
|
79
|
+
if (!this.checkedZeroWidth && measure.clientHeight > 0) {
|
80
|
+
if (sWidth == 0) this.zeroWidthHack()
|
81
|
+
this.checkedZeroWidth = true
|
82
|
+
}
|
83
|
+
|
84
|
+
return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}
|
85
|
+
}
|
86
|
+
|
87
|
+
setScrollLeft(pos) {
|
88
|
+
if (this.horiz.scrollLeft != pos) this.horiz.scrollLeft = pos
|
89
|
+
if (this.disableHoriz) this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz")
|
90
|
+
}
|
91
|
+
|
92
|
+
setScrollTop(pos) {
|
93
|
+
if (this.vert.scrollTop != pos) this.vert.scrollTop = pos
|
94
|
+
if (this.disableVert) this.enableZeroWidthBar(this.vert, this.disableVert, "vert")
|
95
|
+
}
|
96
|
+
|
97
|
+
zeroWidthHack() {
|
98
|
+
let w = mac && !mac_geMountainLion ? "12px" : "18px"
|
99
|
+
this.horiz.style.height = this.vert.style.width = w
|
100
|
+
this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none"
|
101
|
+
this.disableHoriz = new Delayed
|
102
|
+
this.disableVert = new Delayed
|
103
|
+
}
|
104
|
+
|
105
|
+
enableZeroWidthBar(bar, delay, type) {
|
106
|
+
bar.style.pointerEvents = "auto"
|
107
|
+
function maybeDisable() {
|
108
|
+
// To find out whether the scrollbar is still visible, we
|
109
|
+
// check whether the element under the pixel in the bottom
|
110
|
+
// right corner of the scrollbar box is the scrollbar box
|
111
|
+
// itself (when the bar is still visible) or its filler child
|
112
|
+
// (when the bar is hidden). If it is still visible, we keep
|
113
|
+
// it enabled, if it's hidden, we disable pointer events.
|
114
|
+
let box = bar.getBoundingClientRect()
|
115
|
+
let elt = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)
|
116
|
+
: document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1)
|
117
|
+
if (elt != bar) bar.style.pointerEvents = "none"
|
118
|
+
else delay.set(1000, maybeDisable)
|
119
|
+
}
|
120
|
+
delay.set(1000, maybeDisable)
|
121
|
+
}
|
122
|
+
|
123
|
+
clear() {
|
124
|
+
let parent = this.horiz.parentNode
|
125
|
+
parent.removeChild(this.horiz)
|
126
|
+
parent.removeChild(this.vert)
|
127
|
+
}
|
128
|
+
}
|
129
|
+
|
130
|
+
class NullScrollbars {
|
131
|
+
update() { return {bottom: 0, right: 0} }
|
132
|
+
setScrollLeft() {}
|
133
|
+
setScrollTop() {}
|
134
|
+
clear() {}
|
135
|
+
}
|
136
|
+
|
137
|
+
export function updateScrollbars(cm, measure) {
|
138
|
+
if (!measure) measure = measureForScrollbars(cm)
|
139
|
+
let startWidth = cm.display.barWidth, startHeight = cm.display.barHeight
|
140
|
+
updateScrollbarsInner(cm, measure)
|
141
|
+
for (let i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {
|
142
|
+
if (startWidth != cm.display.barWidth && cm.options.lineWrapping)
|
143
|
+
updateHeightsInViewport(cm)
|
144
|
+
updateScrollbarsInner(cm, measureForScrollbars(cm))
|
145
|
+
startWidth = cm.display.barWidth; startHeight = cm.display.barHeight
|
146
|
+
}
|
147
|
+
}
|
148
|
+
|
149
|
+
// Re-synchronize the fake scrollbars with the actual size of the
|
150
|
+
// content.
|
151
|
+
function updateScrollbarsInner(cm, measure) {
|
152
|
+
let d = cm.display
|
153
|
+
let sizes = d.scrollbars.update(measure)
|
154
|
+
|
155
|
+
d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"
|
156
|
+
d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"
|
157
|
+
d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent"
|
158
|
+
|
159
|
+
if (sizes.right && sizes.bottom) {
|
160
|
+
d.scrollbarFiller.style.display = "block"
|
161
|
+
d.scrollbarFiller.style.height = sizes.bottom + "px"
|
162
|
+
d.scrollbarFiller.style.width = sizes.right + "px"
|
163
|
+
} else d.scrollbarFiller.style.display = ""
|
164
|
+
if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {
|
165
|
+
d.gutterFiller.style.display = "block"
|
166
|
+
d.gutterFiller.style.height = sizes.bottom + "px"
|
167
|
+
d.gutterFiller.style.width = measure.gutterWidth + "px"
|
168
|
+
} else d.gutterFiller.style.display = ""
|
169
|
+
}
|
170
|
+
|
171
|
+
export let scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}
|
172
|
+
|
173
|
+
export function initScrollbars(cm) {
|
174
|
+
if (cm.display.scrollbars) {
|
175
|
+
cm.display.scrollbars.clear()
|
176
|
+
if (cm.display.scrollbars.addClass)
|
177
|
+
rmClass(cm.display.wrapper, cm.display.scrollbars.addClass)
|
178
|
+
}
|
179
|
+
|
180
|
+
cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](node => {
|
181
|
+
cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller)
|
182
|
+
// Prevent clicks in the scrollbars from killing focus
|
183
|
+
on(node, "mousedown", () => {
|
184
|
+
if (cm.state.focused) setTimeout(() => cm.display.input.focus(), 0)
|
185
|
+
})
|
186
|
+
node.setAttribute("cm-not-content", "true")
|
187
|
+
}, (pos, axis) => {
|
188
|
+
if (axis == "horizontal") setScrollLeft(cm, pos)
|
189
|
+
else updateScrollTop(cm, pos)
|
190
|
+
}, cm)
|
191
|
+
if (cm.display.scrollbars.addClass)
|
192
|
+
addClass(cm.display.wrapper, cm.display.scrollbars.addClass)
|
193
|
+
}
|
@@ -0,0 +1,184 @@
|
|
1
|
+
import { Pos } from "../line/pos.js"
|
2
|
+
import { cursorCoords, displayHeight, displayWidth, estimateCoords, paddingTop, paddingVert, scrollGap, textHeight } from "../measurement/position_measurement.js"
|
3
|
+
import { gecko, phantom } from "../util/browser.js"
|
4
|
+
import { elt } from "../util/dom.js"
|
5
|
+
import { signalDOMEvent } from "../util/event.js"
|
6
|
+
|
7
|
+
import { startWorker } from "./highlight_worker.js"
|
8
|
+
import { alignHorizontally } from "./line_numbers.js"
|
9
|
+
import { updateDisplaySimple } from "./update_display.js"
|
10
|
+
|
11
|
+
// SCROLLING THINGS INTO VIEW
|
12
|
+
|
13
|
+
// If an editor sits on the top or bottom of the window, partially
|
14
|
+
// scrolled out of view, this ensures that the cursor is visible.
|
15
|
+
export function maybeScrollWindow(cm, rect) {
|
16
|
+
if (signalDOMEvent(cm, "scrollCursorIntoView")) return
|
17
|
+
|
18
|
+
let display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null
|
19
|
+
if (rect.top + box.top < 0) doScroll = true
|
20
|
+
else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false
|
21
|
+
if (doScroll != null && !phantom) {
|
22
|
+
let scrollNode = elt("div", "\u200b", null, `position: absolute;
|
23
|
+
top: ${rect.top - display.viewOffset - paddingTop(cm.display)}px;
|
24
|
+
height: ${rect.bottom - rect.top + scrollGap(cm) + display.barHeight}px;
|
25
|
+
left: ${rect.left}px; width: ${Math.max(2, rect.right - rect.left)}px;`)
|
26
|
+
cm.display.lineSpace.appendChild(scrollNode)
|
27
|
+
scrollNode.scrollIntoView(doScroll)
|
28
|
+
cm.display.lineSpace.removeChild(scrollNode)
|
29
|
+
}
|
30
|
+
}
|
31
|
+
|
32
|
+
// Scroll a given position into view (immediately), verifying that
|
33
|
+
// it actually became visible (as line heights are accurately
|
34
|
+
// measured, the position of something may 'drift' during drawing).
|
35
|
+
export function scrollPosIntoView(cm, pos, end, margin) {
|
36
|
+
if (margin == null) margin = 0
|
37
|
+
let rect
|
38
|
+
if (!cm.options.lineWrapping && pos == end) {
|
39
|
+
// Set pos and end to the cursor positions around the character pos sticks to
|
40
|
+
// If pos.sticky == "before", that is around pos.ch - 1, otherwise around pos.ch
|
41
|
+
// If pos == Pos(_, 0, "before"), pos and end are unchanged
|
42
|
+
pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos
|
43
|
+
end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos
|
44
|
+
}
|
45
|
+
for (let limit = 0; limit < 5; limit++) {
|
46
|
+
let changed = false
|
47
|
+
let coords = cursorCoords(cm, pos)
|
48
|
+
let endCoords = !end || end == pos ? coords : cursorCoords(cm, end)
|
49
|
+
rect = {left: Math.min(coords.left, endCoords.left),
|
50
|
+
top: Math.min(coords.top, endCoords.top) - margin,
|
51
|
+
right: Math.max(coords.left, endCoords.left),
|
52
|
+
bottom: Math.max(coords.bottom, endCoords.bottom) + margin}
|
53
|
+
let scrollPos = calculateScrollPos(cm, rect)
|
54
|
+
let startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft
|
55
|
+
if (scrollPos.scrollTop != null) {
|
56
|
+
updateScrollTop(cm, scrollPos.scrollTop)
|
57
|
+
if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true
|
58
|
+
}
|
59
|
+
if (scrollPos.scrollLeft != null) {
|
60
|
+
setScrollLeft(cm, scrollPos.scrollLeft)
|
61
|
+
if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true
|
62
|
+
}
|
63
|
+
if (!changed) break
|
64
|
+
}
|
65
|
+
return rect
|
66
|
+
}
|
67
|
+
|
68
|
+
// Scroll a given set of coordinates into view (immediately).
|
69
|
+
export function scrollIntoView(cm, rect) {
|
70
|
+
let scrollPos = calculateScrollPos(cm, rect)
|
71
|
+
if (scrollPos.scrollTop != null) updateScrollTop(cm, scrollPos.scrollTop)
|
72
|
+
if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft)
|
73
|
+
}
|
74
|
+
|
75
|
+
// Calculate a new scroll position needed to scroll the given
|
76
|
+
// rectangle into view. Returns an object with scrollTop and
|
77
|
+
// scrollLeft properties. When these are undefined, the
|
78
|
+
// vertical/horizontal position does not need to be adjusted.
|
79
|
+
function calculateScrollPos(cm, rect) {
|
80
|
+
let display = cm.display, snapMargin = textHeight(cm.display)
|
81
|
+
if (rect.top < 0) rect.top = 0
|
82
|
+
let screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop
|
83
|
+
let screen = displayHeight(cm), result = {}
|
84
|
+
if (rect.bottom - rect.top > screen) rect.bottom = rect.top + screen
|
85
|
+
let docBottom = cm.doc.height + paddingVert(display)
|
86
|
+
let atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin
|
87
|
+
if (rect.top < screentop) {
|
88
|
+
result.scrollTop = atTop ? 0 : rect.top
|
89
|
+
} else if (rect.bottom > screentop + screen) {
|
90
|
+
let newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen)
|
91
|
+
if (newTop != screentop) result.scrollTop = newTop
|
92
|
+
}
|
93
|
+
|
94
|
+
let screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft
|
95
|
+
let screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0)
|
96
|
+
let tooWide = rect.right - rect.left > screenw
|
97
|
+
if (tooWide) rect.right = rect.left + screenw
|
98
|
+
if (rect.left < 10)
|
99
|
+
result.scrollLeft = 0
|
100
|
+
else if (rect.left < screenleft)
|
101
|
+
result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10))
|
102
|
+
else if (rect.right > screenw + screenleft - 3)
|
103
|
+
result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw
|
104
|
+
return result
|
105
|
+
}
|
106
|
+
|
107
|
+
// Store a relative adjustment to the scroll position in the current
|
108
|
+
// operation (to be applied when the operation finishes).
|
109
|
+
export function addToScrollTop(cm, top) {
|
110
|
+
if (top == null) return
|
111
|
+
resolveScrollToPos(cm)
|
112
|
+
cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top
|
113
|
+
}
|
114
|
+
|
115
|
+
// Make sure that at the end of the operation the current cursor is
|
116
|
+
// shown.
|
117
|
+
export function ensureCursorVisible(cm) {
|
118
|
+
resolveScrollToPos(cm)
|
119
|
+
let cur = cm.getCursor()
|
120
|
+
cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin}
|
121
|
+
}
|
122
|
+
|
123
|
+
export function scrollToCoords(cm, x, y) {
|
124
|
+
if (x != null || y != null) resolveScrollToPos(cm)
|
125
|
+
if (x != null) cm.curOp.scrollLeft = x
|
126
|
+
if (y != null) cm.curOp.scrollTop = y
|
127
|
+
}
|
128
|
+
|
129
|
+
export function scrollToRange(cm, range) {
|
130
|
+
resolveScrollToPos(cm)
|
131
|
+
cm.curOp.scrollToPos = range
|
132
|
+
}
|
133
|
+
|
134
|
+
// When an operation has its scrollToPos property set, and another
|
135
|
+
// scroll action is applied before the end of the operation, this
|
136
|
+
// 'simulates' scrolling that position into view in a cheap way, so
|
137
|
+
// that the effect of intermediate scroll commands is not ignored.
|
138
|
+
function resolveScrollToPos(cm) {
|
139
|
+
let range = cm.curOp.scrollToPos
|
140
|
+
if (range) {
|
141
|
+
cm.curOp.scrollToPos = null
|
142
|
+
let from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to)
|
143
|
+
scrollToCoordsRange(cm, from, to, range.margin)
|
144
|
+
}
|
145
|
+
}
|
146
|
+
|
147
|
+
export function scrollToCoordsRange(cm, from, to, margin) {
|
148
|
+
let sPos = calculateScrollPos(cm, {
|
149
|
+
left: Math.min(from.left, to.left),
|
150
|
+
top: Math.min(from.top, to.top) - margin,
|
151
|
+
right: Math.max(from.right, to.right),
|
152
|
+
bottom: Math.max(from.bottom, to.bottom) + margin
|
153
|
+
})
|
154
|
+
scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop)
|
155
|
+
}
|
156
|
+
|
157
|
+
// Sync the scrollable area and scrollbars, ensure the viewport
|
158
|
+
// covers the visible area.
|
159
|
+
export function updateScrollTop(cm, val) {
|
160
|
+
if (Math.abs(cm.doc.scrollTop - val) < 2) return
|
161
|
+
if (!gecko) updateDisplaySimple(cm, {top: val})
|
162
|
+
setScrollTop(cm, val, true)
|
163
|
+
if (gecko) updateDisplaySimple(cm)
|
164
|
+
startWorker(cm, 100)
|
165
|
+
}
|
166
|
+
|
167
|
+
export function setScrollTop(cm, val, forceScroll) {
|
168
|
+
val = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val)
|
169
|
+
if (cm.display.scroller.scrollTop == val && !forceScroll) return
|
170
|
+
cm.doc.scrollTop = val
|
171
|
+
cm.display.scrollbars.setScrollTop(val)
|
172
|
+
if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val
|
173
|
+
}
|
174
|
+
|
175
|
+
// Sync scroller and scrollbar, ensure the gutter elements are
|
176
|
+
// aligned.
|
177
|
+
export function setScrollLeft(cm, val, isScroller, forceScroll) {
|
178
|
+
val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth)
|
179
|
+
if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) return
|
180
|
+
cm.doc.scrollLeft = val
|
181
|
+
alignHorizontally(cm)
|
182
|
+
if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val
|
183
|
+
cm.display.scrollbars.setScrollLeft(val)
|
184
|
+
}
|