(doc, change, selAfter, spans)
| 7295 | // More lower-level change function, handling only a single document |
| 7296 | // (not linked ones). |
| 7297 | function makeChangeSingleDoc(doc, change, selAfter, spans) { |
| 7298 | if (doc.cm && !doc.cm.curOp) { |
| 7299 | return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) |
| 7300 | } |
| 7301 | |
| 7302 | if (change.to.line < doc.first) { |
| 7303 | shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)) |
| 7304 | return |
| 7305 | } |
| 7306 | if (change.from.line > doc.lastLine()) { |
| 7307 | return |
| 7308 | } |
| 7309 | |
| 7310 | // Clip the change to the size of this doc |
| 7311 | if (change.from.line < doc.first) { |
| 7312 | var shift = change.text.length - 1 - (doc.first - change.from.line) |
| 7313 | shiftDoc(doc, shift) |
| 7314 | change = { from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), text: [lst(change.text)], origin: change.origin } |
| 7315 | } |
| 7316 | var last = doc.lastLine() |
| 7317 | if (change.to.line > last) { |
| 7318 | change = { from: change.from, to: Pos(last, getLine(doc, last).text.length), text: [change.text[0]], origin: change.origin } |
| 7319 | } |
| 7320 | |
| 7321 | change.removed = getBetween(doc, change.from, change.to) |
| 7322 | |
| 7323 | if (!selAfter) { |
| 7324 | selAfter = computeSelAfterChange(doc, change) |
| 7325 | } |
| 7326 | if (doc.cm) { |
| 7327 | makeChangeSingleDocInEditor(doc.cm, change, spans) |
| 7328 | } else { |
| 7329 | updateDoc(doc, change, spans) |
| 7330 | } |
| 7331 | setSelectionNoUndo(doc, selAfter, sel_dontScroll) |
| 7332 | } |
| 7333 | |
| 7334 | // Handle the interaction of a change to a document with the editor |
| 7335 | // that this document is part of. |
no test coverage detected