import 'codemirror/mode/toml/toml';
import 'codemirror/mode/xml/xml';
import 'codemirror/mode/yaml/yaml';
+import 'codemirror/mode/pascal/pascal';
// Addons
import 'codemirror/addon/scroll/scrollpastend';
powershell: 'powershell',
properties: 'properties',
ocaml: 'mllike',
+ pascal: 'text/x-pascal',
+ pas: 'text/x-pascal',
php: (content) => {
return content.includes('<?php') ? 'php' : 'text/x-php';
},
* Highlight pre elements on a page
*/
function highlight() {
- let codeBlocks = document.querySelectorAll('.page-content pre, .comment-box .content pre');
- for (let i = 0; i < codeBlocks.length; i++) {
- highlightElem(codeBlocks[i]);
+ const codeBlocks = document.querySelectorAll('.page-content pre, .comment-box .content pre');
+ for (const codeBlock of codeBlocks) {
+ highlightElem(codeBlock);
+ }
+}
+
+/**
+ * Highlight all code blocks within the given parent element
+ * @param {HTMLElement} parent
+ */
+function highlightWithin(parent) {
+ const codeBlocks = parent.querySelectorAll('pre');
+ for (const codeBlock of codeBlocks) {
+ highlightElem(codeBlock);
}
}
function highlightElem(elem) {
const innerCodeElem = elem.querySelector('code[class^=language-]');
elem.innerHTML = elem.innerHTML.replace(/<br\s*[\/]?>/gi ,'\n');
- const content = elem.textContent.trim();
+ const content = elem.textContent.trimEnd();
let mode = '';
if (innerCodeElem !== null) {
* @returns {*|string}
*/
function getTheme() {
- return window.codeTheme || 'base16-light';
+ return window.codeTheme || 'default';
}
/**
function setContent(cmInstance, codeContent) {
cmInstance.setValue(codeContent);
setTimeout(() => {
- cmInstance.refresh();
+ updateLayout(cmInstance);
}, 10);
}
+/**
+ * Update the layout (codemirror refresh) of a cm instance.
+ * @param cmInstance
+ */
+function updateLayout(cmInstance) {
+ cmInstance.refresh();
+}
+
/**
* Get a CodeMirror instance to use for the markdown editor.
* @param {HTMLElement} elem
export default {
highlight: highlight,
+ highlightWithin: highlightWithin,
wysiwygView: wysiwygView,
popupEditor: popupEditor,
setMode: setMode,
setContent: setContent,
+ updateLayout: updateLayout,
markdownEditor: markdownEditor,
getMetaKey: getMetaKey,
};