MCPcopy Index your code
hub / github.com/ronreiter/interactive-tutorials / buildLineElement

Function buildLineElement

static/js/codemirror/codemirror.js:629–703  ·  view source on GitHub ↗
(cm, line, lineNo, dims, reuse)

Source from the content-addressed store, hash-verified

627 }
628
629 function buildLineElement(cm, line, lineNo, dims, reuse) {
630 var lineElement = lineContent(cm, line);
631 var markers = line.gutterMarkers, display = cm.display, wrap;
632
633 if (!cm.options.lineNumbers && !markers && !line.bgClass && !line.wrapClass && !line.widgets)
634 return lineElement;
635
636 // Lines with gutter elements, widgets or a background class need
637 // to be wrapped again, and have the extra elements added to the
638 // wrapper div
639
640 if (reuse) {
641 reuse.alignable = null;
642 var isOk = true, widgetsSeen = 0;
643 for (var n = reuse.firstChild, next; n; n = next) {
644 next = n.nextSibling;
645 if (!/\bCodeMirror-linewidget\b/.test(n.className)) {
646 reuse.removeChild(n);
647 } else {
648 for (var i = 0, first = true; i < line.widgets.length; ++i) {
649 var widget = line.widgets[i], isFirst = false;
650 if (!widget.above) { isFirst = first; first = false; }
651 if (widget.node == n.firstChild) {
652 positionLineWidget(widget, n, reuse, dims);
653 ++widgetsSeen;
654 if (isFirst) reuse.insertBefore(lineElement, n);
655 break;
656 }
657 }
658 if (i == line.widgets.length) { isOk = false; break; }
659 }
660 }
661 if (isOk && widgetsSeen == line.widgets.length) {
662 wrap = reuse;
663 reuse.className = line.wrapClass || "";
664 }
665 }
666 if (!wrap) {
667 wrap = elt("div", null, line.wrapClass, "position: relative");
668 wrap.appendChild(lineElement);
669 }
670 // Kludge to make sure the styled element lies behind the selection (by z-index)
671 if (line.bgClass)
672 wrap.insertBefore(elt("div", "\u00a0", line.bgClass + " CodeMirror-linebackground"), wrap.firstChild);
673 if (cm.options.lineNumbers || markers) {
674 var gutterWrap = wrap.insertBefore(elt("div", null, null, "position: absolute; left: " +
675 (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"),
676 wrap.firstChild);
677 if (cm.options.fixedGutter) (wrap.alignable || (wrap.alignable = [])).push(gutterWrap);
678 if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"]))
679 wrap.lineNumber = gutterWrap.appendChild(
680 elt("div", lineNumberFor(cm.options, lineNo),
681 "CodeMirror-linenumber CodeMirror-gutter-elt",
682 "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: "
683 + display.lineNumInnerWidth + "px"));
684 if (markers)
685 for (var k = 0; k < cm.options.gutters.length; ++k) {
686 var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id];

Callers 1

patchDisplayFunction · 0.85

Calls 7

lineContentFunction · 0.85
positionLineWidgetFunction · 0.85
eltFunction · 0.85
lineNumberForFunction · 0.85
signalLaterFunction · 0.85
testMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected