@tutor/markdown-editor
Version:
Markdown Editor based on Ace for Tutor
93 lines (85 loc) • 2.59 kB
JavaScript
var Range, _;
Range = ace.require('ace/range');
ace.require('ace/mode/markdown');
ace.require('ace/theme/chrome');
ace.require('ace/ext/language_tools');
_ = require('lodash');
module.exports = {
Range: Range,
addResult: function(ed, results) {
var annos, i, j, len, len1, m_id, result, results1, rng;
annos = ed.getSession().getAnnotations();
for (i = 0, len = results.length; i < len; i++) {
result = results[i];
annos.push({
row: result.lineNumber,
column: result.column,
text: result.description,
type: result.type
});
}
ed.getSession().setAnnotations(annos);
results1 = [];
for (j = 0, len1 = results.length; j < len1; j++) {
result = results[j];
rng = new Range.Range(result.lineNumber, result.column - 1, result.lineNumber, result.column + result.length - 1);
m_id = ed.getSession().addMarker(rng, result.type, "background");
results1.push(ed.__ace_markers__.push(m_id));
}
return results1;
},
clearResults: function(ed) {
var markers;
if (ed == null) {
return;
}
ed.getSession().clearAnnotations();
markers = ed.__ace_markers__ || [];
_.each(markers, function(mid) {
return ed.getSession().removeMarker(mid);
});
return ed.__ace_markers__ = [];
},
create: function(element_id, value, options) {
var editor;
value = value || "";
options = options || {};
editor = ace.edit(element_id);
editor.$blockScrolling = Infinity;
editor.setTheme('ace/theme/chrome');
editor.getSession().setMode('ace/mode/markdown');
/* this is tutor app logic .. move it there
if ko.isObservable(options.readOnly)
options.readOnly.subscribe (v) => editor.setReadOnly(v)
editor.setReadOnly(options.readOnly())
*/
if (options.readOnly) {
editor.setReadOnly(true);
}
if (options.maxLines) {
editor.setOptions({
maxLines: options.maxLines
});
} else {
editor.setOptions({
maxLines: "Infinity"
});
}
editor.setValue(value, -1);
editor.gotoLine(0);
editor.setOptions({
fontSize: "15pt",
enableBasicAutocompletion: true,
enableLiveAutocompletion: true
});
editor.addResult = module.exports.addResult;
editor.clearResults = module.exports.clearResults;
editor.getSession().on("change", function(delta) {
var ref;
return (ref = options.plugins) != null ? ref.forEach(function(p) {
return p(editor, delta);
}) : void 0;
});
return editor;
}
};