MCPcopy Create free account
hub / github.com/TruthHun/BookStack / doFold

Function doFold

static/editor.md/lib/codemirror/addon/fold/foldcode.js:14–59  ·  view source on GitHub ↗
(cm, pos, options, force)

Source from the content-addressed store, hash-verified

12 "use strict";
13
14 function doFold(cm, pos, options, force) {
15 if (options && options.call) {
16 var finder = options;
17 options = null;
18 } else {
19 var finder = getOption(cm, options, "rangeFinder");
20 }
21 if (typeof pos == "number") pos = CodeMirror.Pos(pos, 0);
22 var minSize = getOption(cm, options, "minFoldSize");
23
24 function getRange(allowFolded) {
25 var range = finder(cm, pos);
26 if (!range || range.to.line - range.from.line < minSize) return null;
27 var marks = cm.findMarksAt(range.from);
28 for (var i = 0; i < marks.length; ++i) {
29 if (marks[i].__isFold && force !== "fold") {
30 if (!allowFolded) return null;
31 range.cleared = true;
32 marks[i].clear();
33 }
34 }
35 return range;
36 }
37
38 var range = getRange(true);
39 if (getOption(cm, options, "scanUp")) while (!range && pos.line > cm.firstLine()) {
40 pos = CodeMirror.Pos(pos.line - 1, 0);
41 range = getRange(false);
42 }
43 if (!range || range.cleared || force === "unfold") return;
44
45 var myWidget = makeWidget(cm, options);
46 CodeMirror.on(myWidget, "mousedown", function(e) {
47 myRange.clear();
48 CodeMirror.e_preventDefault(e);
49 });
50 var myRange = cm.markText(range.from, range.to, {
51 replacedWith: myWidget,
52 clearOnEnter: true,
53 __isFold: true
54 });
55 myRange.on("clear", function(from, to) {
56 CodeMirror.signal(cm, "unfold", cm, from, to);
57 });
58 CodeMirror.signal(cm, "fold", cm, range.from, range.to);
59 }
60
61 function makeWidget(cm, options) {
62 var widget = getOption(cm, options, "widget");

Callers 1

foldcode.jsFile · 0.85

Calls 3

getOptionFunction · 0.85
getRangeFunction · 0.85
makeWidgetFunction · 0.85

Tested by

no test coverage detected