28 lines
1.1 KiB
JavaScript
28 lines
1.1 KiB
JavaScript
CodeMirror.registerHelper("fold", "indent", function(cm, start) {
|
|
var lastLine = cm.lastLine(),
|
|
tabSize = cm.getOption("tabSize"),
|
|
firstLine = cm.getLine(start.line);
|
|
if (!tabSize || !firstLine) return;
|
|
var myIndent = CodeMirror.countColumn(firstLine, null, tabSize);
|
|
|
|
function foldEnded(curColumn, prevColumn) {
|
|
return curColumn < myIndent ||
|
|
(curColumn == myIndent && prevColumn >= myIndent) ||
|
|
(curColumn > myIndent && i == lastLine);
|
|
}
|
|
|
|
for (var i = start.line + 1; i <= lastLine; i++) {
|
|
var curColumn = CodeMirror.countColumn(cm.getLine(i), null, tabSize);
|
|
var prevColumn = CodeMirror.countColumn(cm.getLine(i-1), null, tabSize);
|
|
|
|
if (foldEnded(curColumn, prevColumn)) {
|
|
var lastFoldLineNumber = curColumn > myIndent && i == lastLine ? i : i-1;
|
|
var lastFoldLine = cm.getLine(lastFoldLineNumber);
|
|
return {from: CodeMirror.Pos(start.line, firstLine.length),
|
|
to: CodeMirror.Pos(lastFoldLineNumber, lastFoldLine.length)};
|
|
}
|
|
}
|
|
});
|
|
|
|
CodeMirror.indentRangeFinder = CodeMirror.fold.indent; // deprecated
|