This package implements a CodeMirror 6 editor that is primarily intended for editing PG problem files for the WeBWorK Online Homework Delivery System. However, it also supports editing Perl, HTML, XML, Mojolicious HTML templates, and Mojolicious raw text templates since those are needed by webwork2.
The dist/pg-codemirror-editor.js
can be used via a script tag and sets the global PGCodeMirrorEditor
object. The
PGCodeMirrorEditor.View
class is the only key in the object. It can be used as follows
const pgEditor = new PGCodeMirrorEditor.View(codeMirrorElt, { source: sourceCode });
The following methods and attributes for the PGCodeMirrorEditor.View
class are available. Note that although the theme
and keymap can be set via initialization options or provided methods, usually you do not want to do this. The theme and
keymap can be changed by the user via the user interface provided in the editor, and the user's choices are saved in
local storage in the browser.
The syntax for usage of the PGCodeMirrorEditor.View
is
PGCodeMirrorEditor.View(
element: HTMLElement,
options?: {
language?: string;
source?: string;
theme?: string;
keyMap?: string;
});
The options are described below.
language
: One of 'pg', 'perl', 'html', 'xml', 'mt-html', or 'mt-text'. (Defaults to 'pg')source
: A string containing the source code to edit. (Defaults to the empty string)theme
: A string naming one of the following themes. (Defaults to 'Default')- 'Default': A modified version of the CodeMirror 6 default theme defined in
src/light-theme.ts
. - 'Amy': From the thememirror package.
- 'Ayu Light': From the thememirror package.
- 'Barf': From the thememirror package.
- 'Basic Dark': From the cm6-theme-basic-dark package.
- 'Basic Light': From the cm6-theme-basic-light package.
- 'Bespin': From the thememirror package.
- 'Birds of Paradise': From the thememirror package.
- 'Boys and Girls': From the thememirror package.
- 'Clouds': From the thememirror package.
- 'Cobalt': From the thememirror package.
- 'Cool Glow': From the thememirror package.
- 'Dracula': From the thememirror package.
- 'Espresso': From the thememirror package.
- 'Gruvbox Dark': From the cm6-theme-gruvbox-dark package.
- 'Gruvbox Light': From the cm6-theme-gruvbox-light package.
- 'Material Dark': From the cm6-theme-material-dark package.
- 'Noctis Lilac': From the thememirror package.
- 'Nord': From the cm6-theme-nord package.
- 'One Dark': From the @codemirror/theme-one-dark package.
- 'Rose Pine Dawn': From the thememirror package.
- 'Smoothy': From the thememirror package.
- 'Solarized Dark': From the cm6-theme-solarized-dark package.
- 'Solarized Light': From the cm6-theme-solarized-light package.
- 'Solarized Light 2': From the thememirror package.
- 'Tomorrow': From the thememirror package.
- 'Default': A modified version of the CodeMirror 6 default theme defined in
keymap
: One of 'Default', 'Emacs', or 'Vim'. (Defaults to 'Default')
Get the source code to be edited with the source
getter, and set the current source with the source
setter. Note
that setting the source will only update the code shown with the new contents, and the editor state will be maintained
(including undo and redo history). If the intent is to reset the state with a new document use the newSource
method
instead.
Set the source code to be edited in the editor. This resets the editor state, and loads the new code.
Set the language for the editor after initialization. The languageName
must be one of the languages listed for the
constructor language
option. Note that this method is async
.
Set the theme for the editor after initialization. The themeName
must be one of the themes listed for the constructor
theme
option. Note that this method is async
.
Set the keymap for the editor after initialization. The keyMapName
must be one of the keymaps listed for the
constructor keymap
option. Note that this method is async
.
Schedule a layout measurement for the editor. Provide a string key
that identifies the call. When multiple requests
with the same key are scheduled, only the last one will actually be run.
Executing npm run serve
will make an html test page available at http://localhost:8080
.