diff .cms/lib/codemirror/src/display/gutters.js @ 0:78edf6b517a0 draft

24.10
author Coffee CMS <info@coffee-cms.ru>
date Fri, 11 Oct 2024 22:40:23 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.cms/lib/codemirror/src/display/gutters.js	Fri Oct 11 22:40:23 2024 +0000
@@ -0,0 +1,44 @@
+import { elt, removeChildren } from "../util/dom.js"
+import { regChange } from "./view_tracking.js"
+import { alignHorizontally } from "./line_numbers.js"
+import { updateGutterSpace } from "./update_display.js"
+
+export function getGutters(gutters, lineNumbers) {
+  let result = [], sawLineNumbers = false
+  for (let i = 0; i < gutters.length; i++) {
+    let name = gutters[i], style = null
+    if (typeof name != "string") { style = name.style; name = name.className }
+    if (name == "CodeMirror-linenumbers") {
+      if (!lineNumbers) continue
+      else sawLineNumbers = true
+    }
+    result.push({className: name, style})
+  }
+  if (lineNumbers && !sawLineNumbers) result.push({className: "CodeMirror-linenumbers", style: null})
+  return result
+}
+
+// Rebuild the gutter elements, ensure the margin to the left of the
+// code matches their width.
+export function renderGutters(display) {
+  let gutters = display.gutters, specs = display.gutterSpecs
+  removeChildren(gutters)
+  display.lineGutter = null
+  for (let i = 0; i < specs.length; ++i) {
+    let {className, style} = specs[i]
+    let gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + className))
+    if (style) gElt.style.cssText = style
+    if (className == "CodeMirror-linenumbers") {
+      display.lineGutter = gElt
+      gElt.style.width = (display.lineNumWidth || 1) + "px"
+    }
+  }
+  gutters.style.display = specs.length ? "" : "none"
+  updateGutterSpace(display)
+}
+
+export function updateGutters(cm) {
+  renderGutters(cm.display)
+  regChange(cm)
+  alignHorizontally(cm)
+}