gutters.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334
  1. import { elt, removeChildren } from "../util/dom.js"
  2. import { indexOf } from "../util/misc.js"
  3. import { updateGutterSpace } from "./update_display.js"
  4. // Rebuild the gutter elements, ensure the margin to the left of the
  5. // code matches their width.
  6. export function updateGutters(cm) {
  7. let gutters = cm.display.gutters, specs = cm.options.gutters
  8. removeChildren(gutters)
  9. let i = 0
  10. for (; i < specs.length; ++i) {
  11. let gutterClass = specs[i]
  12. let gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass))
  13. if (gutterClass == "CodeMirror-linenumbers") {
  14. cm.display.lineGutter = gElt
  15. gElt.style.width = (cm.display.lineNumWidth || 1) + "px"
  16. }
  17. }
  18. gutters.style.display = i ? "" : "none"
  19. updateGutterSpace(cm)
  20. }
  21. // Make sure the gutters options contains the element
  22. // "CodeMirror-linenumbers" when the lineNumbers option is true.
  23. export function setGuttersForLineNumbers(options) {
  24. let found = indexOf(options.gutters, "CodeMirror-linenumbers")
  25. if (found == -1 && options.lineNumbers) {
  26. options.gutters = options.gutters.concat(["CodeMirror-linenumbers"])
  27. } else if (found > -1 && !options.lineNumbers) {
  28. options.gutters = options.gutters.slice(0)
  29. options.gutters.splice(found, 1)
  30. }
  31. }