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