toggleCommentLines and indentRows now take row
numbers instead of ranges as arguments
This commit is contained in:
parent
bfa4748b1b
commit
aa594119b7
13 changed files with 64 additions and 47 deletions
|
|
@ -622,12 +622,12 @@ var Document = function(text, mode) {
|
|||
return end;
|
||||
};
|
||||
|
||||
this.indentRows = function(range, indentString) {
|
||||
this.indentRows = function(startRow, endRow, indentString) {
|
||||
indentString = indentString.replace("\t", this.getTabString());
|
||||
for (var row=range.start.row; row<=range.end.row; row++) {
|
||||
for (var row=startRow; row<=endRow; row++) {
|
||||
this.$insert({row: row, column:0}, indentString);
|
||||
}
|
||||
this.fireChangeEvent(range.start.row, range.end.row);
|
||||
this.fireChangeEvent(startRow, endRow);
|
||||
return indentString.length;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -469,9 +469,7 @@ var Editor =function(renderer, doc) {
|
|||
outdent -= 1;
|
||||
_self.doc.replace(new Range(row, 0, row, line.length), line.substr(i));
|
||||
}
|
||||
end.column += _self.doc.indentRows(
|
||||
new Range(cursor.row + 1, 0, end.row, end.column),
|
||||
lineIndent);
|
||||
end.column += _self.doc.indentRows(cursor.row + 1, end.row, lineIndent);
|
||||
} else {
|
||||
if (shouldOutdent) {
|
||||
end.column += _self.mode.autoOutdent(lineState, _self.doc, cursor.row);
|
||||
|
|
@ -606,9 +604,9 @@ var Editor =function(renderer, doc) {
|
|||
var doc = this.doc,
|
||||
range = this.getSelectionRange();
|
||||
|
||||
if (range.start.row < range.end.row ||
|
||||
range.start.column < range.end.column) {
|
||||
var count = doc.indentRows(this.getSelectionRange(), "\t");
|
||||
if (range.start.row < range.end.row || range.start.column < range.end.column) {
|
||||
var rows = this.$getSelectedRows();
|
||||
var count = doc.indentRows(rows.first, rows.last, "\t");
|
||||
|
||||
this.selection.shiftSelection(count);
|
||||
} else {
|
||||
|
|
@ -642,12 +640,10 @@ var Editor =function(renderer, doc) {
|
|||
if (this.$readOnly)
|
||||
return;
|
||||
|
||||
var rows = this.$getSelectedRows();
|
||||
|
||||
var range = new Range(rows.first, 0, rows.last, 0);
|
||||
var _self = this;
|
||||
this.bgTokenizer.getState(this.getCursorPosition().row, function(state) {
|
||||
var addedColumns = _self.mode.toggleCommentLines(state, _self.doc, range);
|
||||
var rows = _self.$getSelectedRows()
|
||||
var addedColumns = _self.mode.toggleCommentLines(state, _self.doc, rows.first, rows.last);
|
||||
_self.selection.shiftSelection(addedColumns);
|
||||
});
|
||||
};
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ oop.inherits(Mode, TextMode);
|
|||
|
||||
(function() {
|
||||
|
||||
this.toggleCommentLines = function(state, doc, range) {
|
||||
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
||||
return this.$delegate("toggleCommentLines", arguments, function() {
|
||||
return 0;
|
||||
});
|
||||
|
|
|
|||
|
|
@ -52,12 +52,12 @@ oop.inherits(Mode, TextMode);
|
|||
|
||||
(function() {
|
||||
|
||||
this.toggleCommentLines = function(state, doc, range) {
|
||||
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
||||
var outdent = true;
|
||||
var outentedRows = [];
|
||||
var re = /^(\s*)\/\//;
|
||||
|
||||
for (var i=range.start.row; i<= range.end.row; i++) {
|
||||
for (var i=startRow; i<= endRow; i++) {
|
||||
if (!re.test(doc.getLine(i))) {
|
||||
outdent = false;
|
||||
break;
|
||||
|
|
@ -66,7 +66,7 @@ oop.inherits(Mode, TextMode);
|
|||
|
||||
if (outdent) {
|
||||
var deleteRange = new Range(0, 0, 0, 0);
|
||||
for (var i=range.start.row; i<= range.end.row; i++)
|
||||
for (var i=startRow; i<= endRow; i++)
|
||||
{
|
||||
var line = doc.getLine(i).replace(re, "$1");
|
||||
deleteRange.start.row = i;
|
||||
|
|
@ -77,7 +77,7 @@ oop.inherits(Mode, TextMode);
|
|||
return -2;
|
||||
}
|
||||
else {
|
||||
return doc.indentRows(range, "//");
|
||||
return doc.indentRows(startRow, endRow, "//");
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -52,12 +52,12 @@ oop.inherits(Mode, TextMode);
|
|||
|
||||
(function() {
|
||||
|
||||
this.toggleCommentLines = function(state, doc, range) {
|
||||
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
||||
var outdent = true;
|
||||
var outentedRows = [];
|
||||
var re = /^(\s*)#/;
|
||||
|
||||
for (var i=range.start.row; i<= range.end.row; i++) {
|
||||
for (var i=startRow; i<= endRow; i++) {
|
||||
if (!re.test(doc.getLine(i))) {
|
||||
outdent = false;
|
||||
break;
|
||||
|
|
@ -66,7 +66,7 @@ oop.inherits(Mode, TextMode);
|
|||
|
||||
if (outdent) {
|
||||
var deleteRange = new Range(0, 0, 0, 0);
|
||||
for (var i=range.start.row; i<= range.end.row; i++)
|
||||
for (var i=startRow; i<= endRow; i++)
|
||||
{
|
||||
var line = doc.getLine(i).replace(re, "$1");
|
||||
deleteRange.start.row = i;
|
||||
|
|
@ -77,7 +77,7 @@ oop.inherits(Mode, TextMode);
|
|||
return -2;
|
||||
}
|
||||
else {
|
||||
return doc.indentRows(range, "#");
|
||||
return doc.indentRows(startRow, endRow, "#");
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ var Mode = function() {
|
|||
return this.$tokenizer;
|
||||
};
|
||||
|
||||
this.toggleCommentLines = function(state, doc, range) {
|
||||
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
||||
return 0;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@ var Range = function(startRow, startColumn, endRow, endColumn) {
|
|||
return Range.fromPoints(this.start, this.end);
|
||||
};
|
||||
|
||||
this.collapseLines = function() {
|
||||
this.collapseRows = function() {
|
||||
if (this.end.column == 0)
|
||||
return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)
|
||||
else
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@
|
|||
define(function(require, exports, module) {
|
||||
|
||||
var Document = require("ace/document").Document;
|
||||
var Range = require("ace/range").Range;
|
||||
var Css = require("ace/mode/css").Mode;
|
||||
|
||||
var CssTest = new TestCase("mode.CssTest", {
|
||||
|
|
@ -50,8 +49,7 @@ var CssTest = new TestCase("mode.CssTest", {
|
|||
"test: toggle comment lines should not do anything" : function() {
|
||||
var doc = new Document([" abc", "cde", "fg"].join("\n"));
|
||||
|
||||
var range = new Range(0, 3, 1, 1);
|
||||
var comment = this.mode.toggleCommentLines("start", doc, range);
|
||||
var comment = this.mode.toggleCommentLines("start", doc, 0, 1);
|
||||
assertEquals([" abc", "cde", "fg"].join("\n"), doc.toString());
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ var HtmlTest = new TestCase("mode.HtmlTest", {
|
|||
var doc = new Document([" abc", "cde", "fg"]);
|
||||
|
||||
var range = new Range(0, 3, 1, 1);
|
||||
var comment = this.mode.toggleCommentLines("start", doc, range);
|
||||
var comment = this.mode.toggleCommentLines("start", doc, 0, 1);
|
||||
assertEquals([" abc", "cde", "fg"].join("\n"), doc.toString());
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@
|
|||
define(function(require, exports, module) {
|
||||
|
||||
var Document = require("ace/document").Document;
|
||||
var Range = require("ace/range").Range;
|
||||
var Tokenizer = require("ace/tokenizer").Tokenizer;
|
||||
var JavaScript = require("ace/mode/javascript").Mode;
|
||||
|
||||
|
|
@ -60,32 +59,36 @@ var JavaScriptTest = new TestCase("mode.JavaScriptTest", {
|
|||
"test: toggle comment lines should prepend '//' to each line" : function() {
|
||||
var doc = new Document([" abc", "cde", "fg"]);
|
||||
|
||||
var range = new Range(0, 3, 1, 1);
|
||||
var comment = this.mode.toggleCommentLines("start", doc, range);
|
||||
var comment = this.mode.toggleCommentLines("start", doc, 0, 1);
|
||||
assertEquals(["// abc", "//cde", "fg"].join("\n"), doc.toString());
|
||||
},
|
||||
|
||||
"test: toggle comment on commented lines should remove leading '//' chars" : function() {
|
||||
var doc = new Document(["// abc", "//cde", "fg"]);
|
||||
|
||||
var range = new Range(0, 3, 1, 1);
|
||||
var comment = this.mode.toggleCommentLines("start", doc, range);
|
||||
var comment = this.mode.toggleCommentLines("start", doc, 0, 1);
|
||||
assertEquals([" abc", "cde", "fg"].join("\n"), doc.toString());
|
||||
},
|
||||
|
||||
"test: toggle comment lines twice should return the original text" : function() {
|
||||
var doc = new Document([" abc", "cde", "fg"]);
|
||||
|
||||
this.mode.toggleCommentLines("start", doc, 0, 2);
|
||||
this.mode.toggleCommentLines("start", doc, 0, 2);
|
||||
assertEquals([" abc", "cde", "fg"].join("\n"), doc.toString());
|
||||
},
|
||||
|
||||
"test: toggle comment on multiple lines with one commented line prepend '//' to each line" : function() {
|
||||
var doc = new Document(["// abc", "//cde", "fg"]);
|
||||
|
||||
var range = new Range(0, 3, 2, 1);
|
||||
var comment = this.mode.toggleCommentLines("start", doc, range);
|
||||
var comment = this.mode.toggleCommentLines("start", doc, 0, 2);
|
||||
assertEquals(["//// abc", "////cde", "//fg"].join("\n"), doc.toString());
|
||||
},
|
||||
|
||||
"test: toggle comment on a comment line with leading white space": function() {
|
||||
var doc = new Document(["//cde", " //fg"]);
|
||||
|
||||
var range = new Range(0, 3, 1, 1);
|
||||
var comment = this.mode.toggleCommentLines("start", doc, range);
|
||||
var comment = this.mode.toggleCommentLines("start", doc, 0, 1);
|
||||
assertEquals(["cde", " fg"].join("\n"), doc.toString());
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@
|
|||
define(function(require, exports, module) {
|
||||
|
||||
var Document = require("ace/document").Document;
|
||||
var Range = require("ace/range").Range;
|
||||
var Text = require("ace/mode/text").Mode;
|
||||
|
||||
var TextTest = new TestCase("mode.TextTest", {
|
||||
|
|
@ -50,8 +49,7 @@ var TextTest = new TestCase("mode.TextTest", {
|
|||
"test: toggle comment lines should not do anything" : function() {
|
||||
var doc = new Document([" abc", "cde", "fg"]);
|
||||
|
||||
var range = new Range(0, 3, 1, 1);
|
||||
var comment = this.mode.toggleCommentLines("start", doc, range);
|
||||
var comment = this.mode.toggleCommentLines("start", doc, 0, 1);
|
||||
assertEquals([" abc", "cde", "fg"].join("\n"), doc.toString());
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@
|
|||
define(function(require, exports, module) {
|
||||
|
||||
var Document = require("ace/document").Document;
|
||||
var Range = require("ace/range").Range;
|
||||
var Tokenizer = require("ace/tokenizer").Tokenizer;
|
||||
var Xml = require("ace/mode/xml").Mode;
|
||||
|
||||
|
|
@ -60,8 +59,7 @@ var XmlTest = new TestCase("mode.XmlTest", {
|
|||
"test: toggle comment lines should not do anything" : function() {
|
||||
var doc = new Document([" abc", "cde", "fg"]);
|
||||
|
||||
var range = new Range(0, 3, 1, 1);
|
||||
var comment = this.mode.toggleCommentLines("start", doc, range);
|
||||
var comment = this.mode.toggleCommentLines("start", doc, 0, 1);
|
||||
assertEquals([" abc", "cde", "fg"].join("\n"), doc.toString());
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -114,8 +114,7 @@ var Test = {
|
|||
|
||||
editor.indent();
|
||||
|
||||
assert.equal(["a12345", " b12345", " c12345"].join("\n"),
|
||||
doc.toString());
|
||||
assert.equal(["a12345", " b12345", " c12345"].join("\n"), doc.toString());
|
||||
|
||||
assert.position(editor.getCursorPosition(), 2, 7);
|
||||
|
||||
|
|
@ -124,13 +123,24 @@ var Test = {
|
|||
assert.position(range.end, 2, 7);
|
||||
},
|
||||
|
||||
"test: indent selected lines" : function() {
|
||||
var doc = new Document(["a12345", "b12345", "c12345"].join("\n"));
|
||||
var editor = new Editor(new MockRenderer(), doc);
|
||||
|
||||
editor.moveCursorTo(1, 0);
|
||||
editor.getSelection().selectDown();
|
||||
|
||||
editor.indent();
|
||||
assert.equal(["a12345", " b12345", "c12345"].join("\n"), doc.toString());
|
||||
},
|
||||
|
||||
"test: outdent block" : function() {
|
||||
var doc = new Document([" a12345", " b12345", " c12345"].join("\n"));
|
||||
var editor = new Editor(new MockRenderer(), doc);
|
||||
|
||||
editor.moveCursorTo(0, 5);
|
||||
editor.getSelection().selectDown();
|
||||
editor.getSelection().selectDown();
|
||||
editor.getSelection().selectDown();
|
||||
|
||||
editor.blockOutdent();
|
||||
assert.equal(doc.toString(), [" a12345", "b12345", " c12345"].join("\n"));
|
||||
|
|
@ -166,7 +176,6 @@ var Test = {
|
|||
|
||||
editor.moveCursorTo(0, 2);
|
||||
editor.getSelection().selectDown();
|
||||
|
||||
editor.toggleCommentLines();
|
||||
|
||||
assert.equal(["// abc", "//cde"].join("\n"), doc.toString());
|
||||
|
|
@ -190,6 +199,21 @@ var Test = {
|
|||
assert.equal([" abc", "cde"].join("\n"), doc.toString());
|
||||
assert.range(editor.getSelectionRange(), 0, 0, 1, 1);
|
||||
},
|
||||
|
||||
"test: toggle comment lines twice should return the original text" : function() {
|
||||
var doc = new Document([" abc", "cde", "fg"], new JavaScriptMode());
|
||||
var editor = new Editor(new MockRenderer(), doc);
|
||||
|
||||
editor.moveCursorTo(0, 0);
|
||||
editor.getSelection().selectDown();
|
||||
editor.getSelection().selectDown();
|
||||
|
||||
editor.toggleCommentLines();
|
||||
editor.toggleCommentLines();
|
||||
|
||||
assert.equal([" abc", "cde", "fg"].join("\n"), doc.toString());
|
||||
},
|
||||
|
||||
|
||||
"test: comment lines - if the selection end is at the line start it should stay there": function() {
|
||||
//select down
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue