├── .github └── workflows │ └── pages.yml ├── .gitignore ├── LICENSE ├── Makefile ├── README.md ├── functions ├── .gitignore ├── Makefile ├── packages │ ├── godot │ │ ├── gdscript │ │ │ ├── __main__.py │ │ │ └── gdscript.py │ │ └── version │ │ │ ├── __main__.py │ │ │ └── godot_version.py │ └── share │ │ ├── gist │ │ └── __main__.py │ │ └── rentry │ │ ├── __main__.py │ │ └── rentry.py └── project.yml └── web ├── .gitignore ├── Makefile ├── build.mk ├── data ├── default_code.yml └── snippets.yml ├── includes ├── ads.html.j2 ├── editors.html.j2 ├── navbar.html.j2 ├── repo-badge.html.j2 └── share-modal.html.j2 ├── layouts ├── app.html.j2 └── base.html.j2 ├── site.yml └── src ├── 404.html.j2 ├── ads.txt ├── css └── playground.css ├── img ├── favicon.png ├── godette.png └── spinner.gif ├── index.html.j2 ├── js ├── scripteditor.js.j2 ├── scriptimport.js.j2 ├── scriptoutput.js.j2 └── snippets.js.j2 └── lib ├── bootstrap ├── bootstrap.min.css └── bootstrap.min.js ├── codemirror ├── .editorconfig ├── .gitattributes ├── .npmignore ├── AUTHORS ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── addon │ ├── comment │ │ ├── comment.js │ │ └── continuecomment.js │ ├── dialog │ │ ├── dialog.css │ │ └── dialog.js │ ├── display │ │ ├── autorefresh.js │ │ ├── fullscreen.css │ │ ├── fullscreen.js │ │ ├── panel.js │ │ ├── placeholder.js │ │ └── rulers.js │ ├── edit │ │ ├── closebrackets.js │ │ ├── closetag.js │ │ ├── continuelist.js │ │ ├── matchbrackets.js │ │ ├── matchtags.js │ │ └── trailingspace.js │ ├── fold │ │ ├── brace-fold.js │ │ ├── comment-fold.js │ │ ├── foldcode.js │ │ ├── foldgutter.css │ │ ├── foldgutter.js │ │ ├── indent-fold.js │ │ ├── markdown-fold.js │ │ └── xml-fold.js │ ├── hint │ │ ├── anyword-hint.js │ │ ├── css-hint.js │ │ ├── html-hint.js │ │ ├── javascript-hint.js │ │ ├── show-hint.css │ │ ├── show-hint.js │ │ ├── sql-hint.js │ │ └── xml-hint.js │ ├── lint │ │ ├── coffeescript-lint.js │ │ ├── css-lint.js │ │ ├── html-lint.js │ │ ├── javascript-lint.js │ │ ├── json-lint.js │ │ ├── lint.css │ │ ├── lint.js │ │ └── yaml-lint.js │ ├── merge │ │ ├── merge.css │ │ └── merge.js │ ├── mode │ │ ├── loadmode.js │ │ ├── multiplex.js │ │ ├── multiplex_test.js │ │ ├── overlay.js │ │ └── simple.js │ ├── runmode │ │ ├── colorize.js │ │ ├── runmode-standalone.js │ │ ├── runmode.js │ │ └── runmode.node.js │ ├── scroll │ │ ├── annotatescrollbar.js │ │ ├── scrollpastend.js │ │ ├── simplescrollbars.css │ │ └── simplescrollbars.js │ ├── search │ │ ├── jump-to-line.js │ │ ├── match-highlighter.js │ │ ├── matchesonscrollbar.css │ │ ├── matchesonscrollbar.js │ │ ├── search.js │ │ └── searchcursor.js │ ├── selection │ │ ├── active-line.js │ │ ├── mark-selection.js │ │ └── selection-pointer.js │ ├── tern │ │ ├── tern.css │ │ ├── tern.js │ │ └── worker.js │ └── wrap │ │ └── hardwrap.js ├── bin │ ├── authors.sh │ ├── lint │ ├── release │ ├── source-highlight │ └── upload-release.js ├── demo │ ├── activeline.html │ ├── anywordhint.html │ ├── bidi.html │ ├── btree.html │ ├── buffers.html │ ├── changemode.html │ ├── closebrackets.html │ ├── closetag.html │ ├── complete.html │ ├── emacs.html │ ├── folding.html │ ├── fullscreen.html │ ├── hardwrap.html │ ├── html5complete.html │ ├── indentwrap.html │ ├── lint.html │ ├── loadmode.html │ ├── marker.html │ ├── markselection.html │ ├── matchhighlighter.html │ ├── matchtags.html │ ├── merge.html │ ├── multiplex.html │ ├── mustache.html │ ├── panel.html │ ├── placeholder.html │ ├── preview.html │ ├── requirejs.html │ ├── resize.html │ ├── rulers.html │ ├── runmode-standalone.html │ ├── runmode.html │ ├── search.html │ ├── simplemode.html │ ├── simplescrollbars.html │ ├── spanaffectswrapping_shim.html │ ├── sublime.html │ ├── tern.html │ ├── theme.html │ ├── trailingspace.html │ ├── variableheight.html │ ├── vim.html │ ├── visibletabs.html │ ├── widget.html │ └── xmlcomplete.html ├── doc │ ├── activebookmark.js │ ├── docs.css │ ├── internals.html │ ├── logo.png │ ├── logo.svg │ ├── manual.html │ ├── realworld.html │ ├── releases.html │ ├── reporting.html │ ├── source_sans.woff │ ├── upgrade_v2.2.html │ ├── upgrade_v3.html │ ├── upgrade_v4.html │ └── yinyang.png ├── index.html ├── keymap │ ├── emacs.js │ ├── sublime.js │ └── vim.js ├── lib │ ├── codemirror.css │ └── codemirror.js ├── mode │ ├── apl │ │ ├── apl.js │ │ └── index.html │ ├── asciiarmor │ │ ├── asciiarmor.js │ │ └── index.html │ ├── asn.1 │ │ ├── asn.1.js │ │ └── index.html │ ├── asterisk │ │ ├── asterisk.js │ │ └── index.html │ ├── brainfuck │ │ ├── brainfuck.js │ │ └── index.html │ ├── clike │ │ ├── clike.js │ │ ├── index.html │ │ ├── scala.html │ │ └── test.js │ ├── clojure │ │ ├── clojure.js │ │ ├── index.html │ │ └── test.js │ ├── cmake │ │ ├── cmake.js │ │ └── index.html │ ├── cobol │ │ ├── cobol.js │ │ └── index.html │ ├── coffeescript │ │ ├── coffeescript.js │ │ └── index.html │ ├── commonlisp │ │ ├── commonlisp.js │ │ └── index.html │ ├── crystal │ │ ├── crystal.js │ │ └── index.html │ ├── css │ │ ├── css.js │ │ ├── gss.html │ │ ├── gss_test.js │ │ ├── index.html │ │ ├── less.html │ │ ├── less_test.js │ │ ├── scss.html │ │ ├── scss_test.js │ │ └── test.js │ ├── cypher │ │ ├── cypher.js │ │ ├── index.html │ │ └── test.js │ ├── d │ │ ├── d.js │ │ ├── index.html │ │ └── test.js │ ├── dart │ │ ├── dart.js │ │ └── index.html │ ├── diff │ │ ├── diff.js │ │ └── index.html │ ├── django │ │ ├── django.js │ │ └── index.html │ ├── dockerfile │ │ ├── dockerfile.js │ │ ├── index.html │ │ └── test.js │ ├── dtd │ │ ├── dtd.js │ │ └── index.html │ ├── dylan │ │ ├── dylan.js │ │ ├── index.html │ │ └── test.js │ ├── ebnf │ │ ├── ebnf.js │ │ └── index.html │ ├── ecl │ │ ├── ecl.js │ │ └── index.html │ ├── eiffel │ │ ├── eiffel.js │ │ └── index.html │ ├── elm │ │ ├── elm.js │ │ └── index.html │ ├── erlang │ │ ├── erlang.js │ │ └── index.html │ ├── factor │ │ ├── factor.js │ │ └── index.html │ ├── fcl │ │ ├── fcl.js │ │ └── index.html │ ├── forth │ │ ├── forth.js │ │ └── index.html │ ├── fortran │ │ ├── fortran.js │ │ └── index.html │ ├── gas │ │ ├── gas.js │ │ └── index.html │ ├── gdscript │ │ ├── gdscript.js │ │ ├── index.html │ │ └── test.js │ ├── gfm │ │ ├── gfm.js │ │ ├── index.html │ │ └── test.js │ ├── gherkin │ │ ├── gherkin.js │ │ └── index.html │ ├── go │ │ ├── go.js │ │ └── index.html │ ├── groovy │ │ ├── groovy.js │ │ └── index.html │ ├── haml │ │ ├── haml.js │ │ ├── index.html │ │ └── test.js │ ├── handlebars │ │ ├── handlebars.js │ │ └── index.html │ ├── haskell-literate │ │ ├── haskell-literate.js │ │ └── index.html │ ├── haskell │ │ ├── haskell.js │ │ └── index.html │ ├── haxe │ │ ├── haxe.js │ │ └── index.html │ ├── htmlembedded │ │ ├── htmlembedded.js │ │ └── index.html │ ├── htmlmixed │ │ ├── htmlmixed.js │ │ └── index.html │ ├── http │ │ ├── http.js │ │ └── index.html │ ├── idl │ │ ├── idl.js │ │ └── index.html │ ├── index.html │ ├── javascript │ │ ├── index.html │ │ ├── javascript.js │ │ ├── json-ld.html │ │ ├── test.js │ │ └── typescript.html │ ├── jinja2 │ │ ├── index.html │ │ └── jinja2.js │ ├── jsx │ │ ├── index.html │ │ ├── jsx.js │ │ └── test.js │ ├── julia │ │ ├── index.html │ │ └── julia.js │ ├── livescript │ │ ├── index.html │ │ └── livescript.js │ ├── lua │ │ ├── index.html │ │ └── lua.js │ ├── markdown │ │ ├── index.html │ │ ├── markdown.js │ │ └── test.js │ ├── mathematica │ │ ├── index.html │ │ └── mathematica.js │ ├── mbox │ │ ├── index.html │ │ └── mbox.js │ ├── meta.js │ ├── mirc │ │ ├── index.html │ │ └── mirc.js │ ├── mllike │ │ ├── index.html │ │ └── mllike.js │ ├── modelica │ │ ├── index.html │ │ └── modelica.js │ ├── mscgen │ │ ├── index.html │ │ ├── mscgen.js │ │ ├── mscgen_test.js │ │ ├── msgenny_test.js │ │ └── xu_test.js │ ├── mumps │ │ ├── index.html │ │ └── mumps.js │ ├── nginx │ │ ├── index.html │ │ └── nginx.js │ ├── nsis │ │ ├── index.html │ │ └── nsis.js │ ├── ntriples │ │ ├── index.html │ │ └── ntriples.js │ ├── octave │ │ ├── index.html │ │ └── octave.js │ ├── oz │ │ ├── index.html │ │ └── oz.js │ ├── pascal │ │ ├── index.html │ │ └── pascal.js │ ├── pegjs │ │ ├── index.html │ │ └── pegjs.js │ ├── perl │ │ ├── index.html │ │ └── perl.js │ ├── php │ │ ├── index.html │ │ ├── php.js │ │ └── test.js │ ├── pig │ │ ├── index.html │ │ └── pig.js │ ├── powershell │ │ ├── index.html │ │ ├── powershell.js │ │ └── test.js │ ├── properties │ │ ├── index.html │ │ └── properties.js │ ├── protobuf │ │ ├── index.html │ │ └── protobuf.js │ ├── pug │ │ ├── index.html │ │ └── pug.js │ ├── puppet │ │ ├── index.html │ │ └── puppet.js │ ├── python │ │ ├── index.html │ │ ├── python.js │ │ └── test.js │ ├── q │ │ ├── index.html │ │ └── q.js │ ├── r │ │ ├── index.html │ │ └── r.js │ ├── rpm │ │ ├── changes │ │ │ └── index.html │ │ ├── index.html │ │ └── rpm.js │ ├── rst │ │ ├── index.html │ │ └── rst.js │ ├── ruby │ │ ├── index.html │ │ ├── ruby.js │ │ └── test.js │ ├── rust │ │ ├── index.html │ │ ├── rust.js │ │ └── test.js │ ├── sas │ │ ├── index.html │ │ └── sas.js │ ├── sass │ │ ├── index.html │ │ ├── sass.js │ │ └── test.js │ ├── scheme │ │ ├── index.html │ │ └── scheme.js │ ├── shell │ │ ├── index.html │ │ ├── shell.js │ │ └── test.js │ ├── sieve │ │ ├── index.html │ │ └── sieve.js │ ├── slim │ │ ├── index.html │ │ ├── slim.js │ │ └── test.js │ ├── smalltalk │ │ ├── index.html │ │ └── smalltalk.js │ ├── smarty │ │ ├── index.html │ │ └── smarty.js │ ├── solr │ │ ├── index.html │ │ └── solr.js │ ├── soy │ │ ├── index.html │ │ ├── soy.js │ │ └── test.js │ ├── sparql │ │ ├── index.html │ │ └── sparql.js │ ├── spreadsheet │ │ ├── index.html │ │ └── spreadsheet.js │ ├── sql │ │ ├── index.html │ │ └── sql.js │ ├── stex │ │ ├── index.html │ │ ├── stex.js │ │ └── test.js │ ├── stylus │ │ ├── index.html │ │ └── stylus.js │ ├── swift │ │ ├── index.html │ │ ├── swift.js │ │ └── test.js │ ├── tcl │ │ ├── index.html │ │ └── tcl.js │ ├── textile │ │ ├── index.html │ │ ├── test.js │ │ └── textile.js │ ├── tiddlywiki │ │ ├── index.html │ │ ├── tiddlywiki.css │ │ └── tiddlywiki.js │ ├── tiki │ │ ├── index.html │ │ ├── tiki.css │ │ └── tiki.js │ ├── toml │ │ ├── index.html │ │ └── toml.js │ ├── tornado │ │ ├── index.html │ │ └── tornado.js │ ├── troff │ │ ├── index.html │ │ └── troff.js │ ├── ttcn-cfg │ │ ├── index.html │ │ └── ttcn-cfg.js │ ├── ttcn │ │ ├── index.html │ │ └── ttcn.js │ ├── turtle │ │ ├── index.html │ │ └── turtle.js │ ├── twig │ │ ├── index.html │ │ └── twig.js │ ├── vb │ │ ├── index.html │ │ └── vb.js │ ├── vbscript │ │ ├── index.html │ │ └── vbscript.js │ ├── velocity │ │ ├── index.html │ │ └── velocity.js │ ├── verilog │ │ ├── index.html │ │ ├── test.js │ │ └── verilog.js │ ├── vhdl │ │ ├── index.html │ │ └── vhdl.js │ ├── vue │ │ ├── index.html │ │ └── vue.js │ ├── wast │ │ ├── index.html │ │ ├── test.js │ │ └── wast.js │ ├── webidl │ │ ├── index.html │ │ └── webidl.js │ ├── xml │ │ ├── index.html │ │ ├── test.js │ │ └── xml.js │ ├── xquery │ │ ├── index.html │ │ ├── test.js │ │ └── xquery.js │ ├── yacas │ │ ├── index.html │ │ └── yacas.js │ ├── yaml-frontmatter │ │ ├── index.html │ │ └── yaml-frontmatter.js │ ├── yaml │ │ ├── index.html │ │ └── yaml.js │ └── z80 │ │ ├── index.html │ │ └── z80.js ├── package.json ├── rollup.config.js ├── src │ ├── addon │ │ └── runmode │ │ │ ├── codemirror-standalone.js │ │ │ ├── codemirror.node.js │ │ │ ├── runmode-standalone.js │ │ │ └── runmode.node.js │ ├── codemirror.js │ ├── display │ │ ├── Display.js │ │ ├── focus.js │ │ ├── gutters.js │ │ ├── highlight_worker.js │ │ ├── line_numbers.js │ │ ├── mode_state.js │ │ ├── operations.js │ │ ├── scroll_events.js │ │ ├── scrollbars.js │ │ ├── scrolling.js │ │ ├── selection.js │ │ ├── update_display.js │ │ ├── update_line.js │ │ ├── update_lines.js │ │ └── view_tracking.js │ ├── edit │ │ ├── CodeMirror.js │ │ ├── commands.js │ │ ├── deleteNearSelection.js │ │ ├── drop_events.js │ │ ├── fromTextArea.js │ │ ├── global_events.js │ │ ├── key_events.js │ │ ├── legacy.js │ │ ├── main.js │ │ ├── methods.js │ │ ├── mouse_events.js │ │ ├── options.js │ │ └── utils.js │ ├── input │ │ ├── ContentEditableInput.js │ │ ├── TextareaInput.js │ │ ├── indent.js │ │ ├── input.js │ │ ├── keymap.js │ │ ├── keynames.js │ │ └── movement.js │ ├── line │ │ ├── highlight.js │ │ ├── line_data.js │ │ ├── pos.js │ │ ├── saw_special_spans.js │ │ ├── spans.js │ │ └── utils_line.js │ ├── measurement │ │ ├── position_measurement.js │ │ └── widgets.js │ ├── model │ │ ├── Doc.js │ │ ├── change_measurement.js │ │ ├── changes.js │ │ ├── chunk.js │ │ ├── document_data.js │ │ ├── history.js │ │ ├── line_widget.js │ │ ├── mark_text.js │ │ ├── selection.js │ │ └── selection_updates.js │ ├── modes.js │ └── util │ │ ├── StringStream.js │ │ ├── bidi.js │ │ ├── browser.js │ │ ├── dom.js │ │ ├── event.js │ │ ├── feature_detection.js │ │ ├── misc.js │ │ └── operation_group.js ├── test │ ├── annotatescrollbar.js │ ├── comment_test.js │ ├── contenteditable_test.js │ ├── doc_test.js │ ├── driver.js │ ├── emacs_test.js │ ├── html-hint-test.js │ ├── index.html │ ├── lint.js │ ├── mode_test.css │ ├── mode_test.js │ ├── multi_test.js │ ├── run.js │ ├── scroll_test.js │ ├── search_test.js │ ├── sql-hint-test.js │ ├── sublime_test.js │ └── test.js └── theme │ ├── 3024-day.css │ ├── 3024-night.css │ ├── abbott.css │ ├── abcdef.css │ ├── ambiance-mobile.css │ ├── ambiance.css │ ├── ayu-dark.css │ ├── ayu-mirage.css │ ├── base16-dark.css │ ├── base16-light.css │ ├── bespin.css │ ├── blackboard.css │ ├── cobalt.css │ ├── colorforth.css │ ├── darcula.css │ ├── dracula.css │ ├── duotone-dark.css │ ├── duotone-light.css │ ├── eclipse.css │ ├── elegant.css │ ├── erlang-dark.css │ ├── gruvbox-dark.css │ ├── hopscotch.css │ ├── icecoder.css │ ├── idea.css │ ├── isotope.css │ ├── juejin.css │ ├── lesser-dark.css │ ├── liquibyte.css │ ├── lucario.css │ ├── material-darker.css │ ├── material-ocean.css │ ├── material-palenight.css │ ├── material.css │ ├── mbo.css │ ├── mdn-like.css │ ├── midnight.css │ ├── monokai.css │ ├── moxer.css │ ├── neat.css │ ├── neo.css │ ├── night.css │ ├── nord.css │ ├── oceanic-next.css │ ├── panda-syntax.css │ ├── paraiso-dark.css │ ├── paraiso-light.css │ ├── pastel-on-dark.css │ ├── railscasts.css │ ├── rubyblue.css │ ├── seti.css │ ├── shadowfox.css │ ├── solarized.css │ ├── ssms.css │ ├── the-matrix.css │ ├── tomorrow-night-bright.css │ ├── tomorrow-night-eighties.css │ ├── ttcn.css │ ├── twilight.css │ ├── vibrant-ink.css │ ├── xq-dark.css │ ├── xq-light.css │ ├── yeti.css │ ├── yonce.css │ └── zenburn.css ├── jquery.min.js ├── libs.txt └── lz-string.min.js /.github/workflows/pages.yml: -------------------------------------------------------------------------------- 1 | name: Deploy to Pages 2 | 3 | on: 4 | push: 5 | branches: 6 | - "prod" 7 | paths: 8 | - "web/**" 9 | - ".github/**" 10 | workflow_dispatch: 11 | 12 | concurrency: 13 | group: "pages" 14 | cancel-in-progress: true 15 | 16 | jobs: 17 | build: 18 | runs-on: ubuntu-latest 19 | steps: 20 | - name: Checkout 21 | uses: actions/checkout@v3 22 | - name: Setup Pages 23 | uses: actions/configure-pages@v1 24 | - name: Install fd 25 | uses: baptiste0928/cargo-install@v1 26 | with: 27 | crate: fd-find 28 | - name: Install yj 29 | uses: baptiste0928/cargo-install@v1 30 | with: 31 | crate: yj 32 | - name: Install jinja2 33 | run: pip install jinja2-cli 34 | - name: Build Site 35 | id: build 36 | run: make site 37 | - name: Upload artifact 38 | id: deployment 39 | uses: actions/upload-pages-artifact@v3 40 | with: 41 | path: "web/out" 42 | 43 | deploy: 44 | permissions: 45 | pages: write 46 | id-token: write 47 | environment: 48 | name: github-pages 49 | url: ${{ steps.deployment.outputs.page_url }} 50 | runs-on: ubuntu-latest 51 | needs: build 52 | steps: 53 | - name: Deploy to GitHub Pages 54 | id: deployment 55 | uses: actions/deploy-pages@main 56 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.gitignore.io/api/python 3 | 4 | ### Python ### 5 | # Byte-compiled / optimized / DLL files 6 | __pycache__/ 7 | *.py[cod] 8 | *$py.class 9 | 10 | # C extensions 11 | *.so 12 | 13 | # Distribution / packaging 14 | .Python 15 | env/ 16 | build/ 17 | develop-eggs/ 18 | dist/ 19 | downloads/ 20 | eggs/ 21 | .eggs/ 22 | 23 | lib64/ 24 | parts/ 25 | sdist/ 26 | var/ 27 | wheels/ 28 | *.egg-info/ 29 | .installed.cfg 30 | *.egg 31 | 32 | # PyInstaller 33 | # Usually these files are written by a python script from a template 34 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 35 | *.manifest 36 | *.spec 37 | 38 | # Installer logs 39 | pip-log.txt 40 | pip-delete-this-directory.txt 41 | 42 | # Unit test / coverage reports 43 | htmlcov/ 44 | .tox/ 45 | .coverage 46 | .coverage.* 47 | .cache 48 | nosetests.xml 49 | coverage.xml 50 | *,cover 51 | .hypothesis/ 52 | 53 | # Translations 54 | *.mo 55 | *.pot 56 | 57 | # Django stuff: 58 | *.log 59 | local_settings.py 60 | 61 | # Flask stuff: 62 | instance/ 63 | .webassets-cache 64 | 65 | # Scrapy stuff: 66 | .scrapy 67 | 68 | # Sphinx documentation 69 | docs/_build/ 70 | 71 | # PyBuilder 72 | target/ 73 | 74 | # Jupyter Notebook 75 | .ipynb_checkpoints 76 | 77 | # pyenv 78 | .python-version 79 | 80 | # celery beat schedule file 81 | celerybeat-schedule 82 | 83 | # dotenv 84 | .env 85 | 86 | # virtualenv 87 | .venv 88 | venv/ 89 | ENV/ 90 | 91 | # Spyder project settings 92 | .spyderproject 93 | 94 | # Rope project settings 95 | .ropeproject 96 | 97 | # Nodejs 98 | 99 | node_modules/ 100 | 101 | # Editors 102 | .vscode/ 103 | 104 | # Database 105 | *.db 106 | *.sqlite3 107 | 108 | *.cuda-proj -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Do-License 2 | 3 | 2022 - William Tumeo 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to no conditions. 11 | 12 | The above notice and this permission notice can be included in all 13 | copies or substantial portions of the Software, but only if you so desire. 14 | Do as you wish. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 20 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | PROD := no 2 | NAMESPACE = gdscript-playground 3 | ifneq (${PROD}, yes) 4 | NAMESPACE = gdscript-playground-devel 5 | endif 6 | 7 | site: 8 | @make -C web 9 | 10 | deploy: connect 11 | @doctl sls deploy functions 12 | 13 | connect: 14 | @doctl sls connect ${NAMESPACE} 15 | 16 | .PHONY: site connect deploy 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # GDScript Playground 🤖 2 | 3 | Web server implementation of the [GDScript CLI Wrapper](https://github.com/williamd1k0/gdscript-cli). 4 | 5 | [![Deploy to Pages](https://github.com/williamd1k0/gdscript-playground/actions/workflows/pages.yml/badge.svg?branch=web-functions)](https://github.com/williamd1k0/gdscript-playground/actions/workflows/pages.yml) 6 | 7 | ![python](https://img.shields.io/badge/python-3.5%2B-blue.svg?style=flat-square) 8 | ![godot](https://img.shields.io/badge/Godot-3.0%2B-blue.svg?style=flat-square) 9 | ![license](https://img.shields.io/badge/License-Do--License-lightgray.svg?style=flat-square) 10 | [![Donations](https://img.shields.io/badge/Donations-USD%2FBRL%2FBTC%2FBCH-%238571aa?style=flat-square)](https://tumeo.space/donations/) -------------------------------------------------------------------------------- /functions/.gitignore: -------------------------------------------------------------------------------- 1 | .nimbella 2 | .deployed 3 | __deployer__.zip 4 | __pycache__/ 5 | node_modules 6 | package-lock.json 7 | .DS_Store 8 | *.bin 9 | bin/ 10 | -------------------------------------------------------------------------------- /functions/Makefile: -------------------------------------------------------------------------------- 1 | GODOT_BIN := ./bin/linux_release.x86_64 2 | BIN_TARGET := packages/godot/gdscript/godot.bin 3 | VERSION_TARGET := packages/godot/version/godot_version.py 4 | 5 | all: ${BIN_TARGET} ${VERSION_TARGET} 6 | 7 | ${BIN_TARGET}: ${GODOT_BIN} 8 | rm -f -- $@ 9 | upx -9 -o $@ $< 10 | 11 | ${VERSION_TARGET}: ${GODOT_BIN} 12 | printf 'GODOT_VERSION = "%s"' '$(shell $< --version | sed s/.custom_build//)' > $@ 13 | -------------------------------------------------------------------------------- /functions/packages/godot/gdscript/__main__.py: -------------------------------------------------------------------------------- 1 | import os 2 | import stat 3 | import json 4 | from gdscript import GDSCriptCLI 5 | 6 | 7 | def main(args): 8 | godot_bin = "./godot.bin" 9 | st = os.stat(godot_bin) 10 | os.chmod(godot_bin, st.st_mode | stat.S_IEXEC) 11 | code = args.get("code") 12 | if code is not None: 13 | print(code) 14 | gds = GDSCriptCLI(godot_bin, json=True, timeout=10) 15 | output = gds.block(code, sys_exit=False)[0] 16 | return { "body": json.loads(output) } 17 | return { "body": "" } 18 | -------------------------------------------------------------------------------- /functions/packages/godot/version/__main__.py: -------------------------------------------------------------------------------- 1 | from godot_version import GODOT_VERSION 2 | 3 | def main(args): 4 | return {"body": GODOT_VERSION} 5 | -------------------------------------------------------------------------------- /functions/packages/godot/version/godot_version.py: -------------------------------------------------------------------------------- 1 | GODOT_VERSION = "4.4.stable.official.4c311cbee" -------------------------------------------------------------------------------- /functions/packages/share/gist/__main__.py: -------------------------------------------------------------------------------- 1 | import urllib.request 2 | 3 | def main(args): 4 | url = "https://gist.githubusercontent.com/%s/raw/" 5 | response = urllib.request.urlopen(url % args.get("id")) 6 | text = response.read().decode('utf-8') 7 | return { 8 | "body": text, 9 | } 10 | -------------------------------------------------------------------------------- /functions/packages/share/rentry/__main__.py: -------------------------------------------------------------------------------- 1 | from rentry import raw 2 | 3 | def main(args): 4 | response = raw(args.get("id")) 5 | return { 6 | "body": response['content'], 7 | "statusCode": int(response['status']) 8 | } 9 | -------------------------------------------------------------------------------- /functions/project.yml: -------------------------------------------------------------------------------- 1 | environment: {} 2 | parameters: {} 3 | packages: 4 | - name: godot 5 | environment: {} 6 | parameters: {} 7 | annotations: {} 8 | functions: 9 | - name: version 10 | binary: false 11 | main: '' 12 | runtime: 'python:default' 13 | web: true 14 | parameters: {} 15 | environment: {} 16 | annotations: {} 17 | limits: {} 18 | - name: gdscript 19 | binary: false 20 | main: '' 21 | runtime: 'python:default' 22 | web: true 23 | parameters: {} 24 | environment: {} 25 | annotations: {} 26 | limits: {} 27 | - name: share 28 | environment: {} 29 | parameters: {} 30 | annotations: {} 31 | functions: 32 | - name: rentry 33 | binary: false 34 | main: '' 35 | runtime: 'python:default' 36 | web: true 37 | parameters: {} 38 | environment: {} 39 | annotations: {} 40 | limits: {} 41 | - name: gist 42 | binary: false 43 | main: '' 44 | runtime: 'python:default' 45 | web: true 46 | parameters: {} 47 | environment: {} 48 | annotations: {} 49 | limits: {} 50 | -------------------------------------------------------------------------------- /web/.gitignore: -------------------------------------------------------------------------------- 1 | .cahce/ 2 | out/ 3 | -------------------------------------------------------------------------------- /web/build.mk: -------------------------------------------------------------------------------- 1 | SITE_CONF := site.yml 2 | INCLUDES := layouts includes 3 | EXCLUDES := 4 | SRC := src 5 | DATA := data 6 | OUT := out 7 | CACHE := .cache 8 | -------------------------------------------------------------------------------- /web/data/default_code.yml: -------------------------------------------------------------------------------- 1 | code: |- 2 | extends Node 3 | 4 | # class member variables go here, for example: 5 | # var a = 2 6 | # var b = "textvar" 7 | 8 | func _ready(): 9 | # Called every time the node is added to the scene. 10 | # Initialization here 11 | pass 12 | -------------------------------------------------------------------------------- /web/data/snippets.yml: -------------------------------------------------------------------------------- 1 | - name: Hello World 2 | code: |- 3 | extends Node 4 | # - Hello, World! 5 | # The well-known "Hello, World" program. 6 | 7 | func _ready(): 8 | # Called every time the node is added to the scene. 9 | print("Hello, World!") 10 | 11 | - name: Arrays 12 | code: |- 13 | extends Node 14 | # - Array 15 | # Generic sequence of arbitrary object types. 16 | # The array can resize dynamically. 17 | # Arrays are indexed starting from index 0. 18 | # Negative indices count from the end. 19 | # Related docs: https://docs.godotengine.org/en/stable/classes/class_array.html 20 | 21 | func _ready(): 22 | var arr = [] 23 | arr = [1, 2, 3] 24 | var b = arr[1] # This is 2. 25 | var c = arr[arr.size() - 1] # This is 3. 26 | var d = arr[-1] # Same as the previous line, but shorter. 27 | prints(b, c, d) 28 | arr[0] = "Hi!" # Replacing value 1 with "Hi!". 29 | arr.append(4) # Array is now ["Hi!", 2, 3, 4]. 30 | prints(arr) 31 | 32 | - name: Dictionaries 33 | code: |- 34 | extends Node 35 | # - Dictionary", 36 | # Associative container which contains values referenced by unique keys. 37 | # Dictionary are composed of pairs of keys (which must be unique) and values. 38 | # Related docs: https://docs.godotengine.org/en/stable/classes/class_dictionary.html 39 | 40 | func _ready(): 41 | # Define a new Dictionary using curly braces {} 42 | var d = {"A key": "A value", 4: 5, 28: [1, 2, 3]} 43 | d["Hi!"] = 0 # Insert new key-value pair 44 | prints(d) 45 | prints(d["Hi!"]) 46 | d = { 47 | 22: "value", 48 | "some_key": 2, 49 | "other_key": [2, 3, 4], 50 | "more_key": "Hello" 51 | } 52 | prints(d.keys()) # Get all keys as an array 53 | prints(d.values()) # Get all values as an array 54 | -------------------------------------------------------------------------------- /web/includes/ads.html.j2: -------------------------------------------------------------------------------- 1 | {% if site.ads_enabled %} 2 | 3 |
4 | {% if site.custom_ads_enabled %} 5 | 8 | {% endif %} 9 | 10 | {% if site.adsbygoogle_enabled %} 11 | 12 | 14 | 20 | 23 | {% endif %} 24 |
25 | {% endif %} 26 | -------------------------------------------------------------------------------- /web/includes/editors.html.j2: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 21 |
22 |
23 |
24 | 25 |
26 | 34 |
35 |
36 |
37 |
38 |
39 |
40 | -------------------------------------------------------------------------------- /web/includes/navbar.html.j2: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/includes/repo-badge.html.j2: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/includes/share-modal.html.j2: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /web/layouts/app.html.j2: -------------------------------------------------------------------------------- 1 | {% extends "layouts/base.html.j2" %} 2 | 3 | {% block head %} 4 | {{ super() }} 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | {% endblock %} 24 | 25 | {% block content %} 26 | {{ super() }} 27 | {% endblock %} -------------------------------------------------------------------------------- /web/layouts/base.html.j2: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {% block head %} 6 | {{ site.title }} 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 38 | 39 | {% endblock %} 40 | 41 | 42 | 43 | {% block content %}{% endblock %} 44 | 45 | 46 | -------------------------------------------------------------------------------- /web/site.yml: -------------------------------------------------------------------------------- 1 | sitename: Tumeo Space 2 | title: GDScript Playground 3 | description: Try a script right now! Desktop or mobile web browser. 4 | author: William Tumeo 5 | siteurl: https://gd.tumeo.space/ 6 | baseurl: / 7 | 8 | repourl: https://github.com/williamd1k0/gdscript-playground 9 | twitter: "@tumeo_" 10 | 11 | function_url: https://faas-nyc1-2ef2e6cc.doserverless.co/api/v1/web/fn-f1a44419-c8a0-4cf5-b9af-d12c7a947ca8/ 12 | 13 | version_function: 14 | url: godot/version 15 | token: Va7SERobvyMAkg9 16 | gdscript_function: 17 | url: godot/gdscript 18 | token: Op2VrNDf6aiY8Jv 19 | 20 | rentry_function: 21 | url: share/rentry 22 | token: Qy4TKS1Psz1OPct 23 | gist_function: 24 | url: share/gist 25 | token: Ri1bVMVzSmG30h4 26 | 27 | ads_enabled: true 28 | custom_ads_enabled: true 29 | adsbygoogle_enabled: false 30 | -------------------------------------------------------------------------------- /web/src/404.html.j2: -------------------------------------------------------------------------------- 1 | {% extends "layouts/base.html.j2" %} 2 | 3 | {% block head %} 4 | {{ super() }} 5 | 12 | {% endblock %} -------------------------------------------------------------------------------- /web/src/ads.txt: -------------------------------------------------------------------------------- 1 | google.com, pub-9962263199785319, DIRECT, f08c47fec0942fa0 -------------------------------------------------------------------------------- /web/src/css/playground.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | background-color: #181b1e !important; 3 | } 4 | 5 | #editor, #console { 6 | font-size: 12px; 7 | } 8 | 9 | small a { 10 | position: fixed; 11 | bottom: 1%; 12 | left: 1%; 13 | } 14 | 15 | .modal-content { 16 | background-color: #282a36 !important; 17 | color: white !important; 18 | } 19 | 20 | .modal-header { 21 | border-bottom: 1px solid #181b1e !important; 22 | background-color: #343a40 !important; 23 | } 24 | 25 | .modal-footer { 26 | border-top: 1px solid #181b1e !important; 27 | background-color: #343a40 !important; 28 | } 29 | 30 | .close, .dropdown-item { 31 | color: white !important; 32 | } 33 | 34 | .nav-tabs .nav-link.active { 35 | color: white !important; 36 | border-color: transparent !important; 37 | } 38 | 39 | .nav-tabs { 40 | border-bottom: 1px solid #343a40 !important; 41 | } 42 | 43 | .row { 44 | margin-top: 10px !important; 45 | } 46 | 47 | .break-word { 48 | word-wrap: break-word; 49 | } 50 | 51 | #spinner { 52 | visibility: hidden; 53 | } 54 | #spinner.active { 55 | visibility: visible; 56 | } 57 | 58 | .main-container { 59 | display: flex; 60 | justify-content: space-between; 61 | flex-direction: column; 62 | } 63 | 64 | .ads { 65 | margin-top: 3em; 66 | } 67 | 68 | @media only screen 69 | and (max-width : 520px) { 70 | .itch-ads { 71 | width: 80%; 72 | } 73 | } -------------------------------------------------------------------------------- /web/src/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williamd1k0/gdscript-playground/54e4a9f6049747dd262fc8b29fc3ece3bc0ff2c6/web/src/img/favicon.png -------------------------------------------------------------------------------- /web/src/img/godette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williamd1k0/gdscript-playground/54e4a9f6049747dd262fc8b29fc3ece3bc0ff2c6/web/src/img/godette.png -------------------------------------------------------------------------------- /web/src/img/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williamd1k0/gdscript-playground/54e4a9f6049747dd262fc8b29fc3ece3bc0ff2c6/web/src/img/spinner.gif -------------------------------------------------------------------------------- /web/src/index.html.j2: -------------------------------------------------------------------------------- 1 | {% extends "layouts/app.html.j2" %} 2 | 3 | {% block content %} 4 | {{ super() }} 5 | {% include 'includes/navbar.html.j2' %} 6 | {% include 'includes/share-modal.html.j2' %} 7 | 8 |
9 | {% include 'includes/editors.html.j2' %} 10 | {% include 'includes/ads.html.j2' %} 11 |
12 | {% endblock %} 13 | -------------------------------------------------------------------------------- /web/src/js/scripteditor.js.j2: -------------------------------------------------------------------------------- 1 | 2 | var EDITOR; 3 | var SAMPLE = {{ data.default_code.code | tojson }}; 4 | 5 | function show_error(line) { 6 | EDITOR.markText({line:line, ch:0}, {line:line, ch:null}, { 7 | css: 'background-color: rgb(138, 26, 69)', 8 | clearOnEnter: true, 9 | }); 10 | } 11 | 12 | $(document).ready(function() { 13 | var sample = SAMPLE; 14 | if (has_external_script()) { 15 | sample = "# Fetching script..."; 16 | } 17 | EDITOR = CodeMirror(document.querySelector('#editor'), { 18 | lineNumbers: true, 19 | indentUnit: 4, 20 | indentWithTabs: false, 21 | scrollbarStyle: 'null', 22 | theme: 'dracula', 23 | mode: "gdscript", 24 | value: sample, 25 | inputStyle: 'contenteditable', 26 | }); 27 | 28 | EDITOR.setOption("extraKeys", { 29 | 'Ctrl-Enter': function(cm) { 30 | $("form#run-script").submit(); 31 | } 32 | }); 33 | 34 | $(".share").on("click", function(event) { 35 | var code = EDITOR.getValue(); 36 | var url = location.pathname+"?"+LZString.compressToEncodedURIComponent(code); 37 | $('#share-url').text(url); 38 | document.querySelector('#share-url').href = url; 39 | }); 40 | 41 | $("#new-script").on("click", function(event) { 42 | EDITOR.setValue(SAMPLE); 43 | OUTPUT.setValue(''); 44 | }); 45 | 46 | fetch_external_script(); 47 | 48 | }); 49 | 50 | -------------------------------------------------------------------------------- /web/src/js/scriptimport.js.j2: -------------------------------------------------------------------------------- 1 | 2 | function get_external_script_source() { 3 | if (location.search.match(/code=(.+)/)) { 4 | return "code"; 5 | } 6 | if (location.search.match(/rentry=(.+)&?/)) { 7 | return "rentry"; 8 | } 9 | if (location.search.match(/gist=(.+)&?/)) { 10 | return "gist"; 11 | } 12 | if (location.search.length > 2) { 13 | return "lz"; 14 | } 15 | return undefined; 16 | } 17 | 18 | function has_external_script() { 19 | return get_external_script_source() !== undefined; 20 | } 21 | 22 | function fetch_external_script() { 23 | let source = get_external_script_source(); 24 | if (source === undefined) return; 25 | switch (source) { 26 | case "code": 27 | EDITOR.setValue(decodeURIComponent(location.search.match(/code=(.+)/)[1])); 28 | break; 29 | case "lz": 30 | EDITOR.setValue(LZString.decompressFromEncodedURIComponent(location.search.substring(1))); 31 | break; 32 | case "rentry": 33 | var data = { 34 | "id": location.search.match(/rentry=(.+)&?/)[1] 35 | }; 36 | $.get({ 37 | url: "{{ site.function_url + site.rentry_function.url }}", 38 | headers: { 39 | 'X-Require-Whisk-Auth': {{ site.rentry_function.token | tojson }}, 40 | } 41 | }, data, function(result) { 42 | EDITOR.setValue(result); 43 | }); 44 | break; 45 | case "gist": 46 | var data = { 47 | "id": location.search.match(/gist=(.+)&?/)[1] 48 | }; 49 | $.get({ 50 | url: "{{ site.function_url + site.gist_function.url }}", 51 | headers: { 52 | 'X-Require-Whisk-Auth': {{ site.gist_function.token | tojson }}, 53 | } 54 | }, data, function(result) { 55 | EDITOR.setValue(result); 56 | }); 57 | break; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /web/src/js/scriptoutput.js.j2: -------------------------------------------------------------------------------- 1 | var OUTPUT; 2 | 3 | $(document).ready(function() { 4 | OUTPUT = CodeMirror(document.querySelector('#console'), { 5 | lineNumbers: false, 6 | indentUnit: 4, 7 | indentWithTabs: true, 8 | scrollbarStyle: 'null', 9 | readOnly: 'nocursor', 10 | theme: 'night', 11 | value: '', 12 | inputStyle: 'contenteditable', 13 | }); 14 | 15 | $("form#run-script").on("submit", function(event) { 16 | event.preventDefault(); 17 | OUTPUT.setValue(''); 18 | var code = EDITOR.getValue(); 19 | document.querySelector('input[name=code]').value = code; 20 | document.querySelector('#spinner').classList.add('active'); 21 | $.get({ 22 | url: this.action, 23 | headers: { 24 | 'X-Require-Whisk-Auth': {{ site.gdscript_function.token | tojson }} 25 | } 26 | }, $(this).serialize(), function(result){ 27 | document.querySelector('#spinner').classList.remove('active'); 28 | switch(result.result) { 29 | case 'ok': 30 | var output = result.output.trim(); 31 | if (!output) output = 'None'; 32 | OUTPUT.setValue(output); 33 | break; 34 | case 'error': 35 | OUTPUT.setValue(result.message); 36 | show_error(result.line-1); 37 | throw new Error(result.error+': '+result.message, '', result.line); 38 | default: 39 | console.error('Unknown response.'); 40 | console.error(result); 41 | } 42 | }); 43 | }); 44 | 45 | $.get({ 46 | url: "{{ site.function_url + site.version_function.url }}", 47 | headers: { 48 | 'X-Require-Whisk-Auth': {{ site.version_function.token | tojson }} 49 | } 50 | }, function(result) { 51 | document.querySelector("#godot-version").textContent = result; 52 | }); 53 | }); 54 | -------------------------------------------------------------------------------- /web/src/js/snippets.js.j2: -------------------------------------------------------------------------------- 1 | 2 | var SNIPPETS = {{ data.snippets | tojson }}; 3 | 4 | $(document).ready(function() { 5 | var menu = $("#menu-snippets"); 6 | // Hello World 7 | for (let snippet of SNIPPETS) { 8 | var a = document.createElement('a'); 9 | a.href = '#'; 10 | a.classList.add('dropdown-item'); 11 | a.classList.add('bg-dark'); 12 | a.textContent = snippet.name; 13 | $(a).on('click', click_callback.bind(null, snippet.code)); 14 | menu.append(a); 15 | } 16 | 17 | function click_callback(code) { 18 | EDITOR.setValue(code); 19 | OUTPUT.setValue(''); 20 | } 21 | }); -------------------------------------------------------------------------------- /web/src/lib/codemirror/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/.gitattributes: -------------------------------------------------------------------------------- 1 | *.txt text eol=lf 2 | *.js text eol=lf 3 | *.html text eol=lf 4 | *.md text eol=lf 5 | *.json text eol=lf 6 | *.yml text eol=lf 7 | *.css text eol=lf 8 | *.svg text eol=lf 9 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/.npmignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /demo 3 | /doc 4 | /test 5 | /test*.html 6 | /index.html 7 | /mode/*/*test.js 8 | /mode/*/*.html 9 | /mode/index.html 10 | .* 11 | /bin/authors.sh 12 | /bin/lint 13 | /bin/release 14 | /bin/upload-release.js 15 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (C) 2017 by Marijn Haverbeke and others 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/README.md: -------------------------------------------------------------------------------- 1 | # CodeMirror 2 | 3 | [![Build Status](https://github.com/codemirror/codemirror5/workflows/main/badge.svg)](https://github.com/codemirror/codemirror5/actions) 4 | [![NPM version](https://img.shields.io/npm/v/codemirror.svg)](https://www.npmjs.org/package/codemirror) 5 | 6 | CodeMirror is a versatile text editor implemented in JavaScript for 7 | the browser. It is specialized for editing code, and comes with over 8 | 100 language modes and various addons that implement more advanced 9 | editing functionality. Every language comes with fully-featured code 10 | and syntax highlighting to help with reading and editing complex code. 11 | 12 | A rich programming API and a CSS theming system are available for 13 | customizing CodeMirror to fit your application, and extending it with 14 | new functionality. 15 | 16 | You can find more information (and the 17 | [manual](https://codemirror.net/5/doc/manual.html)) on the [project 18 | page](https://codemirror.net/5/). For questions and discussion, use the 19 | [discussion forum](https://discuss.codemirror.net/). 20 | 21 | See 22 | [CONTRIBUTING.md](https://github.com/codemirror/CodeMirror/blob/master/CONTRIBUTING.md) 23 | for contributing guidelines. 24 | 25 | The CodeMirror community aims to be welcoming to everybody. We use the 26 | [Contributor Covenant 27 | (1.1)](http://contributor-covenant.org/version/1/1/0/) as our code of 28 | conduct. 29 | 30 | ### Installation 31 | 32 | Either get the [zip file](https://codemirror.net/5/codemirror.zip) with 33 | the latest version, or make sure you have [Node](https://nodejs.org/) 34 | installed and run: 35 | 36 | npm install codemirror 37 | 38 | **NOTE**: This is the source repository for the library, and not the 39 | distribution channel. Cloning it is not the recommended way to install 40 | the library, and will in fact not work unless you also run the build 41 | step. 42 | 43 | ### Quickstart 44 | 45 | To build the project, make sure you have Node.js installed (at least version 6) 46 | and then `npm install`. To run, just open `index.html` in your 47 | browser (you don't need to run a webserver). Run the tests with `npm test`. 48 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/addon/dialog/dialog.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-dialog { 2 | position: absolute; 3 | left: 0; right: 0; 4 | background: inherit; 5 | z-index: 15; 6 | padding: .1em .8em; 7 | overflow: hidden; 8 | color: inherit; 9 | } 10 | 11 | .CodeMirror-dialog-top { 12 | border-bottom: 1px solid #eee; 13 | top: 0; 14 | } 15 | 16 | .CodeMirror-dialog-bottom { 17 | border-top: 1px solid #eee; 18 | bottom: 0; 19 | } 20 | 21 | .CodeMirror-dialog input { 22 | border: none; 23 | outline: none; 24 | background: transparent; 25 | width: 20em; 26 | color: inherit; 27 | font-family: monospace; 28 | } 29 | 30 | .CodeMirror-dialog button { 31 | font-size: 70%; 32 | } 33 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/addon/display/autorefresh.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")) 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod) 9 | else // Plain browser env 10 | mod(CodeMirror) 11 | })(function(CodeMirror) { 12 | "use strict" 13 | 14 | CodeMirror.defineOption("autoRefresh", false, function(cm, val) { 15 | if (cm.state.autoRefresh) { 16 | stopListening(cm, cm.state.autoRefresh) 17 | cm.state.autoRefresh = null 18 | } 19 | if (val && cm.display.wrapper.offsetHeight == 0) 20 | startListening(cm, cm.state.autoRefresh = {delay: val.delay || 250}) 21 | }) 22 | 23 | function startListening(cm, state) { 24 | function check() { 25 | if (cm.display.wrapper.offsetHeight) { 26 | stopListening(cm, state) 27 | if (cm.display.lastWrapHeight != cm.display.wrapper.clientHeight) 28 | cm.refresh() 29 | } else { 30 | state.timeout = setTimeout(check, state.delay) 31 | } 32 | } 33 | state.timeout = setTimeout(check, state.delay) 34 | state.hurry = function() { 35 | clearTimeout(state.timeout) 36 | state.timeout = setTimeout(check, 50) 37 | } 38 | CodeMirror.on(window, "mouseup", state.hurry) 39 | CodeMirror.on(window, "keyup", state.hurry) 40 | } 41 | 42 | function stopListening(_cm, state) { 43 | clearTimeout(state.timeout) 44 | CodeMirror.off(window, "mouseup", state.hurry) 45 | CodeMirror.off(window, "keyup", state.hurry) 46 | } 47 | }); 48 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/addon/display/fullscreen.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-fullscreen { 2 | position: fixed; 3 | top: 0; left: 0; right: 0; bottom: 0; 4 | height: auto; 5 | z-index: 9; 6 | } 7 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/addon/display/fullscreen.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | CodeMirror.defineOption("fullScreen", false, function(cm, val, old) { 15 | if (old == CodeMirror.Init) old = false; 16 | if (!old == !val) return; 17 | if (val) setFullscreen(cm); 18 | else setNormal(cm); 19 | }); 20 | 21 | function setFullscreen(cm) { 22 | var wrap = cm.getWrapperElement(); 23 | cm.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset, 24 | width: wrap.style.width, height: wrap.style.height}; 25 | wrap.style.width = ""; 26 | wrap.style.height = "auto"; 27 | wrap.className += " CodeMirror-fullscreen"; 28 | document.documentElement.style.overflow = "hidden"; 29 | cm.refresh(); 30 | } 31 | 32 | function setNormal(cm) { 33 | var wrap = cm.getWrapperElement(); 34 | wrap.className = wrap.className.replace(/\s*CodeMirror-fullscreen\b/, ""); 35 | document.documentElement.style.overflow = ""; 36 | var info = cm.state.fullScreenRestore; 37 | wrap.style.width = info.width; wrap.style.height = info.height; 38 | window.scrollTo(info.scrollLeft, info.scrollTop); 39 | cm.refresh(); 40 | } 41 | }); 42 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/addon/edit/trailingspace.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | CodeMirror.defineOption("showTrailingSpace", false, function(cm, val, prev) { 13 | if (prev == CodeMirror.Init) prev = false; 14 | if (prev && !val) 15 | cm.removeOverlay("trailingspace"); 16 | else if (!prev && val) 17 | cm.addOverlay({ 18 | token: function(stream) { 19 | for (var l = stream.string.length, i = l; i && /\s/.test(stream.string.charAt(i - 1)); --i) {} 20 | if (i > stream.pos) { stream.pos = i; return null; } 21 | stream.pos = l; 22 | return "trailingspace"; 23 | }, 24 | name: "trailingspace" 25 | }); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/addon/fold/foldgutter.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-foldmarker { 2 | color: blue; 3 | text-shadow: #b9f 1px 1px 2px, #b9f -1px -1px 2px, #b9f 1px -1px 2px, #b9f -1px 1px 2px; 4 | font-family: arial; 5 | line-height: .3; 6 | cursor: pointer; 7 | } 8 | .CodeMirror-foldgutter { 9 | width: .7em; 10 | } 11 | .CodeMirror-foldgutter-open, 12 | .CodeMirror-foldgutter-folded { 13 | cursor: pointer; 14 | } 15 | .CodeMirror-foldgutter-open:after { 16 | content: "\25BE"; 17 | } 18 | .CodeMirror-foldgutter-folded:after { 19 | content: "\25B8"; 20 | } 21 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/addon/fold/indent-fold.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | function lineIndent(cm, lineNo) { 15 | var text = cm.getLine(lineNo) 16 | var spaceTo = text.search(/\S/) 17 | if (spaceTo == -1 || /\bcomment\b/.test(cm.getTokenTypeAt(CodeMirror.Pos(lineNo, spaceTo + 1)))) 18 | return -1 19 | return CodeMirror.countColumn(text, null, cm.getOption("tabSize")) 20 | } 21 | 22 | CodeMirror.registerHelper("fold", "indent", function(cm, start) { 23 | var myIndent = lineIndent(cm, start.line) 24 | if (myIndent < 0) return 25 | var lastLineInFold = null 26 | 27 | // Go through lines until we find a line that definitely doesn't belong in 28 | // the block we're folding, or to the end. 29 | for (var i = start.line + 1, end = cm.lastLine(); i <= end; ++i) { 30 | var indent = lineIndent(cm, i) 31 | if (indent == -1) { 32 | } else if (indent > myIndent) { 33 | // Lines with a greater indent are considered part of the block. 34 | lastLineInFold = i; 35 | } else { 36 | // If this line has non-space, non-comment content, and is 37 | // indented less or equal to the start line, it is the start of 38 | // another block. 39 | break; 40 | } 41 | } 42 | if (lastLineInFold) return { 43 | from: CodeMirror.Pos(start.line, cm.getLine(start.line).length), 44 | to: CodeMirror.Pos(lastLineInFold, cm.getLine(lastLineInFold).length) 45 | }; 46 | }); 47 | 48 | }); 49 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/addon/fold/markdown-fold.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | CodeMirror.registerHelper("fold", "markdown", function(cm, start) { 15 | var maxDepth = 100; 16 | 17 | function isHeader(lineNo) { 18 | var tokentype = cm.getTokenTypeAt(CodeMirror.Pos(lineNo, 0)); 19 | return tokentype && /\bheader\b/.test(tokentype); 20 | } 21 | 22 | function headerLevel(lineNo, line, nextLine) { 23 | var match = line && line.match(/^#+/); 24 | if (match && isHeader(lineNo)) return match[0].length; 25 | match = nextLine && nextLine.match(/^[=\-]+\s*$/); 26 | if (match && isHeader(lineNo + 1)) return nextLine[0] == "=" ? 1 : 2; 27 | return maxDepth; 28 | } 29 | 30 | var firstLine = cm.getLine(start.line), nextLine = cm.getLine(start.line + 1); 31 | var level = headerLevel(start.line, firstLine, nextLine); 32 | if (level === maxDepth) return undefined; 33 | 34 | var lastLineNo = cm.lastLine(); 35 | var end = start.line, nextNextLine = cm.getLine(end + 2); 36 | while (end < lastLineNo) { 37 | if (headerLevel(end + 1, nextLine, nextNextLine) <= level) break; 38 | ++end; 39 | nextLine = nextNextLine; 40 | nextNextLine = cm.getLine(end + 2); 41 | } 42 | 43 | return { 44 | from: CodeMirror.Pos(start.line, firstLine.length), 45 | to: CodeMirror.Pos(end, cm.getLine(end).length) 46 | }; 47 | }); 48 | 49 | }); 50 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/addon/hint/anyword-hint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | var WORD = /[\w$]+/, RANGE = 500; 15 | 16 | CodeMirror.registerHelper("hint", "anyword", function(editor, options) { 17 | var word = options && options.word || WORD; 18 | var range = options && options.range || RANGE; 19 | var cur = editor.getCursor(), curLine = editor.getLine(cur.line); 20 | var end = cur.ch, start = end; 21 | while (start && word.test(curLine.charAt(start - 1))) --start; 22 | var curWord = start != end && curLine.slice(start, end); 23 | 24 | var list = options && options.list || [], seen = {}; 25 | var re = new RegExp(word.source, "g"); 26 | for (var dir = -1; dir <= 1; dir += 2) { 27 | var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir; 28 | for (; line != endLine; line += dir) { 29 | var text = editor.getLine(line), m; 30 | while (m = re.exec(text)) { 31 | if (line == cur.line && m[0] === curWord) continue; 32 | if ((!curWord || m[0].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, m[0])) { 33 | seen[m[0]] = true; 34 | list.push(m[0]); 35 | } 36 | } 37 | } 38 | } 39 | return {list: list, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end)}; 40 | }); 41 | }); 42 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/addon/hint/show-hint.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-hints { 2 | position: absolute; 3 | z-index: 10; 4 | overflow: hidden; 5 | list-style: none; 6 | 7 | margin: 0; 8 | padding: 2px; 9 | 10 | -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); 11 | -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); 12 | box-shadow: 2px 3px 5px rgba(0,0,0,.2); 13 | border-radius: 3px; 14 | border: 1px solid silver; 15 | 16 | background: white; 17 | font-size: 90%; 18 | font-family: monospace; 19 | 20 | max-height: 20em; 21 | overflow-y: auto; 22 | box-sizing: border-box; 23 | } 24 | 25 | .CodeMirror-hint { 26 | margin: 0; 27 | padding: 0 4px; 28 | border-radius: 2px; 29 | white-space: pre; 30 | color: black; 31 | cursor: pointer; 32 | } 33 | 34 | li.CodeMirror-hint-active { 35 | background: #08f; 36 | color: white; 37 | } 38 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/addon/lint/coffeescript-lint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | // Depends on coffeelint.js from http://www.coffeelint.org/js/coffeelint.js 5 | 6 | // declare global: coffeelint 7 | 8 | (function(mod) { 9 | if (typeof exports == "object" && typeof module == "object") // CommonJS 10 | mod(require("../../lib/codemirror")); 11 | else if (typeof define == "function" && define.amd) // AMD 12 | define(["../../lib/codemirror"], mod); 13 | else // Plain browser env 14 | mod(CodeMirror); 15 | })(function(CodeMirror) { 16 | "use strict"; 17 | 18 | CodeMirror.registerHelper("lint", "coffeescript", function(text) { 19 | var found = []; 20 | if (!window.coffeelint) { 21 | if (window.console) { 22 | window.console.error("Error: window.coffeelint not defined, CodeMirror CoffeeScript linting cannot run."); 23 | } 24 | return found; 25 | } 26 | var parseError = function(err) { 27 | var loc = err.lineNumber; 28 | found.push({from: CodeMirror.Pos(loc-1, 0), 29 | to: CodeMirror.Pos(loc, 0), 30 | severity: err.level, 31 | message: err.message}); 32 | }; 33 | try { 34 | var res = coffeelint.lint(text); 35 | for(var i = 0; i < res.length; i++) { 36 | parseError(res[i]); 37 | } 38 | } catch(e) { 39 | found.push({from: CodeMirror.Pos(e.location.first_line, 0), 40 | to: CodeMirror.Pos(e.location.last_line, e.location.last_column), 41 | severity: 'error', 42 | message: e.message}); 43 | } 44 | return found; 45 | }); 46 | 47 | }); 48 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/addon/lint/css-lint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | // Depends on csslint.js from https://github.com/stubbornella/csslint 5 | 6 | // declare global: CSSLint 7 | 8 | (function(mod) { 9 | if (typeof exports == "object" && typeof module == "object") // CommonJS 10 | mod(require("../../lib/codemirror")); 11 | else if (typeof define == "function" && define.amd) // AMD 12 | define(["../../lib/codemirror"], mod); 13 | else // Plain browser env 14 | mod(CodeMirror); 15 | })(function(CodeMirror) { 16 | "use strict"; 17 | 18 | CodeMirror.registerHelper("lint", "css", function(text, options) { 19 | var found = []; 20 | if (!window.CSSLint) { 21 | if (window.console) { 22 | window.console.error("Error: window.CSSLint not defined, CodeMirror CSS linting cannot run."); 23 | } 24 | return found; 25 | } 26 | var results = CSSLint.verify(text, options), messages = results.messages, message = null; 27 | for ( var i = 0; i < messages.length; i++) { 28 | message = messages[i]; 29 | var startLine = message.line -1, endLine = message.line -1, startCol = message.col -1, endCol = message.col; 30 | found.push({ 31 | from: CodeMirror.Pos(startLine, startCol), 32 | to: CodeMirror.Pos(endLine, endCol), 33 | message: message.message, 34 | severity : message.type 35 | }); 36 | } 37 | return found; 38 | }); 39 | 40 | }); 41 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/addon/lint/json-lint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | // Depends on jsonlint.js from https://github.com/zaach/jsonlint 5 | 6 | // declare global: jsonlint 7 | 8 | (function(mod) { 9 | if (typeof exports == "object" && typeof module == "object") // CommonJS 10 | mod(require("../../lib/codemirror")); 11 | else if (typeof define == "function" && define.amd) // AMD 12 | define(["../../lib/codemirror"], mod); 13 | else // Plain browser env 14 | mod(CodeMirror); 15 | })(function(CodeMirror) { 16 | "use strict"; 17 | 18 | CodeMirror.registerHelper("lint", "json", function(text) { 19 | var found = []; 20 | if (!window.jsonlint) { 21 | if (window.console) { 22 | window.console.error("Error: window.jsonlint not defined, CodeMirror JSON linting cannot run."); 23 | } 24 | return found; 25 | } 26 | // for jsonlint's web dist jsonlint is exported as an object with a single property parser, of which parseError 27 | // is a subproperty 28 | var jsonlint = window.jsonlint.parser || window.jsonlint 29 | jsonlint.parseError = function(str, hash) { 30 | var loc = hash.loc; 31 | found.push({from: CodeMirror.Pos(loc.first_line - 1, loc.first_column), 32 | to: CodeMirror.Pos(loc.last_line - 1, loc.last_column), 33 | message: str}); 34 | }; 35 | try { jsonlint.parse(text); } 36 | catch(e) {} 37 | return found; 38 | }); 39 | 40 | }); 41 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/addon/lint/yaml-lint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | // Depends on js-yaml.js from https://github.com/nodeca/js-yaml 15 | 16 | // declare global: jsyaml 17 | 18 | CodeMirror.registerHelper("lint", "yaml", function(text) { 19 | var found = []; 20 | if (!window.jsyaml) { 21 | if (window.console) { 22 | window.console.error("Error: window.jsyaml not defined, CodeMirror YAML linting cannot run."); 23 | } 24 | return found; 25 | } 26 | try { jsyaml.loadAll(text); } 27 | catch(e) { 28 | var loc = e.mark, 29 | // js-yaml YAMLException doesn't always provide an accurate lineno 30 | // e.g., when there are multiple yaml docs 31 | // --- 32 | // --- 33 | // foo:bar 34 | from = loc ? CodeMirror.Pos(loc.line, loc.column) : CodeMirror.Pos(0, 0), 35 | to = from; 36 | found.push({ from: from, to: to, message: e.message }); 37 | } 38 | return found; 39 | }); 40 | 41 | }); 42 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/addon/mode/multiplex_test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | (function() { 5 | CodeMirror.defineMode("markdown_with_stex", function(){ 6 | var inner = CodeMirror.getMode({}, "stex"); 7 | var outer = CodeMirror.getMode({}, "markdown"); 8 | 9 | var innerOptions = { 10 | open: '$', 11 | close: '$', 12 | mode: inner, 13 | delimStyle: 'delim', 14 | innerStyle: 'inner' 15 | }; 16 | 17 | return CodeMirror.multiplexingMode(outer, innerOptions); 18 | }); 19 | 20 | var mode = CodeMirror.getMode({}, "markdown_with_stex"); 21 | 22 | function MT(name) { 23 | test.mode( 24 | name, 25 | mode, 26 | Array.prototype.slice.call(arguments, 1), 27 | 'multiplexing'); 28 | } 29 | 30 | MT( 31 | "stexInsideMarkdown", 32 | "[strong **Equation:**] [delim&delim-open $][inner&tag \\pi][delim&delim-close $]"); 33 | 34 | CodeMirror.defineMode("identical_delim_multiplex", function() { 35 | return CodeMirror.multiplexingMode(CodeMirror.getMode({indentUnit: 2}, "javascript"), { 36 | open: "#", 37 | close: "#", 38 | mode: CodeMirror.getMode({}, "markdown"), 39 | parseDelimiters: true, 40 | innerStyle: "q" 41 | }); 42 | }); 43 | 44 | var mode2 = CodeMirror.getMode({}, "identical_delim_multiplex"); 45 | 46 | test.mode("identical_delimiters_with_parseDelimiters", mode2, [ 47 | "[keyword let] [def x] [operator =] [q #foo][q&em *bar*][q #];" 48 | ], "multiplexing") 49 | })(); 50 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/addon/runmode/colorize.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror"), require("./runmode")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror", "./runmode"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | var isBlock = /^(p|li|div|h\\d|pre|blockquote|td)$/; 15 | 16 | function textContent(node, out) { 17 | if (node.nodeType == 3) return out.push(node.nodeValue); 18 | for (var ch = node.firstChild; ch; ch = ch.nextSibling) { 19 | textContent(ch, out); 20 | if (isBlock.test(node.nodeType)) out.push("\n"); 21 | } 22 | } 23 | 24 | CodeMirror.colorize = function(collection, defaultMode) { 25 | if (!collection) collection = document.body.getElementsByTagName("pre"); 26 | 27 | for (var i = 0; i < collection.length; ++i) { 28 | var node = collection[i]; 29 | var mode = node.getAttribute("data-lang") || defaultMode; 30 | if (!mode) continue; 31 | 32 | var text = []; 33 | textContent(node, text); 34 | node.textContent = ""; 35 | CodeMirror.runMode(text.join(""), mode, node); 36 | 37 | node.className += " cm-s-default"; 38 | } 39 | }; 40 | }); 41 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/addon/scroll/scrollpastend.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | CodeMirror.defineOption("scrollPastEnd", false, function(cm, val, old) { 15 | if (old && old != CodeMirror.Init) { 16 | cm.off("change", onChange); 17 | cm.off("refresh", updateBottomMargin); 18 | cm.display.lineSpace.parentNode.style.paddingBottom = ""; 19 | cm.state.scrollPastEndPadding = null; 20 | } 21 | if (val) { 22 | cm.on("change", onChange); 23 | cm.on("refresh", updateBottomMargin); 24 | updateBottomMargin(cm); 25 | } 26 | }); 27 | 28 | function onChange(cm, change) { 29 | if (CodeMirror.changeEnd(change).line == cm.lastLine()) 30 | updateBottomMargin(cm); 31 | } 32 | 33 | function updateBottomMargin(cm) { 34 | var padding = ""; 35 | if (cm.lineCount() > 1) { 36 | var totalH = cm.display.scroller.clientHeight - 30, 37 | lastLineH = cm.getLineHandle(cm.lastLine()).height; 38 | padding = (totalH - lastLineH) + "px"; 39 | } 40 | if (cm.state.scrollPastEndPadding != padding) { 41 | cm.state.scrollPastEndPadding = padding; 42 | cm.display.lineSpace.parentNode.style.paddingBottom = padding; 43 | cm.off("refresh", updateBottomMargin); 44 | cm.setSize(); 45 | cm.on("refresh", updateBottomMargin); 46 | } 47 | } 48 | }); 49 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/addon/scroll/simplescrollbars.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-simplescroll-horizontal div, .CodeMirror-simplescroll-vertical div { 2 | position: absolute; 3 | background: #ccc; 4 | -moz-box-sizing: border-box; 5 | box-sizing: border-box; 6 | border: 1px solid #bbb; 7 | border-radius: 2px; 8 | } 9 | 10 | .CodeMirror-simplescroll-horizontal, .CodeMirror-simplescroll-vertical { 11 | position: absolute; 12 | z-index: 6; 13 | background: #eee; 14 | } 15 | 16 | .CodeMirror-simplescroll-horizontal { 17 | bottom: 0; left: 0; 18 | height: 8px; 19 | } 20 | .CodeMirror-simplescroll-horizontal div { 21 | bottom: 0; 22 | height: 100%; 23 | } 24 | 25 | .CodeMirror-simplescroll-vertical { 26 | right: 0; top: 0; 27 | width: 8px; 28 | } 29 | .CodeMirror-simplescroll-vertical div { 30 | right: 0; 31 | width: 100%; 32 | } 33 | 34 | 35 | .CodeMirror-overlayscroll .CodeMirror-scrollbar-filler, .CodeMirror-overlayscroll .CodeMirror-gutter-filler { 36 | display: none; 37 | } 38 | 39 | .CodeMirror-overlayscroll-horizontal div, .CodeMirror-overlayscroll-vertical div { 40 | position: absolute; 41 | background: #bcd; 42 | border-radius: 3px; 43 | } 44 | 45 | .CodeMirror-overlayscroll-horizontal, .CodeMirror-overlayscroll-vertical { 46 | position: absolute; 47 | z-index: 6; 48 | } 49 | 50 | .CodeMirror-overlayscroll-horizontal { 51 | bottom: 0; left: 0; 52 | height: 6px; 53 | } 54 | .CodeMirror-overlayscroll-horizontal div { 55 | bottom: 0; 56 | height: 100%; 57 | } 58 | 59 | .CodeMirror-overlayscroll-vertical { 60 | right: 0; top: 0; 61 | width: 6px; 62 | } 63 | .CodeMirror-overlayscroll-vertical div { 64 | right: 0; 65 | width: 100%; 66 | } 67 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/addon/search/matchesonscrollbar.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-search-match { 2 | background: gold; 3 | border-top: 1px solid orange; 4 | border-bottom: 1px solid orange; 5 | -moz-box-sizing: border-box; 6 | box-sizing: border-box; 7 | opacity: .5; 8 | } 9 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/addon/tern/worker.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | // declare global: tern, server 5 | 6 | var server; 7 | 8 | this.onmessage = function(e) { 9 | var data = e.data; 10 | switch (data.type) { 11 | case "init": return startServer(data.defs, data.plugins, data.scripts); 12 | case "add": return server.addFile(data.name, data.text); 13 | case "del": return server.delFile(data.name); 14 | case "req": return server.request(data.body, function(err, reqData) { 15 | postMessage({id: data.id, body: reqData, err: err && String(err)}); 16 | }); 17 | case "getFile": 18 | var c = pending[data.id]; 19 | delete pending[data.id]; 20 | return c(data.err, data.text); 21 | default: throw new Error("Unknown message type: " + data.type); 22 | } 23 | }; 24 | 25 | var nextId = 0, pending = {}; 26 | function getFile(file, c) { 27 | postMessage({type: "getFile", name: file, id: ++nextId}); 28 | pending[nextId] = c; 29 | } 30 | 31 | function startServer(defs, plugins, scripts) { 32 | if (scripts) importScripts.apply(null, scripts); 33 | 34 | server = new tern.Server({ 35 | getFile: getFile, 36 | async: true, 37 | defs: defs, 38 | plugins: plugins 39 | }); 40 | } 41 | 42 | this.console = { 43 | log: function(v) { postMessage({type: "debug", message: v}); } 44 | }; 45 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/bin/authors.sh: -------------------------------------------------------------------------------- 1 | # Combine existing list of authors with everyone known in git, sort, add header. 2 | tail --lines=+3 AUTHORS > AUTHORS.tmp 3 | git log --format='%aN' | grep -v "Piët Delport" >> AUTHORS.tmp 4 | echo -e "List of CodeMirror contributors. Updated before every release.\n" > AUTHORS 5 | sort -u AUTHORS.tmp | sed 's/Google Inc\./Google LLC/' >> AUTHORS 6 | rm -f AUTHORS.tmp 7 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/bin/lint: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | process.exit(require("../test/lint").ok ? 0 : 1); 4 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/bin/release: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var fs = require("fs"), child = require("child_process"); 4 | 5 | var number, bumpOnly; 6 | 7 | for (var i = 2; i < process.argv.length; i++) { 8 | if (process.argv[i] == "-bump") bumpOnly = true; 9 | else if (/^\d+\.\d+\.\d+$/.test(process.argv[i])) number = process.argv[i]; 10 | else { console.log("Bogus command line arg: " + process.argv[i]); process.exit(1); } 11 | } 12 | 13 | if (!number) { console.log("Must give a version"); process.exit(1); } 14 | 15 | function rewrite(file, f) { 16 | fs.writeFileSync(file, f(fs.readFileSync(file, "utf8")), "utf8"); 17 | } 18 | 19 | rewrite("src/edit/main.js", function(lib) { 20 | return lib.replace(/CodeMirror\.version = "\d+\.\d+\.\d+"/, 21 | "CodeMirror.version = \"" + number + "\""); 22 | }); 23 | function rewriteJSON(pack) { 24 | return pack.replace(/"version":\s*"\d+\.\d+\.\d+"/, "\"version\": \"" + number + "\""); 25 | } 26 | rewrite("package.json", rewriteJSON); 27 | rewrite("doc/manual.html", function(manual) { 28 | return manual.replace(/>version \d+\.\d+\.\d+<\/span>/, ">version " + number + ""); 29 | }); 30 | 31 | if (bumpOnly) process.exit(0); 32 | 33 | child.exec("bash bin/authors.sh", function(){}); 34 | 35 | rewrite("index.html", function(index) { 36 | return index.replace(/\.zip">\d+\.\d+\.\d+<\/a>/, 37 | ".zip\">" + number + ""); 38 | }); 39 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/bin/source-highlight: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // Simple command-line code highlighting tool. Reads code from stdin, 4 | // spits html to stdout. For example: 5 | // 6 | // echo 'function foo(a) { return a; }' | bin/source-highlight -s javascript 7 | // bin/source-highlight -s 8 | 9 | var fs = require("fs"); 10 | 11 | var CodeMirror = require("../addon/runmode/runmode.node.js"); 12 | require("../mode/meta.js"); 13 | 14 | var sPos = process.argv.indexOf("-s"); 15 | if (sPos == -1 || sPos == process.argv.length - 1) { 16 | console.error("Usage: source-highlight -s language"); 17 | process.exit(1); 18 | } 19 | var lang = process.argv[sPos + 1].toLowerCase(), modeName = lang; 20 | var found = CodeMirror.findModeByMIME(lang) || CodeMirror.findModeByName(lang) 21 | if (found) { 22 | modeName = found.mode 23 | lang = found.mime 24 | } 25 | 26 | if (!CodeMirror.modes[modeName]) 27 | require("../mode/" + modeName + "/" + modeName + ".js"); 28 | 29 | function esc(str) { 30 | return str.replace(/[<&]/g, function(ch) { return ch == "&" ? "&" : "<"; }); 31 | } 32 | 33 | var code = fs.readFileSync("/dev/stdin", "utf8"); 34 | var curStyle = null, accum = ""; 35 | function flush() { 36 | if (curStyle) process.stdout.write("" + esc(accum) + ""); 37 | else process.stdout.write(esc(accum)); 38 | } 39 | 40 | CodeMirror.runMode(code, lang, function(text, style) { 41 | if (style != curStyle) { 42 | flush(); 43 | curStyle = style; accum = text; 44 | } else { 45 | accum += text; 46 | } 47 | }); 48 | flush(); 49 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/bin/upload-release.js: -------------------------------------------------------------------------------- 1 | "use strict" 2 | 3 | let version = process.argv[2] 4 | let auth = process.argv[3] 5 | let url = require("url") 6 | 7 | if (!auth) { 8 | console.log("Usage: upload-release.js [TAG] [github-user:password]") 9 | process.exit(1) 10 | } 11 | 12 | function post(host, path, body) { 13 | let req = require("https").request({ 14 | host, 15 | auth: auth, 16 | headers: {"user-agent": "Release uploader"}, 17 | path, 18 | method: "POST" 19 | }, res => { 20 | if (res.statusCode >= 300 && res.statusCode < 400) { 21 | console.log(res.headers.location) 22 | let parsed = url.parse(res.headers.location) 23 | post(parsed.host, parsed.path, body) 24 | } else if (res.statusCode >= 400) { 25 | console.error(res.statusCode, res.statusMessage) 26 | res.on("data", d => console.log(d.toString())) 27 | res.on("end", process.exit(1)) 28 | } 29 | }) 30 | req.write(body) 31 | req.end() 32 | } 33 | 34 | require('child_process').exec("git --no-pager show -s --format='%s' " + version, (error, stdout) => { 35 | if (error) throw error 36 | let message = stdout.split("\n").slice(2) 37 | message = message.slice(0, message.indexOf("-----BEGIN PGP SIGNATURE-----")).join("\n") 38 | 39 | post("api.github.com", "/repos/codemirror/codemirror5/releases", JSON.stringify({ 40 | tag_name: version, 41 | name: version, 42 | body: message 43 | })) 44 | }) 45 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/demo/changemode.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Mode-Changing Demo 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 14 | 26 | 27 |
28 |

Mode-Changing Demo

29 |
36 | 37 |

On changes to the content of the above editor, a (crude) script 38 | tries to auto-detect the language used, and switches the editor to 39 | either JavaScript or Scheme mode based on that.

40 | 41 | 58 |
59 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/demo/closebrackets.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Closebrackets Demo 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 14 | 26 | 27 |
28 |

Closebrackets Demo

29 |
48 | 49 | 52 |
53 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/demo/closetag.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Close-Tag Demo 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 18 | 30 | 31 |
32 |

Close-Tag Demo

33 |
34 | 35 | 41 |

Uses the closetag addon to auto-close tags.

42 |
43 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/demo/html5complete.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CodeMirror: HTML completion demo 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 22 | 23 | 24 | 36 | 37 |
38 |

HTML completion demo

39 | 40 |

Shows the XML completer 41 | parameterized with information about the tags in HTML. 42 | Press ctrl-space to activate completion.

43 | 44 |
45 | 46 | 55 |
56 | 57 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/demo/marker.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Breakpoint Demo 4 | 5 | 6 | 7 | 8 | 9 | 10 | 15 | 27 | 28 |
29 |

Breakpoint Demo

30 |
47 | 48 |

Click the line-number gutter to add or remove 'breakpoints'.

49 | 50 | 51 | 52 |
53 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/demo/markselection.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Selection Marking Demo 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 17 | 29 | 30 |
31 |

Selection Marking Demo

32 |
41 | 42 | 49 | 50 |

Simple addon to easily mark (and style) selected text. Docs.

51 | 52 |
53 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/demo/matchtags.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Tag Matcher Demo 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 15 | 27 | 28 |
29 |

Tag Matcher Demo

30 | 31 | 32 |
33 | 34 | 44 | 45 |

Put the cursor on or inside a pair of tags to highlight them. 46 | Press Ctrl-J to jump to the tag that matches the one under the 47 | cursor.

48 |
49 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/demo/placeholder.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Placeholder demo 4 | 5 | 6 | 7 | 8 | 9 | 10 | 16 | 28 | 29 |
30 |

Placeholder demo

31 |
32 | 33 |

The placeholder 34 | plug-in adds an option placeholder that can be set to 35 | make text appear in the editor when it is empty and not focused. 36 | If the source textarea has a placeholder attribute, 37 | it will automatically be inherited.

38 | 39 | 44 | 45 |
46 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/demo/resize.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Autoresize Demo 4 | 5 | 6 | 7 | 8 | 9 | 10 | 16 | 28 | 29 |
30 |

Autoresize Demo

31 |
37 | 38 |

By setting an editor's height style 39 | to auto and giving 40 | the viewportMargin 41 | a value of Infinity, CodeMirror can be made to 42 | automatically resize to fit its content.

43 | 44 | 50 | 51 |
52 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/demo/rulers.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Ruler Demo 4 | 5 | 6 | 7 | 8 | 9 | 10 | 13 | 25 | 26 |
27 |

Ruler Demo

28 | 29 | 44 | 45 |

Demonstration of 46 | the rulers addon, which 47 | displays vertical lines at given column offsets.

48 | 49 |
50 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/demo/trailingspace.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Trailing Whitespace Demo 4 | 5 | 6 | 7 | 8 | 9 | 10 | 18 | 30 | 31 |
32 |

Trailing Whitespace Demo

33 |
36 | 37 | 43 | 44 |

Uses 45 | the trailingspace 46 | addon to highlight trailing whitespace.

47 | 48 |
49 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/demo/visibletabs.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Visible tabs demo 4 | 5 | 6 | 7 | 8 | 9 | 10 | 18 | 30 | 31 |
32 |

Visible tabs demo

33 |
48 | 49 |

Tabs inside the editor are spans with the 50 | class cm-tab, and can be styled.

51 | 52 | 61 | 62 |
63 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/doc/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williamd1k0/gdscript-playground/54e4a9f6049747dd262fc8b29fc3ece3bc0ff2c6/web/src/lib/codemirror/doc/logo.png -------------------------------------------------------------------------------- /web/src/lib/codemirror/doc/source_sans.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williamd1k0/gdscript-playground/54e4a9f6049747dd262fc8b29fc3ece3bc0ff2c6/web/src/lib/codemirror/doc/source_sans.woff -------------------------------------------------------------------------------- /web/src/lib/codemirror/doc/yinyang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williamd1k0/gdscript-playground/54e4a9f6049747dd262fc8b29fc3ece3bc0ff2c6/web/src/lib/codemirror/doc/yinyang.png -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/asciiarmor/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: ASCII Armor (PGP) mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

ASCII Armor (PGP) mode

27 |
36 | 37 | 42 | 43 |

MIME types 44 | defined: application/pgp, application/pgp-encrypted, application/pgp-keys, application/pgp-signature

45 | 46 |
47 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/css/gss_test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | (function() { 5 | "use strict"; 6 | 7 | var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-gss"); 8 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "gss"); } 9 | 10 | MT("atComponent", 11 | "[def @component] {", 12 | "[tag foo] {", 13 | " [property color]: [keyword black];", 14 | "}", 15 | "}"); 16 | 17 | })(); 18 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/cypher/test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | (function() { 5 | var mode = CodeMirror.getMode({tabSize: 4, indentUnit: 2}, "cypher"); 6 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } 7 | 8 | MT("unbalancedDoubledQuotedString", 9 | "[string \"a'b\"][variable c]"); 10 | 11 | MT("unbalancedSingleQuotedString", 12 | "[string 'a\"b'][variable c]"); 13 | 14 | MT("doubleQuotedString", 15 | "[string \"a\"][variable b]"); 16 | 17 | MT("singleQuotedString", 18 | "[string 'a'][variable b]"); 19 | 20 | MT("single attribute (with content)", 21 | "[node {][atom a:][string 'a'][node }]"); 22 | 23 | MT("multiple attribute, singleQuotedString (with content)", 24 | "[node {][atom a:][string 'a'][node ,][atom b:][string 'b'][node }]"); 25 | 26 | MT("multiple attribute, doubleQuotedString (with content)", 27 | "[node {][atom a:][string \"a\"][node ,][atom b:][string \"b\"][node }]"); 28 | 29 | MT("single attribute (without content)", 30 | "[node {][atom a:][string 'a'][node }]"); 31 | 32 | MT("multiple attribute, singleQuotedString (without content)", 33 | "[node {][atom a:][string ''][node ,][atom b:][string ''][node }]"); 34 | 35 | MT("multiple attribute, doubleQuotedString (without content)", 36 | "[node {][atom a:][string \"\"][node ,][atom b:][string \"\"][node }]"); 37 | })(); 38 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/d/test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | (function() { 5 | var mode = CodeMirror.getMode({indentUnit: 2}, "d"); 6 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } 7 | 8 | MT("nested_comments", 9 | "[comment /+]","[comment comment]","[comment +/]","[variable void] [variable main](){}"); 10 | 11 | })(); 12 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/dart/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Dart mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Dart mode

27 |
28 | 62 |
63 | 64 | 70 | 71 |
72 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/diff/diff.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | CodeMirror.defineMode("diff", function() { 15 | 16 | var TOKEN_NAMES = { 17 | '+': 'positive', 18 | '-': 'negative', 19 | '@': 'meta' 20 | }; 21 | 22 | return { 23 | token: function(stream) { 24 | var tw_pos = stream.string.search(/[\t ]+?$/); 25 | 26 | if (!stream.sol() || tw_pos === 0) { 27 | stream.skipToEnd(); 28 | return ("error " + ( 29 | TOKEN_NAMES[stream.string.charAt(0)] || '')).replace(/ $/, ''); 30 | } 31 | 32 | var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd(); 33 | 34 | if (tw_pos === -1) { 35 | stream.skipToEnd(); 36 | } else { 37 | stream.pos = tw_pos; 38 | } 39 | 40 | return token_name; 41 | } 42 | }; 43 | }); 44 | 45 | CodeMirror.defineMIME("text/x-diff", "diff"); 46 | 47 | }); 48 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/ecl/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: ECL mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

ECL mode

27 |
45 | 48 | 49 |

Based on CodeMirror's clike mode. For more information see HPCC Systems web site.

50 |

MIME types defined: text/x-ecl.

51 | 52 |
53 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/elm/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Elm mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Elm mode

27 | 28 |
52 | 53 | 59 | 60 |

MIME types defined: text/x-elm.

61 |
62 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/forth/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Forth mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 18 | 31 | 32 |
33 | 34 |

Forth mode

35 | 36 |
57 |
58 | 59 | 70 | 71 |

Simple mode that handle Forth-Syntax (Forth on Wikipedia).

72 | 73 |

MIME types defined: text/x-forth.

74 | 75 |
76 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/gherkin/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Gherkin mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Gherkin mode

27 |
42 | 45 | 46 |

MIME types defined: text/x-feature.

47 | 48 |
49 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/haskell-literate/haskell-literate.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | (function (mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror"), require("../haskell/haskell")) 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror", "../haskell/haskell"], mod) 9 | else // Plain browser env 10 | mod(CodeMirror) 11 | })(function (CodeMirror) { 12 | "use strict" 13 | 14 | CodeMirror.defineMode("haskell-literate", function (config, parserConfig) { 15 | var baseMode = CodeMirror.getMode(config, (parserConfig && parserConfig.base) || "haskell") 16 | 17 | return { 18 | startState: function () { 19 | return { 20 | inCode: false, 21 | baseState: CodeMirror.startState(baseMode) 22 | } 23 | }, 24 | token: function (stream, state) { 25 | if (stream.sol()) { 26 | if (state.inCode = stream.eat(">")) 27 | return "meta" 28 | } 29 | if (state.inCode) { 30 | return baseMode.token(stream, state.baseState) 31 | } else { 32 | stream.skipToEnd() 33 | return "comment" 34 | } 35 | }, 36 | innerMode: function (state) { 37 | return state.inCode ? {state: state.baseState, mode: baseMode} : null 38 | } 39 | } 40 | }, "haskell") 41 | 42 | CodeMirror.defineMIME("text/x-literate-haskell", "haskell-literate") 43 | }); 44 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/htmlembedded/htmlembedded.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), 7 | require("../../addon/mode/multiplex")); 8 | else if (typeof define == "function" && define.amd) // AMD 9 | define(["../../lib/codemirror", "../htmlmixed/htmlmixed", 10 | "../../addon/mode/multiplex"], mod); 11 | else // Plain browser env 12 | mod(CodeMirror); 13 | })(function(CodeMirror) { 14 | "use strict"; 15 | 16 | CodeMirror.defineMode("htmlembedded", function(config, parserConfig) { 17 | var closeComment = parserConfig.closeComment || "--%>" 18 | return CodeMirror.multiplexingMode(CodeMirror.getMode(config, "htmlmixed"), { 19 | open: parserConfig.openComment || "<%--", 20 | close: closeComment, 21 | delimStyle: "comment", 22 | mode: {token: function(stream) { 23 | stream.skipTo(closeComment) || stream.skipToEnd() 24 | return "comment" 25 | }} 26 | }, { 27 | open: parserConfig.open || parserConfig.scriptStartRegex || "<%", 28 | close: parserConfig.close || parserConfig.scriptEndRegex || "%>", 29 | mode: CodeMirror.getMode(config, parserConfig.scriptingModeSpec) 30 | }); 31 | }, "htmlmixed"); 32 | 33 | CodeMirror.defineMIME("application/x-ejs", {name: "htmlembedded", scriptingModeSpec:"javascript"}); 34 | CodeMirror.defineMIME("application/x-aspx", {name: "htmlembedded", scriptingModeSpec:"text/x-csharp"}); 35 | CodeMirror.defineMIME("application/x-jsp", {name: "htmlembedded", scriptingModeSpec:"text/x-java"}); 36 | CodeMirror.defineMIME("application/x-erb", {name: "htmlembedded", scriptingModeSpec:"ruby"}); 37 | }); 38 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/http/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: HTTP mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

HTTP mode

27 | 28 | 29 |
39 | 40 | 43 | 44 |

MIME types defined: message/http.

45 |
46 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/idl/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: IDL mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 25 | 26 |
27 |

IDL mode

28 | 29 |
53 | 63 | 64 |

MIME types defined: text/x-idl.

65 |
66 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/javascript/typescript.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: TypeScript mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 25 | 26 |
27 |

TypeScript mode

28 | 29 | 30 |
52 | 53 | 60 | 61 |

This is a specialization of the JavaScript mode.

62 |
63 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/mbox/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: mbox mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

mbox mode

27 |
38 | 41 | 42 |

MIME types defined: application/mbox.

43 | 44 |
45 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/oz/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Oz mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 14 | 26 | 27 |
28 |

Oz mode

29 | 50 |

MIME type defined: text/x-oz.

51 | 52 | 59 |
60 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/pascal/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Pascal mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Pascal mode

27 | 28 | 29 |
52 | 53 | 59 | 60 |

MIME types defined: text/x-pascal.

61 |
62 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/perl/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Perl mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Perl mode

27 | 28 | 29 |
67 | 68 | 73 | 74 |

MIME types defined: text/x-perl.

75 |
76 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/pig/index.html: -------------------------------------------------------------------------------- 1 |  2 | CodeMirror: Pig Latin mode 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 23 | 24 |
25 |

Pig Latin mode

26 |
38 | 39 | 46 | 47 |

48 | Simple mode that handles Pig Latin language. 49 |

50 | 51 |

MIME type defined: text/x-pig 52 | (PIG code) 53 |

54 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/properties/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Properties files mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Properties files mode

27 |
46 | 49 | 50 |

MIME types defined: text/x-properties, 51 | text/x-ini.

52 | 53 |
54 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/ruby/test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | (function() { 5 | var mode = CodeMirror.getMode({indentUnit: 2}, "ruby"); 6 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } 7 | 8 | MT("divide_equal_operator", 9 | "[variable bar] [operator /=] [variable foo]"); 10 | 11 | MT("divide_equal_operator_no_spacing", 12 | "[variable foo][operator /=][number 42]"); 13 | 14 | MT("complex_regexp", 15 | "[keyword if] [variable cr] [operator =~] [string-2 /(?: \\( #{][tag RE_NOT][string-2 }\\( | #{][tag RE_NOT_PAR_OR][string-2 }* #{][tag RE_OPA_OR][string-2 } )/][variable x]") 16 | 17 | MT("indented_heredoc", 18 | "[keyword def] [def x]", 19 | " [variable y] [operator =] [string <<-FOO]", 20 | "[string bar]", 21 | "[string FOO]", 22 | "[keyword end]") 23 | })(); 24 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/rust/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Rust mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 25 | 26 |
27 |

