Skip to content

Commit d9f05c9

Browse files
sobishtmarijnh
authored andcommitted
[closetag addon] Add an option to disable auto indenting
1 parent b3cdfee commit d9f05c9

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

addon/edit/closetag.js

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,14 @@
5353
function autoCloseGT(cm) {
5454
if (cm.getOption("disableInput")) return CodeMirror.Pass;
5555
var ranges = cm.listSelections(), replacements = [];
56+
var opt = cm.getOption("autoCloseTags");
5657
for (var i = 0; i < ranges.length; i++) {
5758
if (!ranges[i].empty()) return CodeMirror.Pass;
5859
var pos = ranges[i].head, tok = cm.getTokenAt(pos);
5960
var inner = CodeMirror.innerMode(cm.getMode(), tok.state), state = inner.state;
6061
if (inner.mode.name != "xml" || !state.tagName) return CodeMirror.Pass;
6162

62-
var opt = cm.getOption("autoCloseTags"), html = inner.mode.configuration == "html";
63+
var html = inner.mode.configuration == "html";
6364
var dontCloseTags = (typeof opt == "object" && opt.dontCloseTags) || (html && htmlDontClose);
6465
var indentTags = (typeof opt == "object" && opt.indentTags) || (html && htmlIndent);
6566

@@ -81,13 +82,14 @@
8182
newPos: indent ? CodeMirror.Pos(pos.line + 1, 0) : CodeMirror.Pos(pos.line, pos.ch + 1)};
8283
}
8384

85+
var dontIndentOnAutoClose = (typeof opt == "object" && opt.dontIndentOnAutoClose);
8486
for (var i = ranges.length - 1; i >= 0; i--) {
8587
var info = replacements[i];
8688
cm.replaceRange(info.text, ranges[i].head, ranges[i].anchor, "+insert");
8789
var sel = cm.listSelections().slice(0);
8890
sel[i] = {head: info.newPos, anchor: info.newPos};
8991
cm.setSelections(sel);
90-
if (info.indent) {
92+
if (!dontIndentOnAutoClose && info.indent) {
9193
cm.indentLine(info.newPos.line, null, true);
9294
cm.indentLine(info.newPos.line + 1, null, true);
9395
}
@@ -97,6 +99,8 @@
9799
function autoCloseCurrent(cm, typingSlash) {
98100
var ranges = cm.listSelections(), replacements = [];
99101
var head = typingSlash ? "/" : "</";
102+
var opt = cm.getOption("autoCloseTags");
103+
var dontIndentOnAutoClose = (typeof opt == "object" && opt.dontIndentOnSlash);
100104
for (var i = 0; i < ranges.length; i++) {
101105
if (!ranges[i].empty()) return CodeMirror.Pass;
102106
var pos = ranges[i].head, tok = cm.getTokenAt(pos);
@@ -127,9 +131,11 @@
127131
}
128132
cm.replaceSelections(replacements);
129133
ranges = cm.listSelections();
130-
for (var i = 0; i < ranges.length; i++)
131-
if (i == ranges.length - 1 || ranges[i].head.line < ranges[i + 1].head.line)
132-
cm.indentLine(ranges[i].head.line);
134+
if (!dontIndentOnAutoClose) {
135+
for (var i = 0; i < ranges.length; i++)
136+
if (i == ranges.length - 1 || ranges[i].head.line < ranges[i + 1].head.line)
137+
cm.indentLine(ranges[i].head.line);
138+
}
133139
}
134140

135141
function autoCloseSlash(cm) {

src/edit/options.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ export function defineOptions(CodeMirror) {
5252
clearCaches(cm)
5353
regChange(cm)
5454
}, true)
55+
5556
option("lineSeparator", null, (cm, val) => {
5657
cm.doc.lineSep = val
5758
if (!val) return

0 commit comments

Comments
 (0)