add simple foldWidgets

This commit is contained in:
nightwing 2011-11-25 23:58:13 +04:00
commit 3412f89007
6 changed files with 89 additions and 3 deletions

View file

@ -45,6 +45,7 @@ var Gutter = function(parentEl) {
this.element = dom.createElement("div");
this.element.className = "ace_layer ace_gutter-layer";
parentEl.appendChild(this.element);
this.setShowFoldWidgets(this.$showFoldWidgets);
this.$breakpoints = [];
this.$annotations = [];
@ -105,6 +106,7 @@ var Gutter = function(parentEl) {
var lastRow = config.lastRow;
var fold = this.session.getNextFoldLine(i);
var foldStart = fold ? fold.start.row : Infinity;
var foldWidgets = this.$showFoldWidgets && this.session.foldWidgets;
while (true) {
if(i > foldStart) {
@ -123,6 +125,18 @@ var Gutter = function(parentEl) {
"' title='", annotation.text.join("\n"),
"' style='height:", config.lineHeight, "px;'>", (i+1));
if (foldWidgets) {
var c = foldWidgets[i];
if (c == null)
c = foldWidgets[i] = this.session.getFoldWidget(i);
if(c)
html.push(
"<span class='ace_fold-widget ", c,
c == "start" && i == foldStart && i < fold.end.row ? " closed" : " open",
"'></span>"
);
}
var wrappedRowLength = this.session.getRowLength(i) - 1;
while (wrappedRowLength--) {
html.push("</div><div class='ace_gutter-cell' style='height:", config.lineHeight, "px'>\xA6");
@ -136,6 +150,19 @@ var Gutter = function(parentEl) {
this.element.style.height = config.minHeight + "px";
};
this.$showFoldWidgets = true;
this.setShowFoldWidgets = function(show) {
if (show)
dom.addCssClass(this.element, "ace_folding-enabled");
else
dom.removeCssClass(this.element, "ace_folding-enabled");
this.$showFoldWidgets = show;
};
this.getShowFoldWidgets = function() {
return this.$showFoldWidgets;
};
}).call(Gutter.prototype);
exports.Gutter = Gutter;