repos

blog.bythewood.me-wagtail

mirror archived upstream

Self-hostable blog for developers built on Wagtail and Django, with webpack, Bootstrap, and CodeMirror.

blogbootstrapdjangodockerhandcodedpythonself-hostedwagtailwebpack

1.6 KB · 53 lines · JavaScript Raw History
 1import CodeMirror from "codemirror/lib/codemirror.js";
 2
 3// import "codemirror/mode/python/python.js";
 4// import "codemirror/mode/javascript/javascript.js";
 5// import "codemirror/mode/htmlmixed/htmlmixed.js";
 6// import "codemirror/mode/css/css.js";
 7// import "codemirror/mode/shell/shell.js";
 8
 9import "codemirror/lib/codemirror.css";
10import "codemirror/theme/material-darker.css";
11
12const initCodeMirror = (codeBlocks) => {
13  for (let i = 0; i < codeBlocks.length; i++) {
14    const codeBlock = codeBlocks[i];
15    if (codeBlock.innerHTML === "Code") {
16      let parentDiv = codeBlock.parentElement;
17      while (parentDiv.className !== "c-sf-block") {
18        parentDiv = parentDiv.parentElement;
19      }
20
21      const textarea = parentDiv.querySelector("textarea");
22      if (!textarea.dataset.cmInitialized) {
23        setTimeout(() => {
24          CodeMirror.fromTextArea(textarea, {
25            theme: "material-darker",
26            lineNumbers: true,
27            viewportMargin: Infinity,
28            // mode: "javascript",
29          });
30        }, 100);
31        textarea.dataset.cmInitialized = "true";
32      }
33    }
34  }
35};
36
37document.addEventListener("DOMContentLoaded", () => {
38  const codeBlocks = document.querySelectorAll(".c-sf-block__type");
39  initCodeMirror(codeBlocks);
40
41  var observer = new MutationObserver(function (mutations) {
42    mutations.forEach(function (mutation) {
43      const codeBlocks = mutation.target.querySelectorAll(".c-sf-block__type");
44      initCodeMirror(codeBlocks);
45    });
46  });
47
48  observer.observe(
49    document.querySelector("[data-contentpath='body']"),
50    { childList: true, subtree: true }
51  );
52});