4e5e73383ec60cc364def79e8fcf5d6d3b23a3e3aefea1a2e2c010bae613e1e820cc2ab9e682d3a053a4729a20e4620bfb5476798458130065d01b3a436693 1.5 KB

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