fix foldwidgets getting out of sync with document
This commit is contained in:
parent
d2163a7016
commit
505b1fc3c6
4 changed files with 14 additions and 28 deletions
|
|
@ -42,7 +42,7 @@ var oop = require("./lib/oop");
|
||||||
var EventEmitter = require("./lib/event_emitter").EventEmitter;
|
var EventEmitter = require("./lib/event_emitter").EventEmitter;
|
||||||
var Range = require("./range").Range;
|
var Range = require("./range").Range;
|
||||||
var Anchor = require("./anchor").Anchor;
|
var Anchor = require("./anchor").Anchor;
|
||||||
var lang = require("./lib/lang");
|
|
||||||
/**
|
/**
|
||||||
* class Document
|
* class Document
|
||||||
*
|
*
|
||||||
|
|
@ -326,8 +326,15 @@ var Document = function(text) {
|
||||||
if (lines.length == 0)
|
if (lines.length == 0)
|
||||||
return {row: row, column: 0};
|
return {row: row, column: 0};
|
||||||
|
|
||||||
|
if (lines.length > 0xFFFF) {
|
||||||
|
var end = this.insertLines(row, lines.slice(0xFFFF));
|
||||||
|
lines = lines.slice(0, 0xFFFF);
|
||||||
|
}
|
||||||
|
|
||||||
var args = [row, 0];
|
var args = [row, 0];
|
||||||
this.$lines = lang.chunkLines(lines, this.$lines, args, true);
|
args.push.apply(args, lines);
|
||||||
|
this.$lines.splice.apply(this.$lines, args);
|
||||||
|
|
||||||
var range = new Range(row, 0, row + lines.length, 0);
|
var range = new Range(row, 0, row + lines.length, 0);
|
||||||
var delta = {
|
var delta = {
|
||||||
action: "insertLines",
|
action: "insertLines",
|
||||||
|
|
@ -335,7 +342,7 @@ var Document = function(text) {
|
||||||
lines: lines
|
lines: lines
|
||||||
};
|
};
|
||||||
this._emit("change", { data: delta });
|
this._emit("change", { data: delta });
|
||||||
return range.end;
|
return end || range.end;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ var Range = require("../range").Range;
|
||||||
var FoldLine = require("./fold_line").FoldLine;
|
var FoldLine = require("./fold_line").FoldLine;
|
||||||
var Fold = require("./fold").Fold;
|
var Fold = require("./fold").Fold;
|
||||||
var TokenIterator = require("../token_iterator").TokenIterator;
|
var TokenIterator = require("../token_iterator").TokenIterator;
|
||||||
var lang = require("../lib/lang");
|
|
||||||
function Folding() {
|
function Folding() {
|
||||||
/*
|
/*
|
||||||
* Looks up a fold at a given row/column. Possible values for side:
|
* Looks up a fold at a given row/column. Possible values for side:
|
||||||
|
|
@ -748,8 +748,7 @@ function Folding() {
|
||||||
} else {
|
} else {
|
||||||
var args = Array(len + 1);
|
var args = Array(len + 1);
|
||||||
args.unshift(firstRow, 1);
|
args.unshift(firstRow, 1);
|
||||||
|
this.foldWidgets.splice.apply(this.foldWidgets, args);
|
||||||
this.foldWidgets = lang.chunkLines(args, this.foldWidgets);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -147,24 +147,4 @@ exports.deferredCall = function(fcn) {
|
||||||
return deferred;
|
return deferred;
|
||||||
};
|
};
|
||||||
|
|
||||||
// because of Document, this is confusing as shit
|
|
||||||
exports.chunkLines = function(args, thingToSplice, thingtoApply, isDocument) {
|
|
||||||
if (thingtoApply === undefined)
|
|
||||||
thingtoApply = thingToSplice;
|
|
||||||
|
|
||||||
var step = 100000;
|
|
||||||
var l = Math.ceil(args.length / step);
|
|
||||||
for (var targs, i = 0; i < l; i++) {
|
|
||||||
targs = args.slice(i * step, step);
|
|
||||||
if (isDocument) {
|
|
||||||
thingtoApply.push.apply(thingtoApply, targs);
|
|
||||||
thingToSplice.splice.apply(thingToSplice, thingtoApply);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
thingToSplice.slice.apply(thingtoApply, targs);
|
|
||||||
}
|
|
||||||
|
|
||||||
return thingToSplice;
|
|
||||||
};
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
"no use strict";
|
"no use strict";
|
||||||
var lang = require("../lib/lang");
|
|
||||||
var console = {
|
var console = {
|
||||||
log: function(msg) {
|
log: function(msg) {
|
||||||
postMessage({type: "log", data: msg});
|
postMessage({type: "log", data: msg});
|
||||||
|
|
@ -123,7 +123,7 @@ var sender;
|
||||||
onmessage = function(e) {
|
onmessage = function(e) {
|
||||||
var msg = e.data;
|
var msg = e.data;
|
||||||
if (msg.command) {
|
if (msg.command) {
|
||||||
main[msg.command] = lang.chunkLines(msg.args, main[msg.command], main);
|
main[msg.command].apply(main, msg.args);
|
||||||
}
|
}
|
||||||
else if (msg.init) {
|
else if (msg.init) {
|
||||||
initBaseUrls(msg.tlns);
|
initBaseUrls(msg.tlns);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue