diff --git a/lib/ace/document.js b/lib/ace/document.js
index 1abb95a2..99b7bb2d 100644
--- a/lib/ace/document.js
+++ b/lib/ace/document.js
@@ -302,9 +302,11 @@ var Document = function(textOrLines) {
row = 0;
} else if (row >= length) {
row = length - 1;
- column = undefined
- }
+ column = undefined;
+ }
var line = this.getLine(row);
+ if (column == undefined)
+ column = line.length;
column = Math.min(Math.max(column, 0), line.length);
return {row: row, column: column};
};
@@ -421,31 +423,33 @@ var Document = function(textOrLines) {
**/
this.remove = function(range) {
var start = this.clippedPos(range.start.row, range.start.column);
+ var end = this.clippedPos(range.end.row, range.end.column);
this.applyDelta({
action: "remove",
start: start,
- end: this.clippedPos(range.end.row, range.end.column),
- lines: this.getLinesForRange(range),
+ end: end,
+ lines: this.getLinesForRange({start: start, end: end}),
});
return this.clonePos(start);
};
/**
- * Removes the specified columns from the `row`. This method also triggers the `"change"` event.
- * @param {Number} row The row to remove from
- * @param {Number} startColumn The column to start removing at
- * @param {Number} endColumn The column to stop removing at
- * @returns {Object} Returns an object containing `startRow` and `startColumn`, indicating the new row and column values.
If `startColumn` is equal to `endColumn`, this function returns nothing.
- *
- **/
+ * Removes the specified columns from the `row`. This method also triggers a `"change"` event.
+ * @param {Number} row The row to remove from
+ * @param {Number} startColumn The column to start removing at
+ * @param {Number} endColumn The column to stop removing at
+ * @returns {Object} Returns an object containing `startRow` and `startColumn`, indicating the new row and column values.
If `startColumn` is equal to `endColumn`, this function returns nothing.
+ *
+ **/
this.removeInLine = function(row, startColumn, endColumn) {
- var start = this.clippedPos(row, startColumn);
+ var start = this.clippedPos(row, startColumn);
+ var end = this.clippedPos(row, endColumn);
this.applyDelta({
action: "remove",
start: start,
- end: this.clippedPos(row, endColumn),
- lines: this.getLinesForRange(range),
+ end: end,
+ lines: this.getLinesForRange({start: start, end: end}),
}, true);
return this.clonePos(start);
@@ -568,7 +572,7 @@ var Document = function(textOrLines) {
: !Range.comparePoints(delta.start, delta.end))
return;
- if (isInsert && delta.lines.length > 0xFFFF)
+ if (isInsert && delta.lines.length > 0xF000)
this.$splitAndapplyLargeDelta(delta);
// Apply.
@@ -579,22 +583,23 @@ var Document = function(textOrLines) {
this.$splitAndapplyLargeDelta = function(delta) {
// Split large insert deltas. This is necessary because:
// 1. We need to support splicing delta lines into the document via $lines.splice.apply(...)
- // 2. fn.apply() doesn't work for a large number of params. The mallest threshold is on safari 0xFFFF.
+ // 2. fn.apply() doesn't work for a large number of params. The smallest threshold is on safari 0xFFFF.
+ // we use 0xF000 to leave some space for actual stack
//
// To Do: Ideally we'd be consistent and also split 'delete' deltas. We don't do this now, because delete
// delta handling is too slow. If we make delete delta handling faster we can split all large deltas
// as shown in https://gist.github.com/aldendaniels/8367109#file-document-snippet-js
// If we do this, update validateDelta() to limit the number of lines in a delete delta.
- while (delta.lines.length > 0xFFFF) {
+ while (delta.lines.length > 0xF000) {
// Get split deltas.
- var lines = delta.lines.splice(0, 0xFFFF);
+ var lines = delta.lines.splice(0, 0xF000);
lines.push("");
var start = delta.start;
this.applyDelta({
action: delta.action,
lines: lines,
- start: this.pos(start.row, start.column),
- end: this.pos(start.row += 0xFFFF, start.column = 0) // Updates remaining delta.
+ start: this.pos(start.row, start.column),
+ end: this.pos(start.row += 0xF000, start.column = 0) // Updates remaining delta.
}, true);
}
};
diff --git a/lib/ace/placeholder.js b/lib/ace/placeholder.js
index 1d345a24..d7a2d6e9 100644
--- a/lib/ace/placeholder.js
+++ b/lib/ace/placeholder.js
@@ -150,7 +150,7 @@ var PlaceHolder = function(session, length, pos, others, mainClass, othersClass)
**/
this.onUpdate = function(event) {
var delta = event.data;
- var range = delta.range;
+ var range = delta;
if(range.start.row !== range.end.row) return;
if(range.start.row !== this.pos.row) return;
if (this.$updating) return;