annotate .cms/lib/codemirror/src/display/line_numbers.js @ 1:1d486627aa1e draft default tip

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