Toggle comment on line with leading whitespace does
This commit is contained in:
parent
a2d4b9a451
commit
2522cdd288
4 changed files with 73 additions and 14 deletions
|
|
@ -67,18 +67,29 @@ ace.Selection = function(doc) {
|
|||
var anchor = this.getSelectionAnchor();
|
||||
var lead = this.getSelectionLead();
|
||||
|
||||
this.setSelectionAnchor(anchor.row, anchor.column + columns);
|
||||
this.$moveSelection(function() {
|
||||
this.moveCursorTo(lead.row, lead.column + columns);
|
||||
});
|
||||
var isBackwards = this.$isBackwards();
|
||||
|
||||
if (!isBackwards || anchor.column !== 0)
|
||||
this.setSelectionAnchor(anchor.row, anchor.column + columns);
|
||||
|
||||
if (isBackwards || lead.column !== 0) {
|
||||
this.$moveSelection(function() {
|
||||
this.moveCursorTo(lead.row, lead.column + columns);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
this.$isBackwards = function() {
|
||||
var anchor = this.selectionAnchor || this.selectionLead;
|
||||
var lead = this.selectionLead;
|
||||
return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));
|
||||
};
|
||||
|
||||
this.getRange = function() {
|
||||
var anchor = this.selectionAnchor || this.selectionLead;
|
||||
var lead = this.selectionLead;
|
||||
|
||||
if (anchor.row > lead.row
|
||||
|| (anchor.row == lead.row && anchor.column > lead.column)) {
|
||||
if (this.$isBackwards()) {
|
||||
return ace.Range.fromPoints(lead, anchor);
|
||||
}
|
||||
else {
|
||||
|
|
|
|||
|
|
@ -9,11 +9,32 @@ ace.inherits(ace.mode.JavaScript, ace.mode.Text);
|
|||
(function() {
|
||||
|
||||
this.toggleCommentLines = function(state, doc, range) {
|
||||
var addedRows = doc.outdentRows(range, "//");
|
||||
if (addedRows == 0) {
|
||||
var addedRows = doc.indentRows(range, "//");
|
||||
};
|
||||
return addedRows;
|
||||
var outdent = true;
|
||||
var outentedRows = [];
|
||||
var re = /^(\s*)\/\//;
|
||||
|
||||
for (var i=range.start.row; i<= range.end.row; i++) {
|
||||
if (!re.test(doc.getLine(i))) {
|
||||
outdent = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (outdent) {
|
||||
var deleteRange = new ace.Range(0, 0, 0, 0);
|
||||
for (var i=range.start.row; i<= range.end.row; i++)
|
||||
{
|
||||
var line = doc.getLine(i).replace(re, "$1");
|
||||
deleteRange.start.row = i;
|
||||
deleteRange.end.row = i;
|
||||
deleteRange.end.column = line.length + 2;
|
||||
doc.replace(deleteRange, line);
|
||||
}
|
||||
return -2;
|
||||
}
|
||||
else {
|
||||
return doc.indentRows(range, "//");
|
||||
}
|
||||
};
|
||||
|
||||
this.getNextLineIndent = function(state, line, tab) {
|
||||
|
|
|
|||
|
|
@ -145,10 +145,29 @@ var TextEditTest = TestCase("TextEditTest",
|
|||
editor.toggleCommentLines();
|
||||
|
||||
assertEquals([" abc", "cde"].join("\n"), doc.toString());
|
||||
assertRange(0, 0, 1, 1, editor.getSelectionRange());
|
||||
},
|
||||
|
||||
var selection = editor.getSelectionRange();
|
||||
assertPosition(0, 0, selection.start);
|
||||
assertPosition(1, 1, selection.end);
|
||||
"test: comment lines - if the selection end is at the line start it should stay there": function() {
|
||||
//select down
|
||||
var doc = new ace.Document(["abc", "cde"].join("\n"), new ace.mode.JavaScript());
|
||||
var editor = new ace.Editor(new MockRenderer(), doc);
|
||||
|
||||
editor.moveCursorTo(0, 0);
|
||||
editor.getSelection().selectDown();
|
||||
|
||||
editor.toggleCommentLines();
|
||||
assertRange(0, 2, 1, 0, editor.getSelectionRange());
|
||||
|
||||
// select up
|
||||
var doc = new ace.Document(["abc", "cde"].join("\n"), new ace.mode.JavaScript());
|
||||
var editor = new ace.Editor(new MockRenderer(), doc);
|
||||
|
||||
editor.moveCursorTo(1, 0);
|
||||
editor.getSelection().selectUp();
|
||||
|
||||
editor.toggleCommentLines();
|
||||
assertRange(0, 2, 1, 0, editor.getSelectionRange());
|
||||
},
|
||||
|
||||
"test: move lines down should select moved lines" : function() {
|
||||
|
|
|
|||
|
|
@ -37,6 +37,14 @@ var JavaScriptTest = new TestCase("mode.JavaScriptTest", {
|
|||
assertEquals(["//// abc", "////cde", "//fg"].join("\n"), doc.toString());
|
||||
},
|
||||
|
||||
"test: toggle comment on a comment line with leading white space": function() {
|
||||
var doc = new ace.Document(["//cde", " //fg"]);
|
||||
|
||||
var range = new ace.Range(0, 3, 1, 1);
|
||||
var comment = this.mode.toggleCommentLines("start", doc, range);
|
||||
assertEquals(["cde", " fg"].join("\n"), doc.toString());
|
||||
},
|
||||
|
||||
"test: auto indent after opening brace" : function() {
|
||||
assertEquals(" ", this.mode.getNextLineIndent("start", "if () {", " "));
|
||||
},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue