|
53 | 53 | function autoCloseGT(cm) { |
54 | 54 | if (cm.getOption("disableInput")) return CodeMirror.Pass; |
55 | 55 | var ranges = cm.listSelections(), replacements = []; |
| 56 | + var opt = cm.getOption("autoCloseTags"); |
56 | 57 | for (var i = 0; i < ranges.length; i++) { |
57 | 58 | if (!ranges[i].empty()) return CodeMirror.Pass; |
58 | 59 | var pos = ranges[i].head, tok = cm.getTokenAt(pos); |
59 | 60 | var inner = CodeMirror.innerMode(cm.getMode(), tok.state), state = inner.state; |
60 | 61 | if (inner.mode.name != "xml" || !state.tagName) return CodeMirror.Pass; |
61 | 62 |
|
62 | | - var opt = cm.getOption("autoCloseTags"), html = inner.mode.configuration == "html"; |
| 63 | + var html = inner.mode.configuration == "html"; |
63 | 64 | var dontCloseTags = (typeof opt == "object" && opt.dontCloseTags) || (html && htmlDontClose); |
64 | 65 | var indentTags = (typeof opt == "object" && opt.indentTags) || (html && htmlIndent); |
65 | 66 |
|
|
81 | 82 | newPos: indent ? CodeMirror.Pos(pos.line + 1, 0) : CodeMirror.Pos(pos.line, pos.ch + 1)}; |
82 | 83 | } |
83 | 84 |
|
| 85 | + var dontIndentOnAutoClose = (typeof opt == "object" && opt.dontIndentOnAutoClose); |
84 | 86 | for (var i = ranges.length - 1; i >= 0; i--) { |
85 | 87 | var info = replacements[i]; |
86 | 88 | cm.replaceRange(info.text, ranges[i].head, ranges[i].anchor, "+insert"); |
87 | 89 | var sel = cm.listSelections().slice(0); |
88 | 90 | sel[i] = {head: info.newPos, anchor: info.newPos}; |
89 | 91 | cm.setSelections(sel); |
90 | | - if (info.indent) { |
| 92 | + if (!dontIndentOnAutoClose && info.indent) { |
91 | 93 | cm.indentLine(info.newPos.line, null, true); |
92 | 94 | cm.indentLine(info.newPos.line + 1, null, true); |
93 | 95 | } |
|
97 | 99 | function autoCloseCurrent(cm, typingSlash) { |
98 | 100 | var ranges = cm.listSelections(), replacements = []; |
99 | 101 | var head = typingSlash ? "/" : "</"; |
| 102 | + var opt = cm.getOption("autoCloseTags"); |
| 103 | + var dontIndentOnAutoClose = (typeof opt == "object" && opt.dontIndentOnSlash); |
100 | 104 | for (var i = 0; i < ranges.length; i++) { |
101 | 105 | if (!ranges[i].empty()) return CodeMirror.Pass; |
102 | 106 | var pos = ranges[i].head, tok = cm.getTokenAt(pos); |
|
127 | 131 | } |
128 | 132 | cm.replaceSelections(replacements); |
129 | 133 | 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 | + } |
133 | 139 | } |
134 | 140 |
|
135 | 141 | function autoCloseSlash(cm) { |
|
0 commit comments