UNPKG

@tutor/markdown-editor

Version:
93 lines (85 loc) 2.59 kB
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; } };