@zodiac-ui/editor
Version:
A rich text editor for Angular based on `@atlaskit/editor-core`.
82 lines • 11.5 kB
JavaScript
// Hat tip https://github.com/hacdias
// Most of the code from this file comes from:
// https://github.com/codemirror/CodeMirror/blob/master/addon/mode/loadmode.js
import * as BaseCodeMirrorNs from 'codemirror';
import "codemirror/addon/mode/overlay";
import "codemirror/addon/mode/multiplex";
import "codemirror/addon/mode/simple";
import "codemirror/mode/meta";
const BaseCodeMirror = BaseCodeMirrorNs;
if (!window.CodeMirror) {
window.CodeMirror = BaseCodeMirror;
}
const loading = {};
function splitCallback(cont, n) {
let countDown = n;
return function () {
if (--countDown === 0)
cont();
};
}
export function getMode(name) {
if (BaseCodeMirror.findModeByName) {
return BaseCodeMirror.findModeByName(name);
}
return null;
}
export const globalConfig = {};
function ensureDeps(mode, cont) {
const deps = BaseCodeMirror.modes[mode].dependencies;
if (!deps)
return cont(false);
const missing = [];
for (let i = 0; i < deps.length; ++i) {
if (!BaseCodeMirror.modes.hasOwnProperty(deps[i]))
missing.push(deps[i]);
}
if (!missing.length)
return cont(false);
const split = splitCallback(cont, missing.length);
for (let i = 0; i < missing.length; ++i)
CodeMirror.requireMode(missing[i], split);
}
export const modeInfo = BaseCodeMirror.modeInfo;
export class CodeMirror extends BaseCodeMirror {
constructor(node, opts) {
BaseCodeMirror.modeURL = globalConfig.modeURL ? globalConfig.modeURL : 'assets/mode/%N/%N.js';
if (!window.CodeMirror) {
// Make CodeMirror available globally so the modes' can register themselves.
}
super(node, opts);
}
static requireMode(mode, cont) {
if (typeof mode !== 'string')
mode = mode.name;
if (BaseCodeMirror.modes.hasOwnProperty(mode))
return ensureDeps(mode, cont);
if (loading.hasOwnProperty(mode))
return loading[mode].push(cont);
const file = BaseCodeMirror.modeURL.replace(/%N/g, mode);
const script = document.createElement('script');
script.src = file;
const others = document.getElementsByTagName('script')[0];
const list = loading[mode] = [cont];
BaseCodeMirror.on(script, 'load', function () {
ensureDeps(mode, function () {
for (let i = 0; i < list.length; ++i)
list[i](true);
});
});
others.parentNode.insertBefore(script, others);
}
static autoLoadMode(instance, mode) {
if (BaseCodeMirror.modes.hasOwnProperty(mode))
return;
CodeMirror.requireMode(mode, function () {
instance.setOption('mode', instance.getOption('mode'));
});
}
}
CodeMirror.normalizeKeyMap = BaseCodeMirror.normalizeKeyMap;
CodeMirror.Pass = BaseCodeMirror.Pass;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZW1pcnJvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B6b2RpYWMtdWkvZWRpdG9yLyIsInNvdXJjZXMiOlsicGx1Z2lucy9jb2RlL2NvZGVtaXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscUNBQXFDO0FBQ3JDLDhDQUE4QztBQUM5Qyw4RUFBOEU7QUFDOUUsT0FBTyxLQUFLLGdCQUFnQixNQUFNLFlBQVksQ0FBQTtBQUM5QyxPQUFPLCtCQUErQixDQUFBO0FBQ3RDLE9BQU8saUNBQWlDLENBQUE7QUFDeEMsT0FBTyw4QkFBOEIsQ0FBQTtBQUNyQyxPQUFPLHNCQUFzQixDQUFBO0FBRTdCLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFBO0FBRXZDLElBQUcsQ0FBTyxNQUFPLENBQUMsVUFBVSxFQUFFO0lBQ3BCLE1BQU8sQ0FBQyxVQUFVLEdBQUcsY0FBYyxDQUFBO0NBQzVDO0FBRUQsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFBO0FBRWxCLFNBQVMsYUFBYSxDQUFFLElBQUksRUFBRSxDQUFDO0lBQzNCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQTtJQUNqQixPQUFPO1FBQ0gsSUFBSSxFQUFFLFNBQVMsS0FBSyxDQUFDO1lBQUUsSUFBSSxFQUFFLENBQUE7SUFDakMsQ0FBQyxDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsSUFBSTtJQUN4QixJQUFJLGNBQWMsQ0FBQyxjQUFjLEVBQUU7UUFDL0IsT0FBTyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlDO0lBQ0QsT0FBTyxJQUFJLENBQUE7QUFDZixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFRLEVBQUUsQ0FBQTtBQUVuQyxTQUFTLFVBQVUsQ0FBRSxJQUFJLEVBQUUsSUFBSTtJQUMzQixNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQTtJQUNwRCxJQUFJLENB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RCxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJO1FBQzlCLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTTtRQUVyRCxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRTtZQUN6QixRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDMUQsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDOztBQXZDTSwwQkFBZSxHQUFRLGNBQWMsQ0FBQyxlQUFlLENBQUE7QUFDckQsZUFBSSxHQUFRLGNBQWMsQ0FBQyxJQUFJLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBIYXQgdGlwIGh0dHBzOi8vZ2l0aHViLmNvbS9oYWNkaWFzXHJcbi8vIE1vc3Qgb2YgdGhlIGNvZGUgZnJvbSB0aGlzIGZpbGUgY29tZXMgZnJvbTpcclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2NvZGVtaXJyb3IvQ29kZU1pcnJvci9ibG9iL21hc3Rlci9hZGRvbi9tb2RlL2xvYWRtb2RlLmpzXHJcbmltcG9ydCAqIGFzIEJhc2VDb2RlTWlycm9yTnMgZnJvbSAnY29kZW1pcnJvcidcclxuaW1wb3J0IFwiY29kZW1pcnJvci9hZGRvbi9tb2RlL292ZXJsYXlcIlxyXG5pbXBvcnQgXCJjb2RlbWlycm9yL2FkZG9uL21vZGUvbXVsdGlwbGV4XCJcclxuaW1wb3J0IFwiY29kZW1pcnJvci9hZGRvbi9tb2RlL3NpbXBsZVwiXHJcbmltcG9ydCBcImNvZGVtaXJyb3IvbW9kZS9tZXRhXCJcclxuXHJcbmNvbnN0IEJhc2VDb2RlTWlycm9yID0gQmFzZUNvZGVNaXJyb3JOc1xyXG5cclxuaWYoISg8YW55PndpbmRvdykuQ29kZU1pcnJvcikge1xyXG4gICAgKDxhbnk+d2luZG93KS5Db2RlTWlycm9yID0gQmFzZUNvZGVNaXJyb3JcclxufVxyXG5cclxuY29uc3QgbG9hZGluZyA9IHt9XHJcblxyXG5mdW5jdGlvbiBzcGxpdENhbGxiYWNrIChjb250LCBuKSB7XHJcbiAgICBsZXQgY291bnREb3duID0gblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoLS1jb3VudERvd24gPT09IDApIGNvbnQoKVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kZShuYW1lKSB7XHJcbiAgICBpZiAoQmFzZUNvZGVNaXJyb3IuZmluZE1vZGVCeU5hbWUpIHtcclxuICAgICAgICByZXR1cm4gQmFzZUNvZGVNaXJyb3IuZmluZE1vZGVCeU5hbWUobmFtZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbFxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2xvYmFsQ29uZmlnOiBhbnkgPSB7fVxyXG5cclxuZnVuY3Rpb24gZW5zdXJlRGVwcyAobW9kZSwgY29udCkge1xyXG4gICAgY29uc3QgZGVwcyA9IEJhc2VDb2RlTWlycm9yLm1vZGVzW21vZGVdLmRlcGVuZGVuY2llc1xyXG4gICAgaWYgKCFkZXBzKSByZXR1cm4gY29udChmYWxzZSlcclxuICAgIGNvbnN0IG1pc3NpbmcgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXBzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgaWYgKCFCYXNlQ29kZU1pcnJvci5tb2Rlcy5oYXNPd25Qcm9wZXJ0eShkZXBzW2ldKSkgbWlzc2luZy5wdXNoKGRlcHNbaV0pXHJcbiAgICB9XHJcbiAgICBpZiAoIW1pc3NpbmcubGVuZ3RoKSByZXR1cm4gY29udChmYWxzZSlcclxuICAgIGNvbnN0IHNwbGl0ID0gc3BsaXRDYWxsYmFjayhjb250LCBtaXNzaW5nLmxlbmd0aClcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWlzc2luZy5sZW5ndGg7ICsraSkgQ29kZU1pcnJvci5yZXF1aXJlTW9kZShtaXNzaW5nW2ldLCBzcGxpdClcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNb2RlSW5mbyB7XHJcbiAgICBuYW1lOiBzdHJpbmdcclxuICAgIG1pbWVzOiBzdHJpbmdbXVxyXG4gICAgbW9kZTogc3RyaW5nXHJcbiAgICBleHQ/OiBzdHJpbmdbXVxyXG4gICAgYWxpYXM/OiBzdHJpbmdbXVxyXG4gICAgZmlsZT86IHN0cmluZ1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgbW9kZUluZm86IE1vZGVJbmZvW10gPSBCYXNlQ29kZU1pcnJvci5tb2RlSW5mb1xyXG5cclxuZXhwb3J0IGNsYXNzIENvZGVNaXJyb3IgZXh0ZW5kcyBCYXNlQ29kZU1pcnJvciB7XHJcblxyXG4gICAgc3RhdGljIG5vcm1hbGl6ZUtleU1hcDogYW55ID0gQmFzZUNvZGVNaXJyb3Iubm9ybWFsaXplS2V5TWFwXHJcbiAgICBzdGF0aWMgUGFzczogYW55ID0gQmFzZUNvZGVNaXJyb3IuUGFzc1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKG5vZGUsIG9wdHMpIHtcclxuICAgICAgICBCYXNlQ29kZU1pcnJvci5tb2RlVVJMID0gZ2xvYmFsQ29uZmlnLm1vZGVVUkwgPyBnbG9iYWxDb25maWcubW9kZVVSTCA6ICdhc3NldHMvbW9kZS8lTi8lTi5qcydcclxuXHJcbiAgICAgICAgaWYgKCEoPGFueT53aW5kb3cpLkNvZGVNaXJyb3IpIHtcclxuICAgICAgICAgICAgLy8gTWFrZSBDb2RlTWlycm9yIGF2YWlsYWJsZSBnbG9iYWxseSBzbyB0aGUgbW9kZXMnIGNhbiByZWdpc3RlciB0aGVtc2VsdmVzLlxyXG4gICAgICAgIH1cclxuICAgICAgICBzdXBlcihub2RlLCBvcHRzKVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyByZXF1aXJlTW9kZShtb2RlLCBjb250KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBtb2RlICE9PSAnc3RyaW5nJykgbW9kZSA9IG1vZGUubmFtZVxyXG4gICAgICAgIGlmIChCYXNlQ29kZU1pcnJvci5tb2Rlcy5oYXNPd25Qcm9wZXJ0eShtb2RlKSkgcmV0dXJuIGVuc3VyZURlcHMobW9kZSwgY29udClcclxuICAgICAgICBpZiAobG9hZGluZy5oYXNPd25Qcm9wZXJ0eShtb2RlKSkgcmV0dXJuIGxvYWRpbmdbbW9kZV0ucHVzaChjb250KVxyXG5cclxuICAgICAgICBjb25zdCBmaWxlID0gQmFzZUNvZGVNaXJyb3IubW9kZVVSTC5yZXBsYWNlKC8lTi9nLCBtb2RlKVxyXG5cclxuICAgICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKVxyXG4gICAgICAgIHNjcmlwdC5zcmMgPSBmaWxlXHJcbiAgICAgICAgY29uc3Qgb3RoZXJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdXHJcbiAgICAgICAgY29uc3QgbGlzdCA9IGxvYWRpbmdbbW9kZV0gPSBbY29udF1cclxuXHJcbiAgICAgICAgQmFzZUNvZGVNaXJyb3Iub24oc2NyaXB0LCAnbG9hZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZW5zdXJlRGVwcyhtb2RlLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIGxpc3RbaV0odHJ1ZSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBvdGhlcnMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2NyaXB0LCBvdGhlcnMpXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGF1dG9Mb2FkTW9kZShpbnN0YW5jZSwgbW9kZSkge1xyXG4gICAgICAgIGlmIChCYXNlQ29kZU1pcnJvci5tb2Rlcy5oYXNPd25Qcm9wZXJ0eShtb2RlKSkgcmV0dXJuXHJcblxyXG4gICAgICAgIENvZGVNaXJyb3IucmVxdWlyZU1vZGUobW9kZSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpbnN0YW5jZS5zZXRPcHRpb24oJ21vZGUnLCBpbnN0YW5jZS5nZXRPcHRpb24oJ21vZGUnKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG59XHJcbiJdfQ==