MCPcopy Create free account
hub / github.com/TruthHun/BookStack / regChange

Function regChange

static/editor.md/lib/codemirror/lib/codemirror.js:3132–3193  ·  view source on GitHub ↗
(cm, from, to, lendiff)

Source from the content-addressed store, hash-verified

3130 // lines are divided into visual lines. regLineChange (below)
3131 // registers single-line changes.
3132 function regChange(cm, from, to, lendiff) {
3133 if (from == null) from = cm.doc.first;
3134 if (to == null) to = cm.doc.first + cm.doc.size;
3135 if (!lendiff) lendiff = 0;
3136
3137 var display = cm.display;
3138 if (lendiff && to < display.viewTo &&
3139 (display.updateLineNumbers == null || display.updateLineNumbers > from))
3140 display.updateLineNumbers = from;
3141
3142 cm.curOp.viewChanged = true;
3143
3144 if (from >= display.viewTo) { // Change after
3145 if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)
3146 resetView(cm);
3147 } else if (to <= display.viewFrom) { // Change before
3148 if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {
3149 resetView(cm);
3150 } else {
3151 display.viewFrom += lendiff;
3152 display.viewTo += lendiff;
3153 }
3154 } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap
3155 resetView(cm);
3156 } else if (from <= display.viewFrom) { // Top overlap
3157 var cut = viewCuttingPoint(cm, to, to + lendiff, 1);
3158 if (cut) {
3159 display.view = display.view.slice(cut.index);
3160 display.viewFrom = cut.lineN;
3161 display.viewTo += lendiff;
3162 } else {
3163 resetView(cm);
3164 }
3165 } else if (to >= display.viewTo) { // Bottom overlap
3166 var cut = viewCuttingPoint(cm, from, from, -1);
3167 if (cut) {
3168 display.view = display.view.slice(0, cut.index);
3169 display.viewTo = cut.lineN;
3170 } else {
3171 resetView(cm);
3172 }
3173 } else { // Gap in the middle
3174 var cutTop = viewCuttingPoint(cm, from, from, -1);
3175 var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);
3176 if (cutTop && cutBot) {
3177 display.view = display.view.slice(0, cutTop.index)
3178 .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))
3179 .concat(display.view.slice(cutBot.index));
3180 display.viewTo += lendiff;
3181 } else {
3182 resetView(cm);
3183 }
3184 }
3185
3186 var ext = display.externalMeasured;
3187 if (ext) {
3188 if (to < ext.lineN)
3189 ext.lineN += lendiff;

Callers 8

resetModeStateFunction · 0.70
wrappingChangedFunction · 0.70
guttersChangedFunction · 0.70
codemirror.jsFile · 0.70
shiftDocFunction · 0.70
markTextFunction · 0.70
attachDocFunction · 0.70

Calls 5

visualLineNoFunction · 0.70
resetViewFunction · 0.70
visualLineEndNoFunction · 0.70
viewCuttingPointFunction · 0.70
buildViewArrayFunction · 0.70

Tested by

no test coverage detected