You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.5 KiB
44 lines
1.5 KiB
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) |
|
}
|
|
|