UNPKG

@zodiac-ui/editor

Version:

A rich text editor for Angular based on `@atlaskit/editor-core`.

82 lines 11.5 kB
// 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==