Rust mode

28 | 29 | 30 |
53 | 54 | 62 | 63 |

MIME types defined: text/x-rustsrc.

64 |
65 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/rust/test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | (function() { 5 | var mode = CodeMirror.getMode({indentUnit: 4}, "rust"); 6 | function MT(name) {test.mode(name, mode, Array.prototype.slice.call(arguments, 1));} 7 | 8 | MT('integer_test', 9 | '[number 123i32]', 10 | '[number 123u32]', 11 | '[number 123_u32]', 12 | '[number 0xff_u8]', 13 | '[number 0o70_i16]', 14 | '[number 0b1111_1111_1001_0000_i32]', 15 | '[number 0usize]'); 16 | 17 | MT('float_test', 18 | '[number 123.0f64]', 19 | '[number 0.1f64]', 20 | '[number 0.1f32]', 21 | '[number 12E+99_f64]'); 22 | 23 | MT('string-literals-test', 24 | '[string "foo"]', 25 | '[string r"foo"]', 26 | '[string "\\"foo\\""]', 27 | '[string r#""foo""#]', 28 | '[string "foo #\\"# bar"]', 29 | 30 | '[string b"foo"]', 31 | '[string br"foo"]', 32 | '[string b"\\"foo\\""]', 33 | '[string br#""foo""#]', 34 | '[string br##"foo #" bar"##]', 35 | 36 | "[string-2 'h']", 37 | "[string-2 b'h']"); 38 | 39 | })(); 40 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/sass/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Sass mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 26 | 27 |
28 |

