Mercurial
comparison .cms/lib/codemirror/src/display/line_numbers.js @ 0:78edf6b517a0 draft
24.10
author | Coffee CMS <info@coffee-cms.ru> |
---|---|
date | Fri, 11 Oct 2024 22:40:23 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:78edf6b517a0 |
---|---|
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.display) | |
45 return true | |
46 } | |
47 return false | |
48 } |