openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

line_numbers.js (2159B)


      1 import { lineNumberFor } from "../line/utils_line.js"
      2 import { compensateForHScroll } from "../measurement/position_measurement.js"
      3 import { elt } from "../util/dom.js"
      4 
      5 import { updateGutterSpace } from "./update_display.js"
      6 
      7 // Re-align line numbers and gutter marks to compensate for
      8 // horizontal scrolling.
      9 export function alignHorizontally(cm) {
     10   let display = cm.display, view = display.view
     11   if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return
     12   let comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft
     13   let gutterW = display.gutters.offsetWidth, left = comp + "px"
     14   for (let i = 0; i < view.length; i++) if (!view[i].hidden) {
     15     if (cm.options.fixedGutter) {
     16       if (view[i].gutter)
     17         view[i].gutter.style.left = left
     18       if (view[i].gutterBackground)
     19         view[i].gutterBackground.style.left = left
     20     }
     21     let align = view[i].alignable
     22     if (align) for (let j = 0; j < align.length; j++)
     23       align[j].style.left = left
     24   }
     25   if (cm.options.fixedGutter)
     26     display.gutters.style.left = (comp + gutterW) + "px"
     27 }
     28 
     29 // Used to ensure that the line number gutter is still the right
     30 // size for the current document size. Returns true when an update
     31 // is needed.
     32 export function maybeUpdateLineNumberWidth(cm) {
     33   if (!cm.options.lineNumbers) return false
     34   let doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display
     35   if (last.length != display.lineNumChars) {
     36     let test = display.measure.appendChild(elt("div", [elt("div", last)],
     37                                                "CodeMirror-linenumber CodeMirror-gutter-elt"))
     38     let innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW
     39     display.lineGutter.style.width = ""
     40     display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1
     41     display.lineNumWidth = display.lineNumInnerWidth + padding
     42     display.lineNumChars = display.lineNumInnerWidth ? last.length : -1
     43     display.lineGutter.style.width = display.lineNumWidth + "px"
     44     updateGutterSpace(cm)
     45     return true
     46   }
     47   return false
     48 }