Diffdown is a real-time collaborative Markdown editor/previewer built on the AT Protocol diffdown.com
at main 102 lines 4.7 kB view raw
1'use strict'; 2 3var view = require('@codemirror/view'); 4var state = require('@codemirror/state'); 5var language = require('@codemirror/language'); 6var commands = require('@codemirror/commands'); 7var search = require('@codemirror/search'); 8var autocomplete = require('@codemirror/autocomplete'); 9var lint = require('@codemirror/lint'); 10 11// (The superfluous function calls around the list of extensions work 12// around current limitations in tree-shaking software.) 13/** 14This is an extension value that just pulls together a number of 15extensions that you might want in a basic editor. It is meant as a 16convenient helper to quickly set up CodeMirror without installing 17and importing a lot of separate packages. 18 19Specifically, it includes... 20 21 - [the default command bindings](https://codemirror.net/6/docs/ref/#commands.defaultKeymap) 22 - [line numbers](https://codemirror.net/6/docs/ref/#view.lineNumbers) 23 - [special character highlighting](https://codemirror.net/6/docs/ref/#view.highlightSpecialChars) 24 - [the undo history](https://codemirror.net/6/docs/ref/#commands.history) 25 - [a fold gutter](https://codemirror.net/6/docs/ref/#language.foldGutter) 26 - [custom selection drawing](https://codemirror.net/6/docs/ref/#view.drawSelection) 27 - [drop cursor](https://codemirror.net/6/docs/ref/#view.dropCursor) 28 - [multiple selections](https://codemirror.net/6/docs/ref/#state.EditorState^allowMultipleSelections) 29 - [reindentation on input](https://codemirror.net/6/docs/ref/#language.indentOnInput) 30 - [the default highlight style](https://codemirror.net/6/docs/ref/#language.defaultHighlightStyle) (as fallback) 31 - [bracket matching](https://codemirror.net/6/docs/ref/#language.bracketMatching) 32 - [bracket closing](https://codemirror.net/6/docs/ref/#autocomplete.closeBrackets) 33 - [autocompletion](https://codemirror.net/6/docs/ref/#autocomplete.autocompletion) 34 - [rectangular selection](https://codemirror.net/6/docs/ref/#view.rectangularSelection) and [crosshair cursor](https://codemirror.net/6/docs/ref/#view.crosshairCursor) 35 - [active line highlighting](https://codemirror.net/6/docs/ref/#view.highlightActiveLine) 36 - [active line gutter highlighting](https://codemirror.net/6/docs/ref/#view.highlightActiveLineGutter) 37 - [selection match highlighting](https://codemirror.net/6/docs/ref/#search.highlightSelectionMatches) 38 - [search](https://codemirror.net/6/docs/ref/#search.searchKeymap) 39 - [linting](https://codemirror.net/6/docs/ref/#lint.lintKeymap) 40 41(You'll probably want to add some language package to your setup 42too.) 43 44This extension does not allow customization. The idea is that, 45once you decide you want to configure your editor more precisely, 46you take this package's source (which is just a bunch of imports 47and an array literal), copy it into your own code, and adjust it 48as desired. 49*/ 50const basicSetup = (() => [ 51 view.lineNumbers(), 52 view.highlightActiveLineGutter(), 53 view.highlightSpecialChars(), 54 commands.history(), 55 language.foldGutter(), 56 view.drawSelection(), 57 view.dropCursor(), 58 state.EditorState.allowMultipleSelections.of(true), 59 language.indentOnInput(), 60 language.syntaxHighlighting(language.defaultHighlightStyle, { fallback: true }), 61 language.bracketMatching(), 62 autocomplete.closeBrackets(), 63 autocomplete.autocompletion(), 64 view.rectangularSelection(), 65 view.crosshairCursor(), 66 view.highlightActiveLine(), 67 search.highlightSelectionMatches(), 68 view.keymap.of([ 69 ...autocomplete.closeBracketsKeymap, 70 ...commands.defaultKeymap, 71 ...search.searchKeymap, 72 ...commands.historyKeymap, 73 ...language.foldKeymap, 74 ...autocomplete.completionKeymap, 75 ...lint.lintKeymap 76 ]) 77])(); 78/** 79A minimal set of extensions to create a functional editor. Only 80includes [the default keymap](https://codemirror.net/6/docs/ref/#commands.defaultKeymap), [undo 81history](https://codemirror.net/6/docs/ref/#commands.history), [special character 82highlighting](https://codemirror.net/6/docs/ref/#view.highlightSpecialChars), [custom selection 83drawing](https://codemirror.net/6/docs/ref/#view.drawSelection), and [default highlight 84style](https://codemirror.net/6/docs/ref/#language.defaultHighlightStyle). 85*/ 86const minimalSetup = (() => [ 87 view.highlightSpecialChars(), 88 commands.history(), 89 view.drawSelection(), 90 language.syntaxHighlighting(language.defaultHighlightStyle, { fallback: true }), 91 view.keymap.of([ 92 ...commands.defaultKeymap, 93 ...commands.historyKeymap, 94 ]) 95])(); 96 97Object.defineProperty(exports, 'EditorView', { 98 enumerable: true, 99 get: function () { return view.EditorView; } 100}); 101exports.basicSetup = basicSetup; 102exports.minimalSetup = minimalSetup;