diff --git a/lib/ace/layer/gutter.js b/lib/ace/layer/gutter.js index 503cc93a..2a8ea96e 100644 --- a/lib/ace/layer/gutter.js +++ b/lib/ace/layer/gutter.js @@ -129,7 +129,8 @@ var Gutter = function(parentEl) { if (foldWidgets) { var c = foldWidgets[i]; - if (!c) + // check if cached value is invalidated and we need to recompute + if (c == null) c = foldWidgets[i] = this.session.getFoldWidget(i); if (c) html.push( diff --git a/lib/ace/mode/folding/fold_mode.js b/lib/ace/mode/folding/fold_mode.js index 1f941c00..d231a35f 100644 --- a/lib/ace/mode/folding/fold_mode.js +++ b/lib/ace/mode/folding/fold_mode.js @@ -48,6 +48,7 @@ var FoldMode = exports.FoldMode = function() {}; this.foldingStartMarker = null; this.foldingStopMarker = null; + // must return "" if there's no fold, to enable caching this.getFoldWidget = function(session, row) { if (this.foldingStartMarker) { if (this.foldingStopMarker) diff --git a/lib/ace/mode/folding/xml.js b/lib/ace/mode/folding/xml.js index 06aa3167..0e5802a5 100644 --- a/lib/ace/mode/folding/xml.js +++ b/lib/ace/mode/folding/xml.js @@ -66,13 +66,13 @@ oop.inherits(FoldMode, BaseFoldMode); var fold = tags[0]; if (!fold || this.voidElements[fold]) - return; + return ""; if (fold.charAt(0) == "/") return "end"; if (tags.indexOf("/" + fold) !== -1) - return; + return ""; return "start"; };