Sass mode

29 |
59 | 66 | 67 |

MIME types defined: text/x-sass.

68 |
69 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/shell/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Shell mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 14 | 27 | 28 |
29 |

Shell mode

30 | 31 | 32 | 56 | 57 | 64 | 65 |

MIME types defined: text/x-sh, application/x-sh.

66 |
67 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/solr/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Solr mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 20 | 33 | 34 |
35 |

Solr mode

36 | 37 |
38 | 47 |
48 | 49 | 55 | 56 |

MIME types defined: text/x-solr.

57 |
58 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/sparql/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: SPARQL mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 25 | 26 |
27 |

SPARQL mode

28 |
52 | 58 | 59 |

MIME types defined: application/sparql-query.

60 | 61 |
62 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/spreadsheet/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Spreadsheet mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 25 | 26 |
27 |

Spreadsheet mode

28 |
29 | 30 | 37 | 38 |

MIME types defined: text/x-spreadsheet.

39 | 40 |

The Spreadsheet Mode

41 |

Created by Robert Plummer

42 |
43 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/swift/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Swift mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 14 | 27 | 28 |
29 |

Swift mode

30 |
58 | 59 | 66 | 67 |

A simple mode for Swift

68 | 69 |

MIME types defined: text/x-swift (Swift code)

