0
|
1 import { elt, removeChildren } from "../util/dom.js"
|
|
2 import { regChange } from "./view_tracking.js"
|
|
3 import { alignHorizontally } from "./line_numbers.js"
|
|
4 import { updateGutterSpace } from "./update_display.js"
|
|
5
|
|
6 export function getGutters(gutters, lineNumbers) {
|
|
7 let result = [], sawLineNumbers = false
|
|
8 for (let i = 0; i < gutters.length; i++) {
|
|
9 let name = gutters[i], style = null
|
|
10 if (typeof name != "string") { style = name.style; name = name.className }
|
|
11 if (name == "CodeMirror-linenumbers") {
|
|
12 if (!lineNumbers) continue
|
|
13 else sawLineNumbers = true
|
|
14 }
|
|
15 result.push({className: name, style})
|
|
16 }
|
|
17 if (lineNumbers && !sawLineNumbers) result.push({className: "CodeMirror-linenumbers", style: null})
|
|
18 return result
|
|
19 }
|
|
20
|
|
21 // Rebuild the gutter elements, ensure the margin to the left of the
|
|
22 // code matches their width.
|
|
23 export function renderGutters(display) {
|
|
24 let gutters = display.gutters, specs = display.gutterSpecs
|
|
25 removeChildren(gutters)
|
|
26 display.lineGutter = null
|
|
27 for (let i = 0; i < specs.length; ++i) {
|
|
28 let {className, style} = specs[i]
|
|
29 let gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + className))
|
|
30 if (style) gElt.style.cssText = style
|
|
31 if (className == "CodeMirror-linenumbers") {
|
|
32 display.lineGutter = gElt
|
|
33 gElt.style.width = (display.lineNumWidth || 1) + "px"
|
|
34 }
|
|
35 }
|
|
36 gutters.style.display = specs.length ? "" : "none"
|
|
37 updateGutterSpace(display)
|
|
38 }
|
|
39
|
|
40 export function updateGutters(cm) {
|
|
41 renderGutters(cm.display)
|
|
42 regChange(cm)
|
|
43 alignHorizontally(cm)
|
|
44 }
|