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