1 require('codemirror/mode/css/css');
2 require('codemirror/mode/clike/clike');
3 require('codemirror/mode/diff/diff');
4 require('codemirror/mode/go/go');
5 require('codemirror/mode/htmlmixed/htmlmixed');
6 require('codemirror/mode/javascript/javascript');
7 require('codemirror/mode/markdown/markdown');
8 require('codemirror/mode/nginx/nginx');
9 require('codemirror/mode/php/php');
10 require('codemirror/mode/powershell/powershell');
11 require('codemirror/mode/python/python');
12 require('codemirror/mode/ruby/ruby');
13 require('codemirror/mode/shell/shell');
14 require('codemirror/mode/sql/sql');
15 require('codemirror/mode/toml/toml');
16 require('codemirror/mode/xml/xml');
17 require('codemirror/mode/yaml/yaml');
19 const CodeMirror = require('codemirror');
33 javascript: 'javascript',
34 json: {name: 'javascript', json: true},
41 powershell: 'powershell',
56 module.exports.highlight = function() {
57 let codeBlocks = document.querySelectorAll('.page-content pre');
58 for (let i = 0; i < codeBlocks.length; i++) {
59 highlightElem(codeBlocks[i]);
63 function highlightElem(elem) {
64 let innerCodeElem = elem.querySelector('code[class^=language-]');
66 if (innerCodeElem !== null) {
67 let langName = innerCodeElem.className.replace('language-', '');
68 mode = getMode(langName);
70 elem.innerHTML = elem.innerHTML.replace(/<br\s*[\/]?>/gi ,'\n');
71 let content = elem.textContent;
73 CodeMirror(function(elt) {
74 elem.parentNode.replaceChild(elt, elem);
79 theme: 'base16-light',
85 * Search for a codemirror code based off a user suggestion
89 function getMode(suggestion) {
90 suggestion = suggestion.trim().replace(/^\./g, '').toLowerCase();
91 return (typeof modeMap[suggestion] !== 'undefined') ? modeMap[suggestion] : '';
94 module.exports.highlightElem = highlightElem;
96 module.exports.wysiwygView = function(elem) {
97 let doc = elem.ownerDocument;
98 let codeElem = elem.querySelector('code');
100 let lang = (elem.className || '').replace('language-', '');
101 if (lang === '' && codeElem) {
102 lang = (codeElem.className || '').replace('language-', '')
105 elem.innerHTML = elem.innerHTML.replace(/<br\s*[\/]?>/gi ,'\n');
106 let content = elem.textContent;
107 let newWrap = doc.createElement('div');
108 let newTextArea = doc.createElement('textarea');
110 newWrap.className = 'CodeMirrorContainer';
111 newWrap.setAttribute('data-lang', lang);
112 newTextArea.style.display = 'none';
113 elem.parentNode.replaceChild(newWrap, elem);
115 newWrap.appendChild(newTextArea);
116 newWrap.contentEditable = false;
117 newTextArea.textContent = content;
119 let cm = CodeMirror(function(elt) {
120 newWrap.appendChild(elt);
125 theme: 'base16-light',
131 return {wrap: newWrap, editor: cm};
134 module.exports.popupEditor = function(elem, modeSuggestion) {
135 let content = elem.textContent;
137 return CodeMirror(function(elt) {
138 elem.parentNode.insertBefore(elt, elem);
139 elem.style.display = 'none';
142 mode: getMode(modeSuggestion),
144 theme: 'base16-light',
149 module.exports.setMode = function(cmInstance, modeSuggestion) {
150 cmInstance.setOption('mode', getMode(modeSuggestion));
152 module.exports.setContent = function(cmInstance, codeContent) {
153 cmInstance.setValue(codeContent);
155 cmInstance.refresh();
159 module.exports.markdownEditor = function(elem) {
160 let content = elem.textContent;
162 return CodeMirror(function (elt) {
163 elem.parentNode.insertBefore(elt, elem);
164 elem.style.display = 'none';
169 theme: 'base16-light',
174 module.exports.getMetaKey = function() {
175 let mac = CodeMirror.keyMap["default"] == CodeMirror.keyMap.macDefault;
176 return mac ? "Cmd" : "Ctrl";