39 lines
1.0 KiB
JavaScript
39 lines
1.0 KiB
JavaScript
/*global CodeMirror*/
|
|
|
|
// CodeMirror doesn't seem to have anyway to hook into whether a mode
|
|
// has already loaded, or when a mode has finished loading
|
|
// follow more or less what CodeMirror does but doesn't expose
|
|
// see codemirror/addon/mode/loadmode.js
|
|
|
|
export const createLoader = function (
|
|
$$ = document.getElementsByTagName.bind(document),
|
|
CM = CodeMirror
|
|
) {
|
|
CM.registerHelper('lint', 'ruby', function (text) {
|
|
return [];
|
|
});
|
|
return function (editor, mode, cb) {
|
|
let scripts = [...$$('script')];
|
|
const loaded = scripts.find(function (item) {
|
|
return item.src.indexOf(`/codemirror/mode/${mode}/${mode}.js`) !== -1;
|
|
});
|
|
CM.autoLoadMode(editor, mode);
|
|
if (loaded) {
|
|
cb();
|
|
} else {
|
|
scripts = [...$$('script')];
|
|
CM.on(scripts[0], 'load', function () {
|
|
cb();
|
|
});
|
|
}
|
|
};
|
|
};
|
|
const load = createLoader();
|
|
export default function (editor, mode) {
|
|
load(editor, mode, function () {
|
|
if (editor.getValue().trim().length) {
|
|
editor.performLint();
|
|
}
|
|
});
|
|
}
|