MCPcopy Index your code
hub / github.com/DHTMLX/gantt / makeChangeFromHistory

Function makeChangeFromHistory

samples/common/codehighlight/codemirror.js:5300–5372  ·  view source on GitHub ↗
(doc, type, allowSelectionOnly)

Source from the content-addressed store, hash-verified

5298
5299 // Revert a change stored in a document's history.
5300 function makeChangeFromHistory(doc, type, allowSelectionOnly) {
5301 var suppress = doc.cm && doc.cm.state.suppressEdits;
5302 if (suppress && !allowSelectionOnly) { return }
5303
5304 var hist = doc.history, event, selAfter = doc.sel;
5305 var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done;
5306
5307 // Verify that there is a useable event (so that ctrl-z won't
5308 // needlessly clear selection events)
5309 var i = 0;
5310 for (; i < source.length; i++) {
5311 event = source[i];
5312 if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)
5313 { break }
5314 }
5315 if (i == source.length) { return }
5316 hist.lastOrigin = hist.lastSelOrigin = null;
5317
5318 for (;;) {
5319 event = source.pop();
5320 if (event.ranges) {
5321 pushSelectionToHistory(event, dest);
5322 if (allowSelectionOnly && !event.equals(doc.sel)) {
5323 setSelection(doc, event, {clearRedo: false});
5324 return
5325 }
5326 selAfter = event;
5327 } else if (suppress) {
5328 source.push(event);
5329 return
5330 } else { break }
5331 }
5332
5333 // Build up a reverse change object to add to the opposite history
5334 // stack (redo when undoing, and vice versa).
5335 var antiChanges = [];
5336 pushSelectionToHistory(selAfter, dest);
5337 dest.push({changes: antiChanges, generation: hist.generation});
5338 hist.generation = event.generation || ++hist.maxGeneration;
5339
5340 var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange");
5341
5342 var loop = function ( i ) {
5343 var change = event.changes[i];
5344 change.origin = type;
5345 if (filter && !filterChange(doc, change, false)) {
5346 source.length = 0;
5347 return {}
5348 }
5349
5350 antiChanges.push(historyChangeFromChange(doc, change));
5351
5352 var after = i ? computeSelAfterChange(doc, change) : lst(source);
5353 makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));
5354 if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }
5355 var rebased = [];
5356
5357 // Propagate to the linked documents

Callers 1

codemirror.jsFile · 0.85

Calls 4

pushSelectionToHistoryFunction · 0.85
setSelectionFunction · 0.85
hasHandlerFunction · 0.85
loopFunction · 0.85

Tested by

no test coverage detected