]> BookStack Code Mirror - bookstack/commitdiff
Added code highlighting syntax modes
authorDan Brown <redacted>
Sat, 17 Jun 2017 11:41:18 +0000 (12:41 +0100)
committerDan Brown <redacted>
Sat, 17 Jun 2017 11:41:18 +0000 (12:41 +0100)
resources/assets/js/code.js
resources/assets/js/directives.js

index 872b1342658995d0f68358aacf4383f4e6435cb7..020c38365dd79b02a96aeecf51edbd85e073cdd0 100644 (file)
@@ -17,18 +17,58 @@ require('codemirror/mode/yaml/yaml');
 
 const CodeMirror = require('codemirror');
 
+const modeMap = {
+    css: 'css',
+    c: 'clike',
+    java: 'clike',
+    scala: 'clike',
+    kotlin: 'clike',
+    'c++': 'clike',
+    'c#': 'clike',
+    csharp: 'clike',
+    go: 'go',
+    html: 'htmlmixed',
+    javascript: 'javascript',
+    json: {name: 'javascript', json: true},
+    js: 'javascript',
+    php: 'php',
+    md: 'markdown',
+    mdown: 'markdown',
+    markdown: 'markdown',
+    nginx: 'nginx',
+    powershell: 'powershell',
+    py: 'python',
+    python: 'python',
+    ruby: 'ruby',
+    rb: 'ruby',
+    shell: 'shell',
+    bash: 'shell',
+    toml: 'toml',
+    sql: 'sql',
+    xml: 'xml',
+    yaml: 'yaml',
+    yml: 'yaml',
+};
+
 module.exports.highlight = function() {
     let codeBlocks = document.querySelectorAll('.page-content pre');
 
     for (let i = 0; i < codeBlocks.length; i++) {
+        let innerCodeElem = codeBlocks[i].querySelector('code[class^=language-]');
+        let mode = '';
+        if (innerCodeElem !== null) {
+            let langName = innerCodeElem.className.replace('language-', '');
+            if (typeof modeMap[langName] !== 'undefined') mode = modeMap[langName];
+        }
         codeBlocks[i].innerHTML = codeBlocks[i].innerHTML.replace(/<br\s*[\/]?>/gi ,'\n');
         let content = codeBlocks[i].textContent;
+        console.log('MODE', mode);
 
         CodeMirror(function(elt) {
             codeBlocks[i].parentNode.replaceChild(elt, codeBlocks[i]);
         }, {
             value: content,
-            mode:  "",
+            mode:  mode,
             lineNumbers: true,
             theme: 'base16-light',
             readOnly: true
index 221e18b0e1559ca22a56564a9136d74d1c5ae71f..9a38add9ae7243e3ce614785f4d45f72819d30b8 100644 (file)
@@ -399,7 +399,7 @@ module.exports = function (ngApp, events) {
 
                 // Handle image upload and add image into markdown content
                 function uploadImage(file) {
-                    if (file.type.indexOf('image') !== 0) return;
+                    if (file === null || !file.type.indexOf('image') !== 0) return;
                     let formData = new FormData();
                     let ext = 'png';
                     let xhr = new XMLHttpRequest();