1
0
mirror of https://github.com/BookStackApp/BookStack.git synced 2025-07-27 06:01:54 +03:00

Added handling of codemirror 6 code languages

This commit is contained in:
Dan Brown
2022-08-03 19:40:16 +01:00
parent d4f2fcdf79
commit 97146a6359
7 changed files with 437 additions and 174 deletions

View File

@ -1,10 +1,9 @@
import {EditorView} from "@codemirror/view"
// import {EditorState} from "@codemirror/state"
import Clipboard from "clipboard/dist/clipboard.min";
// Modes
import {modes, modeMap, modesAsStreamLanguages} from "./modes";
import {viewer} from "./setups.js";
import {createView, updateViewLanguage} from "./views.js";
/**
* Highlight pre elements on a page
@ -36,26 +35,24 @@ function highlightElem(elem) {
elem.innerHTML = elem.innerHTML.replace(/<br\s*[\/]?>/gi ,'\n');
const content = elem.textContent.trimEnd();
let mode = '';
let langName = '';
if (innerCodeElem !== null) {
const langName = innerCodeElem.className.replace('language-', '');
mode = getMode(langName, content);
langName = innerCodeElem.className.replace('language-', '');
}
const wrapper = document.createElement('div');
elem.parentNode.insertBefore(wrapper, elem);
const cm = new EditorView({
const ev = createView({
parent: wrapper,
doc: content,
extensions: viewer(),
});
setMode(ev, langName, content);
elem.remove();
// TODO - theme: getTheme(),
// TODO - mode,
addCopyIcon(cm);
addCopyIcon(ev);
}
/**
@ -84,28 +81,6 @@ function addCopyIcon(cmInstance) {
// });
}
/**
* Search for a codemirror code based off a user suggestion
* @param {String} suggestion
* @param {String} content
* @returns {string}
*/
function getMode(suggestion, content) {
suggestion = suggestion.trim().replace(/^\./g, '').toLowerCase();
const modeMapType = typeof modeMap[suggestion];
if (modeMapType === 'undefined') {
return '';
}
if (modeMapType === 'function') {
return modeMap[suggestion](content);
}
return modeMap[suggestion];
}
/**
* Ge the theme to use for CodeMirror instances.
* @returns {*|string}
@ -172,12 +147,14 @@ export function inlineEditor(textArea, mode) {
}
/**
* Set the mode of a codemirror instance.
* @param cmInstance
* @param modeSuggestion
* Set the language mode of a codemirror EditorView.
*
* @param {EditorView} ev
* @param {string} modeSuggestion
* @param {string} content
*/
export function setMode(cmInstance, modeSuggestion, content) {
cmInstance.setOption('mode', getMode(modeSuggestion, content));
export function setMode(ev, modeSuggestion, content) {
updateViewLanguage(ev, modeSuggestion, content);
}
/**