70 |
71 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/tiddlywiki/tiddlywiki.css: -------------------------------------------------------------------------------- 1 | span.cm-underlined { 2 | text-decoration: underline; 3 | } 4 | span.cm-strikethrough { 5 | text-decoration: line-through; 6 | } 7 | span.cm-brace { 8 | color: #170; 9 | font-weight: bold; 10 | } 11 | span.cm-table { 12 | color: blue; 13 | font-weight: bold; 14 | } 15 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/tiki/tiki.css: -------------------------------------------------------------------------------- 1 | .cm-tw-syntaxerror { 2 | color: #FFF; 3 | background-color: #900; 4 | } 5 | 6 | .cm-tw-deleted { 7 | text-decoration: line-through; 8 | } 9 | 10 | .cm-tw-header5 { 11 | font-weight: bold; 12 | } 13 | .cm-tw-listitem:first-child { /*Added first child to fix duplicate padding when highlighting*/ 14 | padding-left: 10px; 15 | } 16 | 17 | .cm-tw-box { 18 | border-top-width: 0px !important; 19 | border-style: solid; 20 | border-width: 1px; 21 | border-color: inherit; 22 | } 23 | 24 | .cm-tw-underline { 25 | text-decoration: underline; 26 | } -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/tornado/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Tornado template mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 27 | 28 |
29 |

Tornado template mode

30 |
50 | 51 | 59 | 60 |

Mode for HTML with embedded Tornado template markup.

61 | 62 |

MIME types defined: text/x-tornado

63 |
64 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/turtle/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Turtle mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 25 | 26 |
27 |

Turtle mode

28 |
42 | 48 | 49 |

MIME types defined: text/turtle.

50 | 51 |
52 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/twig/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Twig mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 26 | 27 |
28 |

Twig mode

29 |
42 | 47 |
48 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/vb/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: VB.NET mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 17 | 30 | 31 |
32 |

VB.NET mode

33 |
34 | 46 |
47 |

MIME type defined: text/x-vb.

48 | 49 |
50 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/vbscript/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: VBScript mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

VBScript mode

27 | 28 | 29 |
46 | 47 | 53 | 54 |

MIME types defined: text/vbscript.

55 |
56 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/wast/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: WebAssembly mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 17 | 32 | 33 |
34 |

WebAssembly mode

35 | 36 | 37 |
62 | 63 | 71 | 72 |

MIME types defined: text/webassembly.

73 |
74 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/xml/test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 3 | 4 | (function() { 5 | var mode = CodeMirror.getMode({indentUnit: 2}, "xml"), mname = "xml"; 6 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), mname); } 7 | 8 | MT("matching", 9 | "[tag&bracket <][tag top][tag&bracket >]", 10 | " text", 11 | " [tag&bracket <][tag inner][tag&bracket />]", 12 | "[tag&bracket ]"); 13 | 14 | MT("nonmatching", 15 | "[tag&bracket <][tag top][tag&bracket >]", 16 | " [tag&bracket <][tag inner][tag&bracket />]", 17 | " [tag&bracket ]"); 18 | 19 | MT("doctype", 20 | "[meta ]", 21 | "[tag&bracket <][tag top][tag&bracket />]"); 22 | 23 | MT("cdata", 24 | "[tag&bracket <][tag top][tag&bracket >]", 25 | " [atom ]", 27 | "[tag&bracket ]"); 28 | 29 | // HTML tests 30 | mode = CodeMirror.getMode({indentUnit: 2}, "text/html"); 31 | 32 | MT("selfclose", 33 | "[tag&bracket <][tag html][tag&bracket >]", 34 | " [tag&bracket <][tag link] [attribute rel]=[string stylesheet] [attribute href]=[string \"/foobar\"][tag&bracket >]", 35 | "[tag&bracket ]"); 36 | 37 | MT("list", 38 | "[tag&bracket <][tag ol][tag&bracket >]", 39 | " [tag&bracket <][tag li][tag&bracket >]one", 40 | " [tag&bracket <][tag li][tag&bracket >]two", 41 | "[tag&bracket ]"); 42 | 43 | MT("valueless", 44 | "[tag&bracket <][tag input] [attribute type]=[string checkbox] [attribute checked][tag&bracket />]"); 45 | 46 | MT("pThenArticle", 47 | "[tag&bracket <][tag p][tag&bracket >]", 48 | " foo", 49 | "[tag&bracket <][tag article][tag&bracket >]bar"); 50 | 51 | })(); 52 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/mode/z80/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Z80 assembly mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Z80 assembly mode

