UNPKG

jupyterlab-emrys

Version:

A computational environment for Jupyter. Powered by Emrys

72 lines (71 loc) 2.3 kB
// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. "use strict"; var CodeMirror = require('codemirror'); require('./codemirror-ipython'); require('./codemirror-ipythongfm'); // Bundle other common modes require('codemirror/mode/javascript/javascript'); require('codemirror/mode/css/css'); require('codemirror/mode/julia/julia'); require('codemirror/mode/r/r'); require('codemirror/mode/markdown/markdown'); /** * Load a codemirror mode by file name. */ function loadModeByFileName(editor, filename) { loadInfo(editor, CodeMirror.findModeByFileName(filename)); } exports.loadModeByFileName = loadModeByFileName; /** * Load a codemirror mode by mime type. */ function loadModeByMIME(editor, mimetype) { loadInfo(editor, CodeMirror.findModeByMIME(mimetype)); } exports.loadModeByMIME = loadModeByMIME; /** * Load a codemirror mode by mode name. */ function loadModeByName(editor, mode) { loadInfo(editor, CodeMirror.findModeByName(mode)); } exports.loadModeByName = loadModeByName; /** * Require a codemirror mode by name or Codemirror spec. */ function requireMode(mode) { var modename = (typeof mode === 'string') ? mode : mode.mode || mode.name; var mimetype = (typeof mode !== 'string') ? mode.mime : ''; var ext = modename.split('.').pop(); // Get a modespec object by whatever means necessary. var info = ((modename && mimetype && mode) || CodeMirror.findModeByName(modename) || CodeMirror.findModeByExtension(ext) || CodeMirror.findModeByMIME(modename) || { mode: modename, mime: modename }); // Simplest, cheapest check by mode name. if (CodeMirror.modes.hasOwnProperty(modename)) { return Promise.resolve(info); } // Fetch the mode asynchronously. return new Promise(function (resolve, reject) { require([("codemirror/mode/" + info.mode + "/" + info.mode)], function () { resolve(info); }); }); } exports.requireMode = requireMode; /** * Load a CodeMirror mode based on a mode spec. */ function loadInfo(editor, info) { if (!info) { editor.setOption('mode', 'null'); return; } requireMode(info).then(function () { editor.setOption('mode', info.mime); }); }