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

Function regChange

static/mergely/lib/codemirror.js:3241–3302  ·  view source on GitHub ↗
(cm, from, to, lendiff)

Source from the content-addressed store, hash-verified

3239 // lines are divided into visual lines. regLineChange (below)
3240 // registers single-line changes.
3241 function regChange(cm, from, to, lendiff) {
3242 if (from == null) from = cm.doc.first;
3243 if (to == null) to = cm.doc.first + cm.doc.size;
3244 if (!lendiff) lendiff = 0;
3245
3246 var display = cm.display;
3247 if (lendiff && to < display.viewTo &&
3248 (display.updateLineNumbers == null || display.updateLineNumbers > from))
3249 display.updateLineNumbers = from;
3250
3251 cm.curOp.viewChanged = true;
3252
3253 if (from >= display.viewTo) { // Change after
3254 if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)
3255 resetView(cm);
3256 } else if (to <= display.viewFrom) { // Change before
3257 if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {
3258 resetView(cm);
3259 } else {
3260 display.viewFrom += lendiff;
3261 display.viewTo += lendiff;
3262 }
3263 } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap
3264 resetView(cm);
3265 } else if (from <= display.viewFrom) { // Top overlap
3266 var cut = viewCuttingPoint(cm, to, to + lendiff, 1);
3267 if (cut) {
3268 display.view = display.view.slice(cut.index);
3269 display.viewFrom = cut.lineN;
3270 display.viewTo += lendiff;
3271 } else {
3272 resetView(cm);
3273 }
3274 } else if (to >= display.viewTo) { // Bottom overlap
3275 var cut = viewCuttingPoint(cm, from, from, -1);
3276 if (cut) {
3277 display.view = display.view.slice(0, cut.index);
3278 display.viewTo = cut.lineN;
3279 } else {
3280 resetView(cm);
3281 }
3282 } else { // Gap in the middle
3283 var cutTop = viewCuttingPoint(cm, from, from, -1);
3284 var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);
3285 if (cutTop && cutBot) {
3286 display.view = display.view.slice(0, cutTop.index)
3287 .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))
3288 .concat(display.view.slice(cutBot.index));
3289 display.viewTo += lendiff;
3290 } else {
3291 resetView(cm);
3292 }
3293 }
3294
3295 var ext = display.externalMeasured;
3296 if (ext) {
3297 if (to < ext.lineN)
3298 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