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) }