codemirror-widgets
codemirror-widgets copied to clipboard
Utility to write powerful and interactive widgets for CodeMirror
codemirror-widgets
Utility to easily write interactive widgets for CodeMirror.
Installation
$ npm install codemirror-widgets
Usage
Example, replace LaTeX math ($$ ... $$
) by a preview using KaTeX
var widgets = require('codemirror-widgets');
var katex = require('katex');
// Create a type of widget
var WidgetMath = widgets.createType({
mixins: [
widgets.mixins.re(/\$\$([^$]+)\$\$/g, function(match) {
return {
props: {
text: match[1]
}
};
}),
widgets.mixins.editDelimit('$$', '$$')
],
createElement: function(widget) {
// Create the spam to replace the formula
var span = document.createElement('span');
// Render the formula using katex
katex.render(widget.props.text, span)
return span;
}
});
// Create a widgets manager connected to an editor
var manager = widgets.createManager(editor);
// Connect a type of widget to the manager
manager.enable(WidgetLink);
Mixins
Some prebuilt mixins make it event easier to create awesome widgets:
re
Find occurrence using a Regex:
var widgetMath = widgets.createType({
mixins: [
widgets.mixins.re(/\$\$([^$]+)\$\$/g, function(match) {
return {
props: {
text: match[1]
}
};
})
],
...
});
menu
Bind a menu with multiple actions to your widgets. The menu will show up on click (like on Gmail).
var widgetLink = widgets.createType({
mixins: [
widgets.mixins.menu({
entries: [
{
label: 'Open',
click: function(widget) {
window.open(widget.props.href, '_blank')
}
}
]
})
],
...
});
editParagraph
Helper to update a paragraph when user is typing
var widgetLink = widgets.createType({
mixins: [
widgets.mixins.editParagraph()
],
...
});