Path: blob/master/web-gui/buildyourownbotnet/assets/js/codemirror/addon/fold/foldcode.js
1293 views
(function() {1"use strict";23function doFold(cm, pos, options, force) {4var finder = options && (options.call ? options : options.rangeFinder);5if (!finder) finder = CodeMirror.fold.auto;6if (typeof pos == "number") pos = CodeMirror.Pos(pos, 0);7var minSize = options && options.minFoldSize || 0;89function getRange(allowFolded) {10var range = finder(cm, pos);11if (!range || range.to.line - range.from.line < minSize) return null;12var marks = cm.findMarksAt(range.from);13for (var i = 0; i < marks.length; ++i) {14if (marks[i].__isFold && force !== "fold") {15if (!allowFolded) return null;16range.cleared = true;17marks[i].clear();18}19}20return range;21}2223var range = getRange(true);24if (options && options.scanUp) while (!range && pos.line > cm.firstLine()) {25pos = CodeMirror.Pos(pos.line - 1, 0);26range = getRange(false);27}28if (!range || range.cleared || force === "unfold") return;2930var myWidget = makeWidget(options);31CodeMirror.on(myWidget, "mousedown", function() { myRange.clear(); });32var myRange = cm.markText(range.from, range.to, {33replacedWith: myWidget,34clearOnEnter: true,35__isFold: true36});37myRange.on("clear", function(from, to) {38CodeMirror.signal(cm, "unfold", cm, from, to);39});40CodeMirror.signal(cm, "fold", cm, range.from, range.to);41}4243function makeWidget(options) {44var widget = (options && options.widget) || "\u2194";45if (typeof widget == "string") {46var text = document.createTextNode(widget);47widget = document.createElement("span");48widget.appendChild(text);49widget.className = "CodeMirror-foldmarker";50}51return widget;52}5354// Clumsy backwards-compatible interface55CodeMirror.newFoldFunction = function(rangeFinder, widget) {56return function(cm, pos) { doFold(cm, pos, {rangeFinder: rangeFinder, widget: widget}); };57};5859// New-style interface60CodeMirror.defineExtension("foldCode", function(pos, options, force) {61doFold(this, pos, options, force);62});6364CodeMirror.commands.fold = function(cm) {65cm.foldCode(cm.getCursor());66};6768CodeMirror.registerHelper("fold", "combine", function() {69var funcs = Array.prototype.slice.call(arguments, 0);70return function(cm, start) {71for (var i = 0; i < funcs.length; ++i) {72var found = funcs[i](cm, start);73if (found) return found;74}75};76});7778CodeMirror.registerHelper("fold", "auto", function(cm, start) {79var helpers = cm.getHelpers(start, "fold");80for (var i = 0; i < helpers.length; i++) {81var cur = helpers[i](cm, start);82if (cur) return cur;83}84});85})();868788