27 | 28 | 29 |
45 | 46 | 51 | 52 |

MIME types defined: text/x-z80, text/x-ez80.

53 |
54 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codemirror", 3 | "version": "5.65.10", 4 | "main": "lib/codemirror.js", 5 | "style": "lib/codemirror.css", 6 | "author": { 7 | "name": "Marijn Haverbeke", 8 | "email": "marijnh@gmail.com", 9 | "url": "http://marijnhaverbeke.nl" 10 | }, 11 | "description": "Full-featured in-browser code editor", 12 | "license": "MIT", 13 | "directories": { 14 | "lib": "./lib" 15 | }, 16 | "scripts": { 17 | "build": "rollup -c", 18 | "watch": "rollup -w -c", 19 | "prepare": "npm run-script build", 20 | "test": "node ./test/run.js", 21 | "lint": "bin/lint" 22 | }, 23 | "devDependencies": { 24 | "@rollup/plugin-buble": "^0.21.3", 25 | "blint": "^1.1.2", 26 | "cm5-vim": "^0.0.5", 27 | "node-static": "0.7.11", 28 | "puppeteer": "^1.20.0", 29 | "rollup": "^1.26.3", 30 | "rollup-plugin-copy": "^3.4.0" 31 | }, 32 | "bugs": "http://github.com/codemirror/CodeMirror/issues", 33 | "keywords": [ 34 | "JavaScript", 35 | "CodeMirror", 36 | "Editor" 37 | ], 38 | "homepage": "https://codemirror.net/5/", 39 | "repository": { 40 | "type": "git", 41 | "url": "https://github.com/codemirror/CodeMirror.git" 42 | }, 43 | "jspm": { 44 | "directories": {}, 45 | "dependencies": {}, 46 | "devDependencies": {} 47 | }, 48 | "dependencies": {}, 49 | "publishConfig": { 50 | "tag": "version5" 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/rollup.config.js: -------------------------------------------------------------------------------- 1 | import buble from '@rollup/plugin-buble'; 2 | import copy from 'rollup-plugin-copy' 3 | 4 | let copyVim = copy({ 5 | targets: [ 6 | { 7 | src: require.resolve("cm5-vim/vim.js").replace(/\\/g, "/"), 8 | dest: "./keymap" 9 | } 10 | ] 11 | }); 12 | 13 | export default [ 14 | { 15 | input: "src/codemirror.js", 16 | output: { 17 | banner: `// CodeMirror, copyright (c) by Marijn Haverbeke and others 18 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE 19 | 20 | // This is CodeMirror (https://codemirror.net/5), a code editor 21 | // implemented in JavaScript on top of the browser's DOM. 22 | // 23 | // You can find some technical background for some of the code below 24 | // at http://marijnhaverbeke.nl/blog/#cm-internals . 25 | `, 26 | format: "umd", 27 | file: "lib/codemirror.js", 28 | name: "CodeMirror" 29 | }, 30 | plugins: [ buble({namedFunctionExpressions: false}), copyVim ] 31 | }, 32 | { 33 | input: ["src/addon/runmode/runmode-standalone.js"], 34 | output: { 35 | format: "iife", 36 | file: "addon/runmode/runmode-standalone.js", 37 | name: "CodeMirror", 38 | freeze: false, // IE8 doesn't support Object.freeze. 39 | }, 40 | plugins: [ buble({namedFunctionExpressions: false}) ] 41 | }, 42 | { 43 | input: ["src/addon/runmode/runmode.node.js"], 44 | output: { 45 | format: "cjs", 46 | file: "addon/runmode/runmode.node.js", 47 | name: "CodeMirror", 48 | freeze: false, // IE8 doesn't support Object.freeze. 49 | }, 50 | plugins: [ buble({namedFunctionExpressions: false}) ] 51 | }, 52 | ]; 53 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/src/addon/runmode/codemirror-standalone.js: -------------------------------------------------------------------------------- 1 | import StringStream from "../../util/StringStream.js" 2 | import { countColumn } from "../../util/misc.js" 3 | import * as modeMethods from "../../modes.js" 4 | 5 | // declare global: globalThis, CodeMirror 6 | 7 | // Create a minimal CodeMirror needed to use runMode, and assign to root. 8 | var root = typeof globalThis !== 'undefined' ? globalThis : window 9 | root.CodeMirror = {} 10 | 11 | // Copy StringStream and mode methods into CodeMirror object. 12 | CodeMirror.StringStream = StringStream 13 | for (var exported in modeMethods) CodeMirror[exported] = modeMethods[exported] 14 | 15 | // Minimal default mode. 16 | CodeMirror.defineMode("null", () => ({token: stream => stream.skipToEnd()})) 17 | CodeMirror.defineMIME("text/plain", "null") 18 | 19 | CodeMirror.registerHelper = CodeMirror.registerGlobalHelper = Math.min 20 | CodeMirror.splitLines = function(string) { return string.split(/\r?\n|\r/) } 21 | CodeMirror.countColumn = countColumn 22 | 23 | CodeMirror.defaults = { indentUnit: 2 } 24 | export default CodeMirror 25 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/src/addon/runmode/codemirror.node.js: -------------------------------------------------------------------------------- 1 | import StringStream from "../../util/StringStream.js" 2 | import * as modeMethods from "../../modes.js" 3 | import {countColumn} from "../../util/misc.js" 4 | 5 | // Copy StringStream and mode methods into exports (CodeMirror) object. 6 | exports.StringStream = StringStream 7 | exports.countColumn = countColumn 8 | for (var exported in modeMethods) exports[exported] = modeMethods[exported] 9 | 10 | // Shim library CodeMirror with the minimal CodeMirror defined above. 11 | require.cache[require.resolve("../../lib/codemirror")] = require.cache[require.resolve("./runmode.node")] 12 | require.cache[require.resolve("../../addon/runmode/runmode")] = require.cache[require.resolve("./runmode.node")] 13 | 14 | // Minimal default mode. 15 | exports.defineMode("null", () => ({token: stream => stream.skipToEnd()})) 16 | exports.defineMIME("text/plain", "null") 17 | 18 | exports.registerHelper = exports.registerGlobalHelper = Math.min 19 | exports.splitLines = function(string) { return string.split(/\r?\n|\r/) } 20 | 21 | exports.defaults = { indentUnit: 2 } 22 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/src/addon/runmode/runmode-standalone.js: -------------------------------------------------------------------------------- 1 | import "./codemirror-standalone.js" 2 | import "../../../addon/runmode/runmode.js" -------------------------------------------------------------------------------- /web/src/lib/codemirror/src/addon/runmode/runmode.node.js: -------------------------------------------------------------------------------- 1 | import "./codemirror.node.js" 2 | import "../../../addon/runmode/runmode.js" -------------------------------------------------------------------------------- /web/src/lib/codemirror/src/codemirror.js: -------------------------------------------------------------------------------- 1 | import { CodeMirror } from "./edit/main.js" 2 | 3 | export default CodeMirror 4 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/src/display/focus.js: -------------------------------------------------------------------------------- 1 | import { restartBlink } from "./selection.js" 2 | import { webkit } from "../util/browser.js" 3 | import { addClass, rmClass } from "../util/dom.js" 4 | import { signal } from "../util/event.js" 5 | 6 | export function ensureFocus(cm) { 7 | if (!cm.hasFocus()) { 8 | cm.display.input.focus() 9 | if (!cm.state.focused) onFocus(cm) 10 | } 11 | } 12 | 13 | export function delayBlurEvent(cm) { 14 | cm.state.delayingBlurEvent = true 15 | setTimeout(() => { if (cm.state.delayingBlurEvent) { 16 | cm.state.delayingBlurEvent = false 17 | if (cm.state.focused) onBlur(cm) 18 | } }, 100) 19 | } 20 | 21 | export function onFocus(cm, e) { 22 | if (cm.state.delayingBlurEvent && !cm.state.draggingText) cm.state.delayingBlurEvent = false 23 | 24 | if (cm.options.readOnly == "nocursor") return 25 | if (!cm.state.focused) { 26 | signal(cm, "focus", cm, e) 27 | cm.state.focused = true 28 | addClass(cm.display.wrapper, "CodeMirror-focused") 29 | // This test prevents this from firing when a context 30 | // menu is closed (since the input reset would kill the 31 | // select-all detection hack) 32 | if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { 33 | cm.display.input.reset() 34 | if (webkit) setTimeout(() => cm.display.input.reset(true), 20) // Issue #1730 35 | } 36 | cm.display.input.receivedFocus() 37 | } 38 | restartBlink(cm) 39 | } 40 | export function onBlur(cm, e) { 41 | if (cm.state.delayingBlurEvent) return 42 | 43 | if (cm.state.focused) { 44 | signal(cm, "blur", cm, e) 45 | cm.state.focused = false 46 | rmClass(cm.display.wrapper, "CodeMirror-focused") 47 | } 48 | clearInterval(cm.display.blinker) 49 | setTimeout(() => { if (!cm.state.focused) cm.display.shift = false }, 150) 50 | } 51 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/src/display/gutters.js: -------------------------------------------------------------------------------- 1 | import { elt, removeChildren } from "../util/dom.js" 2 | import { regChange } from "./view_tracking.js" 3 | import { alignHorizontally } from "./line_numbers.js" 4 | import { updateGutterSpace } from "./update_display.js" 5 | 6 | export function getGutters(gutters, lineNumbers) { 7 | let result = [], sawLineNumbers = false 8 | for (let i = 0; i < gutters.length; i++) { 9 | let name = gutters[i], style = null 10 | if (typeof name != "string") { style = name.style; name = name.className } 11 | if (name == "CodeMirror-linenumbers") { 12 | if (!lineNumbers) continue 13 | else sawLineNumbers = true 14 | } 15 | result.push({className: name, style}) 16 | } 17 | if (lineNumbers && !sawLineNumbers) result.push({className: "CodeMirror-linenumbers", style: null}) 18 | return result 19 | } 20 | 21 | // Rebuild the gutter elements, ensure the margin to the left of the 22 | // code matches their width. 23 | export function renderGutters(display) { 24 | let gutters = display.gutters, specs = display.gutterSpecs 25 | removeChildren(gutters) 26 | display.lineGutter = null 27 | for (let i = 0; i < specs.length; ++i) { 28 | let {className, style} = specs[i] 29 | let gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + className)) 30 | if (style) gElt.style.cssText = style 31 | if (className == "CodeMirror-linenumbers") { 32 | display.lineGutter = gElt 33 | gElt.style.width = (display.lineNumWidth || 1) + "px" 34 | } 35 | } 36 | gutters.style.display = specs.length ? "" : "none" 37 | updateGutterSpace(display) 38 | } 39 | 40 | export function updateGutters(cm) { 41 | renderGutters(cm.display) 42 | regChange(cm) 43 | alignHorizontally(cm) 44 | } 45 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/src/display/mode_state.js: -------------------------------------------------------------------------------- 1 | import { getMode } from "../modes.js" 2 | 3 | import { startWorker } from "./highlight_worker.js" 4 | import { regChange } from "./view_tracking.js" 5 | 6 | // Used to get the editor into a consistent state again when options change. 7 | 8 | export function loadMode(cm) { 9 | cm.doc.mode = getMode(cm.options, cm.doc.modeOption) 10 | resetModeState(cm) 11 | } 12 | 13 | export function resetModeState(cm) { 14 | cm.doc.iter(line => { 15 | if (line.stateAfter) line.stateAfter = null 16 | if (line.styles) line.styles = null 17 | }) 18 | cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first 19 | startWorker(cm, 100) 20 | cm.state.modeGen++ 21 | if (cm.curOp) regChange(cm) 22 | } 23 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/src/edit/deleteNearSelection.js: -------------------------------------------------------------------------------- 1 | import { runInOp } from "../display/operations.js" 2 | import { ensureCursorVisible } from "../display/scrolling.js" 3 | import { cmp } from "../line/pos.js" 4 | import { replaceRange } from "../model/changes.js" 5 | import { lst } from "../util/misc.js" 6 | 7 | // Helper for deleting text near the selection(s), used to implement 8 | // backspace, delete, and similar functionality. 9 | export function deleteNearSelection(cm, compute) { 10 | let ranges = cm.doc.sel.ranges, kill = [] 11 | // Build up a set of ranges to kill first, merging overlapping 12 | // ranges. 13 | for (let i = 0; i < ranges.length; i++) { 14 | let toKill = compute(ranges[i]) 15 | while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { 16 | let replaced = kill.pop() 17 | if (cmp(replaced.from, toKill.from) < 0) { 18 | toKill.from = replaced.from 19 | break 20 | } 21 | } 22 | kill.push(toKill) 23 | } 24 | // Next, remove those actual ranges. 25 | runInOp(cm, () => { 26 | for (let i = kill.length - 1; i >= 0; i--) 27 | replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete") 28 | ensureCursorVisible(cm) 29 | }) 30 | } 31 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/src/edit/global_events.js: -------------------------------------------------------------------------------- 1 | import { onBlur } from "../display/focus.js" 2 | import { on } from "../util/event.js" 3 | 4 | // These must be handled carefully, because naively registering a 5 | // handler for each editor will cause the editors to never be 6 | // garbage collected. 7 | 8 | function forEachCodeMirror(f) { 9 | if (!document.getElementsByClassName) return 10 | let byClass = document.getElementsByClassName("CodeMirror"), editors = [] 11 | for (let i = 0; i < byClass.length; i++) { 12 | let cm = byClass[i].CodeMirror 13 | if (cm) editors.push(cm) 14 | } 15 | if (editors.length) editors[0].operation(() => { 16 | for (let i = 0; i < editors.length; i++) f(editors[i]) 17 | }) 18 | } 19 | 20 | let globalsRegistered = false 21 | export function ensureGlobalHandlers() { 22 | if (globalsRegistered) return 23 | registerGlobalHandlers() 24 | globalsRegistered = true 25 | } 26 | function registerGlobalHandlers() { 27 | // When the window resizes, we need to refresh active editors. 28 | let resizeTimer 29 | on(window, "resize", () => { 30 | if (resizeTimer == null) resizeTimer = setTimeout(() => { 31 | resizeTimer = null 32 | forEachCodeMirror(onResize) 33 | }, 100) 34 | }) 35 | // When the window loses focus, we want to show the editor as blurred 36 | on(window, "blur", () => forEachCodeMirror(onBlur)) 37 | } 38 | // Called when the window resizes 39 | function onResize(cm) { 40 | let d = cm.display 41 | // Might be a text scaling operation, clear size caches. 42 | d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null 43 | d.scrollbarsClipped = false 44 | cm.setSize() 45 | } 46 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/src/edit/utils.js: -------------------------------------------------------------------------------- 1 | import { clearCaches } from "../measurement/position_measurement.js" 2 | 3 | export function themeChanged(cm) { 4 | cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + 5 | cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-") 6 | clearCaches(cm) 7 | } 8 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/src/input/keynames.js: -------------------------------------------------------------------------------- 1 | export let keyNames = { 2 | 3: "Pause", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", 3 | 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", 4 | 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", 5 | 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", 6 | 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 145: "ScrollLock", 7 | 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", 8 | 221: "]", 222: "'", 224: "Mod", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", 9 | 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert" 10 | } 11 | 12 | // Number keys 13 | for (let i = 0; i < 10; i++) keyNames[i + 48] = keyNames[i + 96] = String(i) 14 | // Alphabetic keys 15 | for (let i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i) 16 | // Function keys 17 | for (let i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i 18 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/src/line/pos.js: -------------------------------------------------------------------------------- 1 | import { getLine } from "./utils_line.js" 2 | 3 | // A Pos instance represents a position within the text. 4 | export function Pos(line, ch, sticky = null) { 5 | if (!(this instanceof Pos)) return new Pos(line, ch, sticky) 6 | this.line = line 7 | this.ch = ch 8 | this.sticky = sticky 9 | } 10 | 11 | // Compare two positions, return 0 if they are the same, a negative 12 | // number when a is less, and a positive number otherwise. 13 | export function cmp(a, b) { return a.line - b.line || a.ch - b.ch } 14 | 15 | export function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 } 16 | 17 | export function copyPos(x) {return Pos(x.line, x.ch)} 18 | export function maxPos(a, b) { return cmp(a, b) < 0 ? b : a } 19 | export function minPos(a, b) { return cmp(a, b) < 0 ? a : b } 20 | 21 | // Most of the external API clips given positions to make sure they 22 | // actually exist within the document. 23 | export function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))} 24 | export function clipPos(doc, pos) { 25 | if (pos.line < doc.first) return Pos(doc.first, 0) 26 | let last = doc.first + doc.size - 1 27 | if (pos.line > last) return Pos(last, getLine(doc, last).text.length) 28 | return clipToLen(pos, getLine(doc, pos.line).text.length) 29 | } 30 | function clipToLen(pos, linelen) { 31 | let ch = pos.ch 32 | if (ch == null || ch > linelen) return Pos(pos.line, linelen) 33 | else if (ch < 0) return Pos(pos.line, 0) 34 | else return pos 35 | } 36 | export function clipPosArray(doc, array) { 37 | let out = [] 38 | for (let i = 0; i < array.length; i++) out[i] = clipPos(doc, array[i]) 39 | return out 40 | } 41 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/src/line/saw_special_spans.js: -------------------------------------------------------------------------------- 1 | // Optimize some code when these features are not used. 2 | export let sawReadOnlySpans = false, sawCollapsedSpans = false 3 | 4 | export function seeReadOnlySpans() { 5 | sawReadOnlySpans = true 6 | } 7 | 8 | export function seeCollapsedSpans() { 9 | sawCollapsedSpans = true 10 | } 11 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/src/measurement/widgets.js: -------------------------------------------------------------------------------- 1 | import { contains, elt, removeChildrenAndAdd } from "../util/dom.js" 2 | import { e_target } from "../util/event.js" 3 | 4 | export function widgetHeight(widget) { 5 | if (widget.height != null) return widget.height 6 | let cm = widget.doc.cm 7 | if (!cm) return 0 8 | if (!contains(document.body, widget.node)) { 9 | let parentStyle = "position: relative;" 10 | if (widget.coverGutter) 11 | parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;" 12 | if (widget.noHScroll) 13 | parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;" 14 | removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)) 15 | } 16 | return widget.height = widget.node.parentNode.offsetHeight 17 | } 18 | 19 | // Return true when the given mouse event happened in a widget 20 | export function eventInWidget(display, e) { 21 | for (let n = e_target(e); n != display.wrapper; n = n.parentNode) { 22 | if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || 23 | (n.parentNode == display.sizer && n != display.mover)) 24 | return true 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/src/util/browser.js: -------------------------------------------------------------------------------- 1 | // Kludges for bugs and behavior differences that can't be feature 2 | // detected are enabled based on userAgent etc sniffing. 3 | let userAgent = navigator.userAgent 4 | let platform = navigator.platform 5 | 6 | export let gecko = /gecko\/\d/i.test(userAgent) 7 | let ie_upto10 = /MSIE \d/.test(userAgent) 8 | let ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent) 9 | let edge = /Edge\/(\d+)/.exec(userAgent) 10 | export let ie = ie_upto10 || ie_11up || edge 11 | export let ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]) 12 | export let webkit = !edge && /WebKit\//.test(userAgent) 13 | let qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent) 14 | export let chrome = !edge && /Chrome\/(\d+)/.exec(userAgent) 15 | export let chrome_version = chrome && +chrome[1] 16 | export let presto = /Opera\//.test(userAgent) 17 | export let safari = /Apple Computer/.test(navigator.vendor) 18 | export let mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent) 19 | export let phantom = /PhantomJS/.test(userAgent) 20 | 21 | export let ios = safari && (/Mobile\/\w+/.test(userAgent) || navigator.maxTouchPoints > 2) 22 | export let android = /Android/.test(userAgent) 23 | // This is woefully incomplete. Suggestions for alternative methods welcome. 24 | export let mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent) 25 | export let mac = ios || /Mac/.test(platform) 26 | export let chromeOS = /\bCrOS\b/.test(userAgent) 27 | export let windows = /win/i.test(platform) 28 | 29 | let presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/) 30 | if (presto_version) presto_version = Number(presto_version[1]) 31 | if (presto_version && presto_version >= 15) { presto = false; webkit = true } 32 | // Some browsers use the wrong event properties to signal cmd/ctrl on OS X 33 | export let flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)) 34 | export let captureRightClick = gecko || (ie && ie_version >= 9) 35 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/test/lint.js: -------------------------------------------------------------------------------- 1 | var blint = require("blint"); 2 | 3 | ["mode", "lib", "addon", "keymap"].forEach(function(dir) { 4 | blint.checkDir(dir, { 5 | browser: true, 6 | allowedGlobals: ["CodeMirror", "define", "test", "requirejs", "globalThis", "WeakSet"], 7 | ecmaVersion: 5, 8 | tabs: dir == "lib" 9 | }); 10 | }); 11 | 12 | ["src"].forEach(function(dir) { 13 | blint.checkDir(dir, { 14 | browser: true, 15 | allowedGlobals: ["WeakSet"], 16 | ecmaVersion: 6, 17 | semicolons: false 18 | }); 19 | }); 20 | 21 | module.exports = {ok: blint.success()}; 22 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/test/mode_test.css: -------------------------------------------------------------------------------- 1 | .mt-output .mt-token { 2 | border: 1px solid #ddd; 3 | white-space: pre; 4 | font-family: "Consolas", monospace; 5 | text-align: center; 6 | } 7 | 8 | .mt-output .mt-style { 9 | font-size: x-small; 10 | } 11 | 12 | .mt-output .mt-state { 13 | font-size: x-small; 14 | vertical-align: top; 15 | } 16 | 17 | .mt-output .mt-state-row { 18 | display: none; 19 | } 20 | 21 | .mt-state-unhide .mt-output .mt-state-row { 22 | display: table-row; 23 | } 24 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/test/run.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var lint = require("./lint"); 4 | 5 | var files = new (require('node-static').Server)(); 6 | 7 | var server = require('http').createServer(function (req, res) { 8 | req.addListener('end', function () { 9 | files.serve(req, res, function (err/*, result */) { 10 | if (err) { 11 | console.error(err); 12 | process.exit(1); 13 | } 14 | }); 15 | }).resume(); 16 | }).addListener('error', function (err) { 17 | throw err; 18 | }).listen(3000,(async () => { 19 | const puppeteer = require('puppeteer'); 20 | const browser = await puppeteer.launch({args: ["--no-sandbox", "--disable-setuid-sandbox"]}) 21 | const page = await browser.newPage() 22 | page.on('console', msg => console.log("console:", msg.text())) 23 | page.on('dialog', async dialog => { 24 | console.log(dialog.message()) 25 | await dialog.dismiss() 26 | }) 27 | page.evaluateOnNewDocument(() => window.automatedTests = true) 28 | await page.goto('http://localhost:3000/test/index.html#' + (process.argv[2] || "")) 29 | while(1) { 30 | if (await page.evaluate(() => window.done)) break 31 | await sleep(200) 32 | } 33 | let [failed, errors] = await page.evaluate(() => [window.failed, window.errored]) 34 | for (let error of errors) console.log(error) 35 | console.log(await page.evaluate(() => document.getElementById('output').innerText + "\n" + 36 | document.getElementById('status').innerText)) 37 | process.exit(failed > 0 || errors.length || !lint.ok ? 1 : 0) 38 | await browser.close() 39 | })()) 40 | 41 | function sleep(n) { return new Promise(acc => setTimeout(acc, n)) } 42 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/abcdef.css: -------------------------------------------------------------------------------- 1 | .cm-s-abcdef.CodeMirror { background: #0f0f0f; color: #defdef; } 2 | .cm-s-abcdef div.CodeMirror-selected { background: #515151; } 3 | .cm-s-abcdef .CodeMirror-line::selection, .cm-s-abcdef .CodeMirror-line > span::selection, .cm-s-abcdef .CodeMirror-line > span > span::selection { background: rgba(56, 56, 56, 0.99); } 4 | .cm-s-abcdef .CodeMirror-line::-moz-selection, .cm-s-abcdef .CodeMirror-line > span::-moz-selection, .cm-s-abcdef .CodeMirror-line > span > span::-moz-selection { background: rgba(56, 56, 56, 0.99); } 5 | .cm-s-abcdef .CodeMirror-gutters { background: #555; border-right: 2px solid #314151; } 6 | .cm-s-abcdef .CodeMirror-guttermarker { color: #222; } 7 | .cm-s-abcdef .CodeMirror-guttermarker-subtle { color: azure; } 8 | .cm-s-abcdef .CodeMirror-linenumber { color: #FFFFFF; } 9 | .cm-s-abcdef .CodeMirror-cursor { border-left: 1px solid #00FF00; } 10 | 11 | .cm-s-abcdef span.cm-keyword { color: darkgoldenrod; font-weight: bold; } 12 | .cm-s-abcdef span.cm-atom { color: #77F; } 13 | .cm-s-abcdef span.cm-number { color: violet; } 14 | .cm-s-abcdef span.cm-def { color: #fffabc; } 15 | .cm-s-abcdef span.cm-variable { color: #abcdef; } 16 | .cm-s-abcdef span.cm-variable-2 { color: #cacbcc; } 17 | .cm-s-abcdef span.cm-variable-3, .cm-s-abcdef span.cm-type { color: #def; } 18 | .cm-s-abcdef span.cm-property { color: #fedcba; } 19 | .cm-s-abcdef span.cm-operator { color: #ff0; } 20 | .cm-s-abcdef span.cm-comment { color: #7a7b7c; font-style: italic;} 21 | .cm-s-abcdef span.cm-string { color: #2b4; } 22 | .cm-s-abcdef span.cm-meta { color: #C9F; } 23 | .cm-s-abcdef span.cm-qualifier { color: #FFF700; } 24 | .cm-s-abcdef span.cm-builtin { color: #30aabc; } 25 | .cm-s-abcdef span.cm-bracket { color: #8a8a8a; } 26 | .cm-s-abcdef span.cm-tag { color: #FFDD44; } 27 | .cm-s-abcdef span.cm-attribute { color: #DDFF00; } 28 | .cm-s-abcdef span.cm-error { color: #FF0000; } 29 | .cm-s-abcdef span.cm-header { color: aquamarine; font-weight: bold; } 30 | .cm-s-abcdef span.cm-link { color: blueviolet; } 31 | 32 | .cm-s-abcdef .CodeMirror-activeline-background { background: #314151; } 33 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/ambiance-mobile.css: -------------------------------------------------------------------------------- 1 | .cm-s-ambiance.CodeMirror { 2 | -webkit-box-shadow: none; 3 | -moz-box-shadow: none; 4 | box-shadow: none; 5 | } 6 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/bespin.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Bespin 4 | Author: Mozilla / Jan T. Sott 5 | 6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) 7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) 8 | 9 | */ 10 | 11 | .cm-s-bespin.CodeMirror {background: #28211c; color: #9d9b97;} 12 | .cm-s-bespin div.CodeMirror-selected {background: #36312e !important;} 13 | .cm-s-bespin .CodeMirror-gutters {background: #28211c; border-right: 0px;} 14 | .cm-s-bespin .CodeMirror-linenumber {color: #666666;} 15 | .cm-s-bespin .CodeMirror-cursor {border-left: 1px solid #797977 !important;} 16 | 17 | .cm-s-bespin span.cm-comment {color: #937121;} 18 | .cm-s-bespin span.cm-atom {color: #9b859d;} 19 | .cm-s-bespin span.cm-number {color: #9b859d;} 20 | 21 | .cm-s-bespin span.cm-property, .cm-s-bespin span.cm-attribute {color: #54be0d;} 22 | .cm-s-bespin span.cm-keyword {color: #cf6a4c;} 23 | .cm-s-bespin span.cm-string {color: #f9ee98;} 24 | 25 | .cm-s-bespin span.cm-variable {color: #54be0d;} 26 | .cm-s-bespin span.cm-variable-2 {color: #5ea6ea;} 27 | .cm-s-bespin span.cm-def {color: #cf7d34;} 28 | .cm-s-bespin span.cm-error {background: #cf6a4c; color: #797977;} 29 | .cm-s-bespin span.cm-bracket {color: #9d9b97;} 30 | .cm-s-bespin span.cm-tag {color: #cf6a4c;} 31 | .cm-s-bespin span.cm-link {color: #9b859d;} 32 | 33 | .cm-s-bespin .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 34 | .cm-s-bespin .CodeMirror-activeline-background { background: #404040; } 35 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/blackboard.css: -------------------------------------------------------------------------------- 1 | /* Port of TextMate's Blackboard theme */ 2 | 3 | .cm-s-blackboard.CodeMirror { background: #0C1021; color: #F8F8F8; } 4 | .cm-s-blackboard div.CodeMirror-selected { background: #253B76; } 5 | .cm-s-blackboard .CodeMirror-line::selection, .cm-s-blackboard .CodeMirror-line > span::selection, .cm-s-blackboard .CodeMirror-line > span > span::selection { background: rgba(37, 59, 118, .99); } 6 | .cm-s-blackboard .CodeMirror-line::-moz-selection, .cm-s-blackboard .CodeMirror-line > span::-moz-selection, .cm-s-blackboard .CodeMirror-line > span > span::-moz-selection { background: rgba(37, 59, 118, .99); } 7 | .cm-s-blackboard .CodeMirror-gutters { background: #0C1021; border-right: 0; } 8 | .cm-s-blackboard .CodeMirror-guttermarker { color: #FBDE2D; } 9 | .cm-s-blackboard .CodeMirror-guttermarker-subtle { color: #888; } 10 | .cm-s-blackboard .CodeMirror-linenumber { color: #888; } 11 | .cm-s-blackboard .CodeMirror-cursor { border-left: 1px solid #A7A7A7; } 12 | 13 | .cm-s-blackboard .cm-keyword { color: #FBDE2D; } 14 | .cm-s-blackboard .cm-atom { color: #D8FA3C; } 15 | .cm-s-blackboard .cm-number { color: #D8FA3C; } 16 | .cm-s-blackboard .cm-def { color: #8DA6CE; } 17 | .cm-s-blackboard .cm-variable { color: #FF6400; } 18 | .cm-s-blackboard .cm-operator { color: #FBDE2D; } 19 | .cm-s-blackboard .cm-comment { color: #AEAEAE; } 20 | .cm-s-blackboard .cm-string { color: #61CE3C; } 21 | .cm-s-blackboard .cm-string-2 { color: #61CE3C; } 22 | .cm-s-blackboard .cm-meta { color: #D8FA3C; } 23 | .cm-s-blackboard .cm-builtin { color: #8DA6CE; } 24 | .cm-s-blackboard .cm-tag { color: #8DA6CE; } 25 | .cm-s-blackboard .cm-attribute { color: #8DA6CE; } 26 | .cm-s-blackboard .cm-header { color: #FF6400; } 27 | .cm-s-blackboard .cm-hr { color: #AEAEAE; } 28 | .cm-s-blackboard .cm-link { color: #8DA6CE; } 29 | .cm-s-blackboard .cm-error { background: #9D1E15; color: #F8F8F8; } 30 | 31 | .cm-s-blackboard .CodeMirror-activeline-background { background: #3C3636; } 32 | .cm-s-blackboard .CodeMirror-matchingbracket { outline:1px solid grey;color:white !important; } 33 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/cobalt.css: -------------------------------------------------------------------------------- 1 | .cm-s-cobalt.CodeMirror { background: #002240; color: white; } 2 | .cm-s-cobalt div.CodeMirror-selected { background: #b36539; } 3 | .cm-s-cobalt .CodeMirror-line::selection, .cm-s-cobalt .CodeMirror-line > span::selection, .cm-s-cobalt .CodeMirror-line > span > span::selection { background: rgba(179, 101, 57, .99); } 4 | .cm-s-cobalt .CodeMirror-line::-moz-selection, .cm-s-cobalt .CodeMirror-line > span::-moz-selection, .cm-s-cobalt .CodeMirror-line > span > span::-moz-selection { background: rgba(179, 101, 57, .99); } 5 | .cm-s-cobalt .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } 6 | .cm-s-cobalt .CodeMirror-guttermarker { color: #ffee80; } 7 | .cm-s-cobalt .CodeMirror-guttermarker-subtle { color: #d0d0d0; } 8 | .cm-s-cobalt .CodeMirror-linenumber { color: #d0d0d0; } 9 | .cm-s-cobalt .CodeMirror-cursor { border-left: 1px solid white; } 10 | 11 | .cm-s-cobalt span.cm-comment { color: #08f; } 12 | .cm-s-cobalt span.cm-atom { color: #845dc4; } 13 | .cm-s-cobalt span.cm-number, .cm-s-cobalt span.cm-attribute { color: #ff80e1; } 14 | .cm-s-cobalt span.cm-keyword { color: #ffee80; } 15 | .cm-s-cobalt span.cm-string { color: #3ad900; } 16 | .cm-s-cobalt span.cm-meta { color: #ff9d00; } 17 | .cm-s-cobalt span.cm-variable-2, .cm-s-cobalt span.cm-tag { color: #9effff; } 18 | .cm-s-cobalt span.cm-variable-3, .cm-s-cobalt span.cm-def, .cm-s-cobalt .cm-type { color: white; } 19 | .cm-s-cobalt span.cm-bracket { color: #d8d8d8; } 20 | .cm-s-cobalt span.cm-builtin, .cm-s-cobalt span.cm-special { color: #ff9e59; } 21 | .cm-s-cobalt span.cm-link { color: #845dc4; } 22 | .cm-s-cobalt span.cm-error { color: #9d1e15; } 23 | 24 | .cm-s-cobalt .CodeMirror-activeline-background { background: #002D57; } 25 | .cm-s-cobalt .CodeMirror-matchingbracket { outline:1px solid grey;color:white !important; } 26 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/colorforth.css: -------------------------------------------------------------------------------- 1 | .cm-s-colorforth.CodeMirror { background: #000000; color: #f8f8f8; } 2 | .cm-s-colorforth .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } 3 | .cm-s-colorforth .CodeMirror-guttermarker { color: #FFBD40; } 4 | .cm-s-colorforth .CodeMirror-guttermarker-subtle { color: #78846f; } 5 | .cm-s-colorforth .CodeMirror-linenumber { color: #bababa; } 6 | .cm-s-colorforth .CodeMirror-cursor { border-left: 1px solid white; } 7 | 8 | .cm-s-colorforth span.cm-comment { color: #ededed; } 9 | .cm-s-colorforth span.cm-def { color: #ff1c1c; font-weight:bold; } 10 | .cm-s-colorforth span.cm-keyword { color: #ffd900; } 11 | .cm-s-colorforth span.cm-builtin { color: #00d95a; } 12 | .cm-s-colorforth span.cm-variable { color: #73ff00; } 13 | .cm-s-colorforth span.cm-string { color: #007bff; } 14 | .cm-s-colorforth span.cm-number { color: #00c4ff; } 15 | .cm-s-colorforth span.cm-atom { color: #606060; } 16 | 17 | .cm-s-colorforth span.cm-variable-2 { color: #EEE; } 18 | .cm-s-colorforth span.cm-variable-3, .cm-s-colorforth span.cm-type { color: #DDD; } 19 | .cm-s-colorforth span.cm-property {} 20 | .cm-s-colorforth span.cm-operator {} 21 | 22 | .cm-s-colorforth span.cm-meta { color: yellow; } 23 | .cm-s-colorforth span.cm-qualifier { color: #FFF700; } 24 | .cm-s-colorforth span.cm-bracket { color: #cc7; } 25 | .cm-s-colorforth span.cm-tag { color: #FFBD40; } 26 | .cm-s-colorforth span.cm-attribute { color: #FFF700; } 27 | .cm-s-colorforth span.cm-error { color: #f00; } 28 | 29 | .cm-s-colorforth div.CodeMirror-selected { background: #333d53; } 30 | 31 | .cm-s-colorforth span.cm-compilation { background: rgba(255, 255, 255, 0.12); } 32 | 33 | .cm-s-colorforth .CodeMirror-activeline-background { background: #253540; } 34 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/eclipse.css: -------------------------------------------------------------------------------- 1 | .cm-s-eclipse span.cm-meta { color: #FF1717; } 2 | .cm-s-eclipse span.cm-keyword { line-height: 1em; font-weight: bold; color: #7F0055; } 3 | .cm-s-eclipse span.cm-atom { color: #219; } 4 | .cm-s-eclipse span.cm-number { color: #164; } 5 | .cm-s-eclipse span.cm-def { color: #00f; } 6 | .cm-s-eclipse span.cm-variable { color: black; } 7 | .cm-s-eclipse span.cm-variable-2 { color: #0000C0; } 8 | .cm-s-eclipse span.cm-variable-3, .cm-s-eclipse span.cm-type { color: #0000C0; } 9 | .cm-s-eclipse span.cm-property { color: black; } 10 | .cm-s-eclipse span.cm-operator { color: black; } 11 | .cm-s-eclipse span.cm-comment { color: #3F7F5F; } 12 | .cm-s-eclipse span.cm-string { color: #2A00FF; } 13 | .cm-s-eclipse span.cm-string-2 { color: #f50; } 14 | .cm-s-eclipse span.cm-qualifier { color: #555; } 15 | .cm-s-eclipse span.cm-builtin { color: #30a; } 16 | .cm-s-eclipse span.cm-bracket { color: #cc7; } 17 | .cm-s-eclipse span.cm-tag { color: #170; } 18 | .cm-s-eclipse span.cm-attribute { color: #00c; } 19 | .cm-s-eclipse span.cm-link { color: #219; } 20 | .cm-s-eclipse span.cm-error { color: #f00; } 21 | 22 | .cm-s-eclipse .CodeMirror-activeline-background { background: #e8f2ff; } 23 | .cm-s-eclipse .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } 24 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/elegant.css: -------------------------------------------------------------------------------- 1 | .cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom { color: #762; } 2 | .cm-s-elegant span.cm-comment { color: #262; font-style: italic; line-height: 1em; } 3 | .cm-s-elegant span.cm-meta { color: #555; font-style: italic; line-height: 1em; } 4 | .cm-s-elegant span.cm-variable { color: black; } 5 | .cm-s-elegant span.cm-variable-2 { color: #b11; } 6 | .cm-s-elegant span.cm-qualifier { color: #555; } 7 | .cm-s-elegant span.cm-keyword { color: #730; } 8 | .cm-s-elegant span.cm-builtin { color: #30a; } 9 | .cm-s-elegant span.cm-link { color: #762; } 10 | .cm-s-elegant span.cm-error { background-color: #fdd; } 11 | 12 | .cm-s-elegant .CodeMirror-activeline-background { background: #e8f2ff; } 13 | .cm-s-elegant .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } 14 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/gruvbox-dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: gruvbox-dark 4 | Author: kRkk (https://github.com/krkk) 5 | 6 | Original gruvbox color scheme by Pavel Pertsev (https://github.com/morhetz/gruvbox) 7 | 8 | */ 9 | 10 | .cm-s-gruvbox-dark.CodeMirror, .cm-s-gruvbox-dark .CodeMirror-gutters { background-color: #282828; color: #bdae93; } 11 | .cm-s-gruvbox-dark .CodeMirror-gutters {background: #282828; border-right: 0px;} 12 | .cm-s-gruvbox-dark .CodeMirror-linenumber {color: #7c6f64;} 13 | .cm-s-gruvbox-dark .CodeMirror-cursor { border-left: 1px solid #ebdbb2; } 14 | .cm-s-gruvbox-dark.cm-fat-cursor .CodeMirror-cursor { background-color: #8e8d8875 !important; } 15 | .cm-s-gruvbox-dark .cm-animate-fat-cursor { background-color: #8e8d8875 !important; } 16 | .cm-s-gruvbox-dark div.CodeMirror-selected { background: #928374; } 17 | .cm-s-gruvbox-dark span.cm-meta { color: #83a598; } 18 | 19 | .cm-s-gruvbox-dark span.cm-comment { color: #928374; } 20 | .cm-s-gruvbox-dark span.cm-number, span.cm-atom { color: #d3869b; } 21 | .cm-s-gruvbox-dark span.cm-keyword { color: #f84934; } 22 | 23 | .cm-s-gruvbox-dark span.cm-variable { color: #ebdbb2; } 24 | .cm-s-gruvbox-dark span.cm-variable-2 { color: #ebdbb2; } 25 | .cm-s-gruvbox-dark span.cm-variable-3, .cm-s-gruvbox-dark span.cm-type { color: #fabd2f; } 26 | .cm-s-gruvbox-dark span.cm-operator { color: #ebdbb2; } 27 | .cm-s-gruvbox-dark span.cm-callee { color: #ebdbb2; } 28 | .cm-s-gruvbox-dark span.cm-def { color: #ebdbb2; } 29 | .cm-s-gruvbox-dark span.cm-property { color: #ebdbb2; } 30 | .cm-s-gruvbox-dark span.cm-string { color: #b8bb26; } 31 | .cm-s-gruvbox-dark span.cm-string-2 { color: #8ec07c; } 32 | .cm-s-gruvbox-dark span.cm-qualifier { color: #8ec07c; } 33 | .cm-s-gruvbox-dark span.cm-attribute { color: #8ec07c; } 34 | 35 | .cm-s-gruvbox-dark .CodeMirror-activeline-background { background: #3c3836; } 36 | .cm-s-gruvbox-dark .CodeMirror-matchingbracket { background: #928374; color:#282828 !important; } 37 | 38 | .cm-s-gruvbox-dark span.cm-builtin { color: #fe8019; } 39 | .cm-s-gruvbox-dark span.cm-tag { color: #fe8019; } 40 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/hopscotch.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Hopscotch 4 | Author: Jan T. Sott 5 | 6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) 7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) 8 | 9 | */ 10 | 11 | .cm-s-hopscotch.CodeMirror {background: #322931; color: #d5d3d5;} 12 | .cm-s-hopscotch div.CodeMirror-selected {background: #433b42 !important;} 13 | .cm-s-hopscotch .CodeMirror-gutters {background: #322931; border-right: 0px;} 14 | .cm-s-hopscotch .CodeMirror-linenumber {color: #797379;} 15 | .cm-s-hopscotch .CodeMirror-cursor {border-left: 1px solid #989498 !important;} 16 | 17 | .cm-s-hopscotch span.cm-comment {color: #b33508;} 18 | .cm-s-hopscotch span.cm-atom {color: #c85e7c;} 19 | .cm-s-hopscotch span.cm-number {color: #c85e7c;} 20 | 21 | .cm-s-hopscotch span.cm-property, .cm-s-hopscotch span.cm-attribute {color: #8fc13e;} 22 | .cm-s-hopscotch span.cm-keyword {color: #dd464c;} 23 | .cm-s-hopscotch span.cm-string {color: #fdcc59;} 24 | 25 | .cm-s-hopscotch span.cm-variable {color: #8fc13e;} 26 | .cm-s-hopscotch span.cm-variable-2 {color: #1290bf;} 27 | .cm-s-hopscotch span.cm-def {color: #fd8b19;} 28 | .cm-s-hopscotch span.cm-error {background: #dd464c; color: #989498;} 29 | .cm-s-hopscotch span.cm-bracket {color: #d5d3d5;} 30 | .cm-s-hopscotch span.cm-tag {color: #dd464c;} 31 | .cm-s-hopscotch span.cm-link {color: #c85e7c;} 32 | 33 | .cm-s-hopscotch .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 34 | .cm-s-hopscotch .CodeMirror-activeline-background { background: #302020; } 35 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/idea.css: -------------------------------------------------------------------------------- 1 | /** 2 | Name: IDEA default theme 3 | From IntelliJ IDEA by JetBrains 4 | */ 5 | 6 | .cm-s-idea span.cm-meta { color: #808000; } 7 | .cm-s-idea span.cm-number { color: #0000FF; } 8 | .cm-s-idea span.cm-keyword { line-height: 1em; font-weight: bold; color: #000080; } 9 | .cm-s-idea span.cm-atom { font-weight: bold; color: #000080; } 10 | .cm-s-idea span.cm-def { color: #000000; } 11 | .cm-s-idea span.cm-variable { color: black; } 12 | .cm-s-idea span.cm-variable-2 { color: black; } 13 | .cm-s-idea span.cm-variable-3, .cm-s-idea span.cm-type { color: black; } 14 | .cm-s-idea span.cm-property { color: black; } 15 | .cm-s-idea span.cm-operator { color: black; } 16 | .cm-s-idea span.cm-comment { color: #808080; } 17 | .cm-s-idea span.cm-string { color: #008000; } 18 | .cm-s-idea span.cm-string-2 { color: #008000; } 19 | .cm-s-idea span.cm-qualifier { color: #555; } 20 | .cm-s-idea span.cm-error { color: #FF0000; } 21 | .cm-s-idea span.cm-attribute { color: #0000FF; } 22 | .cm-s-idea span.cm-tag { color: #000080; } 23 | .cm-s-idea span.cm-link { color: #0000FF; } 24 | .cm-s-idea .CodeMirror-activeline-background { background: #FFFAE3; } 25 | 26 | .cm-s-idea span.cm-builtin { color: #30a; } 27 | .cm-s-idea span.cm-bracket { color: #cc7; } 28 | .cm-s-idea { font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;} 29 | 30 | 31 | .cm-s-idea .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } 32 | 33 | .CodeMirror-hints.idea { 34 | font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; 35 | color: #616569; 36 | background-color: #ebf3fd !important; 37 | } 38 | 39 | .CodeMirror-hints.idea .CodeMirror-hint-active { 40 | background-color: #a2b8c9 !important; 41 | color: #5c6065 !important; 42 | } -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/isotope.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Isotope 4 | Author: David Desandro / Jan T. Sott 5 | 6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) 7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) 8 | 9 | */ 10 | 11 | .cm-s-isotope.CodeMirror {background: #000000; color: #e0e0e0;} 12 | .cm-s-isotope div.CodeMirror-selected {background: #404040 !important;} 13 | .cm-s-isotope .CodeMirror-gutters {background: #000000; border-right: 0px;} 14 | .cm-s-isotope .CodeMirror-linenumber {color: #808080;} 15 | .cm-s-isotope .CodeMirror-cursor {border-left: 1px solid #c0c0c0 !important;} 16 | 17 | .cm-s-isotope span.cm-comment {color: #3300ff;} 18 | .cm-s-isotope span.cm-atom {color: #cc00ff;} 19 | .cm-s-isotope span.cm-number {color: #cc00ff;} 20 | 21 | .cm-s-isotope span.cm-property, .cm-s-isotope span.cm-attribute {color: #33ff00;} 22 | .cm-s-isotope span.cm-keyword {color: #ff0000;} 23 | .cm-s-isotope span.cm-string {color: #ff0099;} 24 | 25 | .cm-s-isotope span.cm-variable {color: #33ff00;} 26 | .cm-s-isotope span.cm-variable-2 {color: #0066ff;} 27 | .cm-s-isotope span.cm-def {color: #ff9900;} 28 | .cm-s-isotope span.cm-error {background: #ff0000; color: #c0c0c0;} 29 | .cm-s-isotope span.cm-bracket {color: #e0e0e0;} 30 | .cm-s-isotope span.cm-tag {color: #ff0000;} 31 | .cm-s-isotope span.cm-link {color: #cc00ff;} 32 | 33 | .cm-s-isotope .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 34 | .cm-s-isotope .CodeMirror-activeline-background { background: #202020; } 35 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/juejin.css: -------------------------------------------------------------------------------- 1 | .cm-s-juejin.CodeMirror { 2 | background: #f8f9fa; 3 | } 4 | .cm-s-juejin .cm-header, 5 | .cm-s-juejin .cm-def { 6 | color: #1ba2f0; 7 | } 8 | .cm-s-juejin .cm-comment { 9 | color: #009e9d; 10 | } 11 | .cm-s-juejin .cm-quote, 12 | .cm-s-juejin .cm-link, 13 | .cm-s-juejin .cm-strong, 14 | .cm-s-juejin .cm-attribute { 15 | color: #fd7741; 16 | } 17 | .cm-s-juejin .cm-url, 18 | .cm-s-juejin .cm-keyword, 19 | .cm-s-juejin .cm-builtin { 20 | color: #bb51b8; 21 | } 22 | .cm-s-juejin .cm-hr { 23 | color: #909090; 24 | } 25 | .cm-s-juejin .cm-tag { 26 | color: #107000; 27 | } 28 | .cm-s-juejin .cm-variable-2 { 29 | color: #0050a0; 30 | } 31 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/lucario.css: -------------------------------------------------------------------------------- 1 | /* 2 | Name: lucario 3 | Author: Raphael Amorim 4 | 5 | Original Lucario color scheme (https://github.com/raphamorim/lucario) 6 | */ 7 | 8 | .cm-s-lucario.CodeMirror, .cm-s-lucario .CodeMirror-gutters { 9 | background-color: #2b3e50 !important; 10 | color: #f8f8f2 !important; 11 | border: none; 12 | } 13 | .cm-s-lucario .CodeMirror-gutters { color: #2b3e50; } 14 | .cm-s-lucario .CodeMirror-cursor { border-left: solid thin #E6C845; } 15 | .cm-s-lucario .CodeMirror-linenumber { color: #f8f8f2; } 16 | .cm-s-lucario .CodeMirror-selected { background: #243443; } 17 | .cm-s-lucario .CodeMirror-line::selection, .cm-s-lucario .CodeMirror-line > span::selection, .cm-s-lucario .CodeMirror-line > span > span::selection { background: #243443; } 18 | .cm-s-lucario .CodeMirror-line::-moz-selection, .cm-s-lucario .CodeMirror-line > span::-moz-selection, .cm-s-lucario .CodeMirror-line > span > span::-moz-selection { background: #243443; } 19 | .cm-s-lucario span.cm-comment { color: #5c98cd; } 20 | .cm-s-lucario span.cm-string, .cm-s-lucario span.cm-string-2 { color: #E6DB74; } 21 | .cm-s-lucario span.cm-number { color: #ca94ff; } 22 | .cm-s-lucario span.cm-variable { color: #f8f8f2; } 23 | .cm-s-lucario span.cm-variable-2 { color: #f8f8f2; } 24 | .cm-s-lucario span.cm-def { color: #72C05D; } 25 | .cm-s-lucario span.cm-operator { color: #66D9EF; } 26 | .cm-s-lucario span.cm-keyword { color: #ff6541; } 27 | .cm-s-lucario span.cm-atom { color: #bd93f9; } 28 | .cm-s-lucario span.cm-meta { color: #f8f8f2; } 29 | .cm-s-lucario span.cm-tag { color: #ff6541; } 30 | .cm-s-lucario span.cm-attribute { color: #66D9EF; } 31 | .cm-s-lucario span.cm-qualifier { color: #72C05D; } 32 | .cm-s-lucario span.cm-property { color: #f8f8f2; } 33 | .cm-s-lucario span.cm-builtin { color: #72C05D; } 34 | .cm-s-lucario span.cm-variable-3, .cm-s-lucario span.cm-type { color: #ffb86c; } 35 | 36 | .cm-s-lucario .CodeMirror-activeline-background { background: #243443; } 37 | .cm-s-lucario .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } 38 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/midnight.css: -------------------------------------------------------------------------------- 1 | /* Based on the theme at http://bonsaiden.github.com/JavaScript-Garden */ 2 | 3 | /**/ 4 | .cm-s-midnight .CodeMirror-activeline-background { background: #253540; } 5 | 6 | .cm-s-midnight.CodeMirror { 7 | background: #0F192A; 8 | color: #D1EDFF; 9 | } 10 | 11 | .cm-s-midnight div.CodeMirror-selected { background: #314D67; } 12 | .cm-s-midnight .CodeMirror-line::selection, .cm-s-midnight .CodeMirror-line > span::selection, .cm-s-midnight .CodeMirror-line > span > span::selection { background: rgba(49, 77, 103, .99); } 13 | .cm-s-midnight .CodeMirror-line::-moz-selection, .cm-s-midnight .CodeMirror-line > span::-moz-selection, .cm-s-midnight .CodeMirror-line > span > span::-moz-selection { background: rgba(49, 77, 103, .99); } 14 | .cm-s-midnight .CodeMirror-gutters { background: #0F192A; border-right: 1px solid; } 15 | .cm-s-midnight .CodeMirror-guttermarker { color: white; } 16 | .cm-s-midnight .CodeMirror-guttermarker-subtle { color: #d0d0d0; } 17 | .cm-s-midnight .CodeMirror-linenumber { color: #D0D0D0; } 18 | .cm-s-midnight .CodeMirror-cursor { border-left: 1px solid #F8F8F0; } 19 | 20 | .cm-s-midnight span.cm-comment { color: #428BDD; } 21 | .cm-s-midnight span.cm-atom { color: #AE81FF; } 22 | .cm-s-midnight span.cm-number { color: #D1EDFF; } 23 | 24 | .cm-s-midnight span.cm-property, .cm-s-midnight span.cm-attribute { color: #A6E22E; } 25 | .cm-s-midnight span.cm-keyword { color: #E83737; } 26 | .cm-s-midnight span.cm-string { color: #1DC116; } 27 | 28 | .cm-s-midnight span.cm-variable { color: #FFAA3E; } 29 | .cm-s-midnight span.cm-variable-2 { color: #FFAA3E; } 30 | .cm-s-midnight span.cm-def { color: #4DD; } 31 | .cm-s-midnight span.cm-bracket { color: #D1EDFF; } 32 | .cm-s-midnight span.cm-tag { color: #449; } 33 | .cm-s-midnight span.cm-link { color: #AE81FF; } 34 | .cm-s-midnight span.cm-error { background: #F92672; color: #F8F8F0; } 35 | 36 | .cm-s-midnight .CodeMirror-matchingbracket { 37 | text-decoration: underline; 38 | color: white !important; 39 | } 40 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/neat.css: -------------------------------------------------------------------------------- 1 | .cm-s-neat span.cm-comment { color: #a86; } 2 | .cm-s-neat span.cm-keyword { line-height: 1em; font-weight: bold; color: blue; } 3 | .cm-s-neat span.cm-string { color: #a22; } 4 | .cm-s-neat span.cm-builtin { line-height: 1em; font-weight: bold; color: #077; } 5 | .cm-s-neat span.cm-special { line-height: 1em; font-weight: bold; color: #0aa; } 6 | .cm-s-neat span.cm-variable { color: black; } 7 | .cm-s-neat span.cm-number, .cm-s-neat span.cm-atom { color: #3a3; } 8 | .cm-s-neat span.cm-meta { color: #555; } 9 | .cm-s-neat span.cm-link { color: #3a3; } 10 | 11 | .cm-s-neat .CodeMirror-activeline-background { background: #e8f2ff; } 12 | .cm-s-neat .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } 13 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/neo.css: -------------------------------------------------------------------------------- 1 | /* neo theme for codemirror */ 2 | 3 | /* Color scheme */ 4 | 5 | .cm-s-neo.CodeMirror { 6 | background-color:#ffffff; 7 | color:#2e383c; 8 | line-height:1.4375; 9 | } 10 | .cm-s-neo .cm-comment { color:#75787b; } 11 | .cm-s-neo .cm-keyword, .cm-s-neo .cm-property { color:#1d75b3; } 12 | .cm-s-neo .cm-atom,.cm-s-neo .cm-number { color:#75438a; } 13 | .cm-s-neo .cm-node,.cm-s-neo .cm-tag { color:#9c3328; } 14 | .cm-s-neo .cm-string { color:#b35e14; } 15 | .cm-s-neo .cm-variable,.cm-s-neo .cm-qualifier { color:#047d65; } 16 | 17 | 18 | /* Editor styling */ 19 | 20 | .cm-s-neo pre { 21 | padding:0; 22 | } 23 | 24 | .cm-s-neo .CodeMirror-gutters { 25 | border:none; 26 | border-right:10px solid transparent; 27 | background-color:transparent; 28 | } 29 | 30 | .cm-s-neo .CodeMirror-linenumber { 31 | padding:0; 32 | color:#e0e2e5; 33 | } 34 | 35 | .cm-s-neo .CodeMirror-guttermarker { color: #1d75b3; } 36 | .cm-s-neo .CodeMirror-guttermarker-subtle { color: #e0e2e5; } 37 | 38 | .cm-s-neo .CodeMirror-cursor { 39 | width: auto; 40 | border: 0; 41 | background: rgba(155,157,162,0.37); 42 | z-index: 1; 43 | } 44 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/night.css: -------------------------------------------------------------------------------- 1 | /* Loosely based on the Midnight Textmate theme */ 2 | 3 | .cm-s-night.CodeMirror { background: #0a001f; color: #f8f8f8; } 4 | .cm-s-night div.CodeMirror-selected { background: #447; } 5 | .cm-s-night .CodeMirror-line::selection, .cm-s-night .CodeMirror-line > span::selection, .cm-s-night .CodeMirror-line > span > span::selection { background: rgba(68, 68, 119, .99); } 6 | .cm-s-night .CodeMirror-line::-moz-selection, .cm-s-night .CodeMirror-line > span::-moz-selection, .cm-s-night .CodeMirror-line > span > span::-moz-selection { background: rgba(68, 68, 119, .99); } 7 | .cm-s-night .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } 8 | .cm-s-night .CodeMirror-guttermarker { color: white; } 9 | .cm-s-night .CodeMirror-guttermarker-subtle { color: #bbb; } 10 | .cm-s-night .CodeMirror-linenumber { color: #f8f8f8; } 11 | .cm-s-night .CodeMirror-cursor { border-left: 1px solid white; } 12 | 13 | .cm-s-night span.cm-comment { color: #8900d1; } 14 | .cm-s-night span.cm-atom { color: #845dc4; } 15 | .cm-s-night span.cm-number, .cm-s-night span.cm-attribute { color: #ffd500; } 16 | .cm-s-night span.cm-keyword { color: #599eff; } 17 | .cm-s-night span.cm-string { color: #37f14a; } 18 | .cm-s-night span.cm-meta { color: #7678e2; } 19 | .cm-s-night span.cm-variable-2, .cm-s-night span.cm-tag { color: #99b2ff; } 20 | .cm-s-night span.cm-variable-3, .cm-s-night span.cm-def, .cm-s-night span.cm-type { color: white; } 21 | .cm-s-night span.cm-bracket { color: #8da6ce; } 22 | .cm-s-night span.cm-builtin, .cm-s-night span.cm-special { color: #ff9e59; } 23 | .cm-s-night span.cm-link { color: #845dc4; } 24 | .cm-s-night span.cm-error { color: #9d1e15; } 25 | 26 | .cm-s-night .CodeMirror-activeline-background { background: #1C005A; } 27 | .cm-s-night .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } 28 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/railscasts.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Railscasts 4 | Author: Ryan Bates (http://railscasts.com) 5 | 6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) 7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) 8 | 9 | */ 10 | 11 | .cm-s-railscasts.CodeMirror {background: #2b2b2b; color: #f4f1ed;} 12 | .cm-s-railscasts div.CodeMirror-selected {background: #272935 !important;} 13 | .cm-s-railscasts .CodeMirror-gutters {background: #2b2b2b; border-right: 0px;} 14 | .cm-s-railscasts .CodeMirror-linenumber {color: #5a647e;} 15 | .cm-s-railscasts .CodeMirror-cursor {border-left: 1px solid #d4cfc9 !important;} 16 | 17 | .cm-s-railscasts span.cm-comment {color: #bc9458;} 18 | .cm-s-railscasts span.cm-atom {color: #b6b3eb;} 19 | .cm-s-railscasts span.cm-number {color: #b6b3eb;} 20 | 21 | .cm-s-railscasts span.cm-property, .cm-s-railscasts span.cm-attribute {color: #a5c261;} 22 | .cm-s-railscasts span.cm-keyword {color: #da4939;} 23 | .cm-s-railscasts span.cm-string {color: #ffc66d;} 24 | 25 | .cm-s-railscasts span.cm-variable {color: #a5c261;} 26 | .cm-s-railscasts span.cm-variable-2 {color: #6d9cbe;} 27 | .cm-s-railscasts span.cm-def {color: #cc7833;} 28 | .cm-s-railscasts span.cm-error {background: #da4939; color: #d4cfc9;} 29 | .cm-s-railscasts span.cm-bracket {color: #f4f1ed;} 30 | .cm-s-railscasts span.cm-tag {color: #da4939;} 31 | .cm-s-railscasts span.cm-link {color: #b6b3eb;} 32 | 33 | .cm-s-railscasts .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 34 | .cm-s-railscasts .CodeMirror-activeline-background { background: #303040; } 35 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/rubyblue.css: -------------------------------------------------------------------------------- 1 | .cm-s-rubyblue.CodeMirror { background: #112435; color: white; } 2 | .cm-s-rubyblue div.CodeMirror-selected { background: #38566F; } 3 | .cm-s-rubyblue .CodeMirror-line::selection, .cm-s-rubyblue .CodeMirror-line > span::selection, .cm-s-rubyblue .CodeMirror-line > span > span::selection { background: rgba(56, 86, 111, 0.99); } 4 | .cm-s-rubyblue .CodeMirror-line::-moz-selection, .cm-s-rubyblue .CodeMirror-line > span::-moz-selection, .cm-s-rubyblue .CodeMirror-line > span > span::-moz-selection { background: rgba(56, 86, 111, 0.99); } 5 | .cm-s-rubyblue .CodeMirror-gutters { background: #1F4661; border-right: 7px solid #3E7087; } 6 | .cm-s-rubyblue .CodeMirror-guttermarker { color: white; } 7 | .cm-s-rubyblue .CodeMirror-guttermarker-subtle { color: #3E7087; } 8 | .cm-s-rubyblue .CodeMirror-linenumber { color: white; } 9 | .cm-s-rubyblue .CodeMirror-cursor { border-left: 1px solid white; } 10 | 11 | .cm-s-rubyblue span.cm-comment { color: #999; font-style:italic; line-height: 1em; } 12 | .cm-s-rubyblue span.cm-atom { color: #F4C20B; } 13 | .cm-s-rubyblue span.cm-number, .cm-s-rubyblue span.cm-attribute { color: #82C6E0; } 14 | .cm-s-rubyblue span.cm-keyword { color: #F0F; } 15 | .cm-s-rubyblue span.cm-string { color: #F08047; } 16 | .cm-s-rubyblue span.cm-meta { color: #F0F; } 17 | .cm-s-rubyblue span.cm-variable-2, .cm-s-rubyblue span.cm-tag { color: #7BD827; } 18 | .cm-s-rubyblue span.cm-variable-3, .cm-s-rubyblue span.cm-def, .cm-s-rubyblue span.cm-type { color: white; } 19 | .cm-s-rubyblue span.cm-bracket { color: #F0F; } 20 | .cm-s-rubyblue span.cm-link { color: #F4C20B; } 21 | .cm-s-rubyblue span.CodeMirror-matchingbracket { color:#F0F !important; } 22 | .cm-s-rubyblue span.cm-builtin, .cm-s-rubyblue span.cm-special { color: #FF9D00; } 23 | .cm-s-rubyblue span.cm-error { color: #AF2018; } 24 | 25 | .cm-s-rubyblue .CodeMirror-activeline-background { background: #173047; } 26 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/ssms.css: -------------------------------------------------------------------------------- 1 | .cm-s-ssms span.cm-keyword { color: blue; } 2 | .cm-s-ssms span.cm-comment { color: darkgreen; } 3 | .cm-s-ssms span.cm-string { color: red; } 4 | .cm-s-ssms span.cm-def { color: black; } 5 | .cm-s-ssms span.cm-variable { color: black; } 6 | .cm-s-ssms span.cm-variable-2 { color: black; } 7 | .cm-s-ssms span.cm-atom { color: darkgray; } 8 | .cm-s-ssms .CodeMirror-linenumber { color: teal; } 9 | .cm-s-ssms .CodeMirror-activeline-background { background: #ffffff; } 10 | .cm-s-ssms span.cm-string-2 { color: #FF00FF; } 11 | .cm-s-ssms span.cm-operator, 12 | .cm-s-ssms span.cm-bracket, 13 | .cm-s-ssms span.cm-punctuation { color: darkgray; } 14 | .cm-s-ssms .CodeMirror-gutters { border-right: 3px solid #ffee62; background-color: #ffffff; } 15 | .cm-s-ssms div.CodeMirror-selected { background: #ADD6FF; } 16 | 17 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/the-matrix.css: -------------------------------------------------------------------------------- 1 | .cm-s-the-matrix.CodeMirror { background: #000000; color: #00FF00; } 2 | .cm-s-the-matrix div.CodeMirror-selected { background: #2D2D2D; } 3 | .cm-s-the-matrix .CodeMirror-line::selection, .cm-s-the-matrix .CodeMirror-line > span::selection, .cm-s-the-matrix .CodeMirror-line > span > span::selection { background: rgba(45, 45, 45, 0.99); } 4 | .cm-s-the-matrix .CodeMirror-line::-moz-selection, .cm-s-the-matrix .CodeMirror-line > span::-moz-selection, .cm-s-the-matrix .CodeMirror-line > span > span::-moz-selection { background: rgba(45, 45, 45, 0.99); } 5 | .cm-s-the-matrix .CodeMirror-gutters { background: #060; border-right: 2px solid #00FF00; } 6 | .cm-s-the-matrix .CodeMirror-guttermarker { color: #0f0; } 7 | .cm-s-the-matrix .CodeMirror-guttermarker-subtle { color: white; } 8 | .cm-s-the-matrix .CodeMirror-linenumber { color: #FFFFFF; } 9 | .cm-s-the-matrix .CodeMirror-cursor { border-left: 1px solid #00FF00; } 10 | 11 | .cm-s-the-matrix span.cm-keyword { color: #008803; font-weight: bold; } 12 | .cm-s-the-matrix span.cm-atom { color: #3FF; } 13 | .cm-s-the-matrix span.cm-number { color: #FFB94F; } 14 | .cm-s-the-matrix span.cm-def { color: #99C; } 15 | .cm-s-the-matrix span.cm-variable { color: #F6C; } 16 | .cm-s-the-matrix span.cm-variable-2 { color: #C6F; } 17 | .cm-s-the-matrix span.cm-variable-3, .cm-s-the-matrix span.cm-type { color: #96F; } 18 | .cm-s-the-matrix span.cm-property { color: #62FFA0; } 19 | .cm-s-the-matrix span.cm-operator { color: #999; } 20 | .cm-s-the-matrix span.cm-comment { color: #CCCCCC; } 21 | .cm-s-the-matrix span.cm-string { color: #39C; } 22 | .cm-s-the-matrix span.cm-meta { color: #C9F; } 23 | .cm-s-the-matrix span.cm-qualifier { color: #FFF700; } 24 | .cm-s-the-matrix span.cm-builtin { color: #30a; } 25 | .cm-s-the-matrix span.cm-bracket { color: #cc7; } 26 | .cm-s-the-matrix span.cm-tag { color: #FFBD40; } 27 | .cm-s-the-matrix span.cm-attribute { color: #FFF700; } 28 | .cm-s-the-matrix span.cm-error { color: #FF0000; } 29 | 30 | .cm-s-the-matrix .CodeMirror-activeline-background { background: #040; } 31 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/tomorrow-night-bright.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Tomorrow Night - Bright 4 | Author: Chris Kempson 5 | 6 | Port done by Gerard Braad 7 | 8 | */ 9 | 10 | .cm-s-tomorrow-night-bright.CodeMirror { background: #000000; color: #eaeaea; } 11 | .cm-s-tomorrow-night-bright div.CodeMirror-selected { background: #424242; } 12 | .cm-s-tomorrow-night-bright .CodeMirror-gutters { background: #000000; border-right: 0px; } 13 | .cm-s-tomorrow-night-bright .CodeMirror-guttermarker { color: #e78c45; } 14 | .cm-s-tomorrow-night-bright .CodeMirror-guttermarker-subtle { color: #777; } 15 | .cm-s-tomorrow-night-bright .CodeMirror-linenumber { color: #424242; } 16 | .cm-s-tomorrow-night-bright .CodeMirror-cursor { border-left: 1px solid #6A6A6A; } 17 | 18 | .cm-s-tomorrow-night-bright span.cm-comment { color: #d27b53; } 19 | .cm-s-tomorrow-night-bright span.cm-atom { color: #a16a94; } 20 | .cm-s-tomorrow-night-bright span.cm-number { color: #a16a94; } 21 | 22 | .cm-s-tomorrow-night-bright span.cm-property, .cm-s-tomorrow-night-bright span.cm-attribute { color: #99cc99; } 23 | .cm-s-tomorrow-night-bright span.cm-keyword { color: #d54e53; } 24 | .cm-s-tomorrow-night-bright span.cm-string { color: #e7c547; } 25 | 26 | .cm-s-tomorrow-night-bright span.cm-variable { color: #b9ca4a; } 27 | .cm-s-tomorrow-night-bright span.cm-variable-2 { color: #7aa6da; } 28 | .cm-s-tomorrow-night-bright span.cm-def { color: #e78c45; } 29 | .cm-s-tomorrow-night-bright span.cm-bracket { color: #eaeaea; } 30 | .cm-s-tomorrow-night-bright span.cm-tag { color: #d54e53; } 31 | .cm-s-tomorrow-night-bright span.cm-link { color: #a16a94; } 32 | .cm-s-tomorrow-night-bright span.cm-error { background: #d54e53; color: #6A6A6A; } 33 | 34 | .cm-s-tomorrow-night-bright .CodeMirror-activeline-background { background: #2a2a2a; } 35 | .cm-s-tomorrow-night-bright .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } 36 | -------------------------------------------------------------------------------- /web/src/lib/codemirror/theme/yeti.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: yeti 4 | Author: Michael Kaminsky (http://github.com/mkaminsky11) 5 | 6 | Original yeti color scheme by Jesse Weed (https://github.com/jesseweed/yeti-syntax) 7 | 8 | */ 9 | 10 | 11 | .cm-s-yeti.CodeMirror { 12 | background-color: #ECEAE8 !important; 13 | color: #d1c9c0 !important; 14 | border: none; 15 | } 16 | 17 | .cm-s-yeti .CodeMirror-gutters { 18 | color: #adaba6; 19 | background-color: #E5E1DB; 20 | border: none; 21 | } 22 | .cm-s-yeti .CodeMirror-cursor { border-left: solid thin #d1c9c0; } 23 | .cm-s-yeti .CodeMirror-linenumber { color: #adaba6; } 24 | .cm-s-yeti.CodeMirror-focused div.CodeMirror-selected { background: #DCD8D2; } 25 | .cm-s-yeti .CodeMirror-line::selection, .cm-s-yeti .CodeMirror-line > span::selection, .cm-s-yeti .CodeMirror-line > span > span::selection { background: #DCD8D2; } 26 | .cm-s-yeti .CodeMirror-line::-moz-selection, .cm-s-yeti .CodeMirror-line > span::-moz-selection, .cm-s-yeti .CodeMirror-line > span > span::-moz-selection { background: #DCD8D2; } 27 | .cm-s-yeti span.cm-comment { color: #d4c8be; } 28 | .cm-s-yeti span.cm-string, .cm-s-yeti span.cm-string-2 { color: #96c0d8; } 29 | .cm-s-yeti span.cm-number { color: #a074c4; } 30 | .cm-s-yeti span.cm-variable { color: #55b5db; } 31 | .cm-s-yeti span.cm-variable-2 { color: #a074c4; } 32 | .cm-s-yeti span.cm-def { color: #55b5db; } 33 | .cm-s-yeti span.cm-operator { color: #9fb96e; } 34 | .cm-s-yeti span.cm-keyword { color: #9fb96e; } 35 | .cm-s-yeti span.cm-atom { color: #a074c4; } 36 | .cm-s-yeti span.cm-meta { color: #96c0d8; } 37 | .cm-s-yeti span.cm-tag { color: #96c0d8; } 38 | .cm-s-yeti span.cm-attribute { color: #9fb96e; } 39 | .cm-s-yeti span.cm-qualifier { color: #96c0d8; } 40 | .cm-s-yeti span.cm-property { color: #a074c4; } 41 | .cm-s-yeti span.cm-builtin { color: #a074c4; } 42 | .cm-s-yeti span.cm-variable-3, .cm-s-yeti span.cm-type { color: #96c0d8; } 43 | .cm-s-yeti .CodeMirror-activeline-background { background: #E7E4E0; } 44 | .cm-s-yeti .CodeMirror-matchingbracket { text-decoration: underline; } 45 | -------------------------------------------------------------------------------- /web/src/lib/libs.txt: -------------------------------------------------------------------------------- 1 | jquery: 3.3.1 2 | bootstrap: 4.6.2 3 | codemirror: 5.65.10 4 | lz-string: 1.4.4 5 | --------------------------------------------------------------------------------