add simple foldWidgets
This commit is contained in:
parent
8c1d415bdd
commit
3412f89007
6 changed files with 89 additions and 3 deletions
|
|
@ -185,5 +185,41 @@
|
|||
}
|
||||
|
||||
.ace_dragging .ace_content {
|
||||
cursor: move;
|
||||
cursor: move;
|
||||
}
|
||||
|
||||
.ace_folding-enabled .ace_gutter-cell {
|
||||
padding-right: 9px!important;
|
||||
}
|
||||
|
||||
.ace_fold-widget {
|
||||
margin-right: -9px;
|
||||
display: inline-block;
|
||||
height: 9px;
|
||||
width: 9px;
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAAZdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41Ljg3O4BdAAAAbUlEQVQoU2NgoBqIiIibCcRn0tPzbufmlt4uKam+XVXVdLuhoeN2UVHlGSCeCbYsMTHjdlxcSjOyzSB+a2vvbbhYXV2rGsgkoIQvSBBEg0wCiaM4GSQAsg5kAsg6DAUw1SAJkJtwKkBWSFaoAADKrzXSD2pEpgAAAABJRU5ErkJggg==") no-repeat;
|
||||
background-origin: content-box;
|
||||
padding: 1px 0;
|
||||
}
|
||||
|
||||
.ace_fold-widget.end{
|
||||
transform: scaleY(-1);
|
||||
-moz-transform: scaleY(-1);
|
||||
-webkit-transform: scaleY(-1);
|
||||
opacity:0.8;
|
||||
}
|
||||
|
||||
.ace_fold-widget.closed{
|
||||
-moz-transform: none;
|
||||
-webkit-transform: none;
|
||||
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJBAMAAAASvxsjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC1QTFRF////fn6FXl5kXl5kWFhecnJ5WFhecnJ5YWFoZ2dubW11dHR7enqCgICIhYWNjO3uwQAAAA90Uk5TACZNg5mZzMzb29vb29vbP7t0EwAAACtJREFUCFtjYAhgAIE6ARB5+SKIPKAD4mxg3ggkF2iB2JMngsQzwGocgBgA2zEHmb0961QAAAAASUVORK5CYII=");
|
||||
}
|
||||
|
||||
.ace_fold-widget:hover {
|
||||
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAAZdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41Ljg3O4BdAAAASklEQVQoU2NgoBqQWHFlJhD/lzny/TY6BomD5MGWgSQPvPj5H4bXP4GwQeJw1wA5augKoaaqoTgZWSFWBTDVMIUgGq+nCSrApRsAuCZYT+KbmI0AAAAASUVORK5CYII=");
|
||||
}
|
||||
|
||||
.ace_fold-widget.closed:hover {
|
||||
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJBAMAAAASvxsjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABVQTFRF////HMT3GKjUHMT3GKjUr+T5wOj5rFcpYAAAAAR0Uk5TACaZ2z7RZscAAAAkSURBVAhbY2BQYAABZwEQaWYIIk2TQRyzNBDHDMI2RKgBqQcAaNgD0/oixWYAAAAASUVORK5CYII=");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -515,6 +515,8 @@ var EditSession = function(text, mode) {
|
|||
this.tokenRe = mode.tokenRe;
|
||||
this.nonTokenRe = mode.nonTokenRe;
|
||||
|
||||
this.$setFolding(mode);
|
||||
|
||||
this._dispatchEvent("changeMode");
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -591,7 +591,15 @@ function Folding() {
|
|||
|
||||
this.addFold(placeholder, range);
|
||||
};
|
||||
|
||||
// structured folding
|
||||
this.$setFolding = function(mode) {
|
||||
};
|
||||
|
||||
this.onFoldWidgetClick = function(e) {
|
||||
};
|
||||
}
|
||||
|
||||
exports.Folding = Folding;
|
||||
|
||||
});
|
||||
|
|
@ -637,6 +637,19 @@ var Editor = function(renderer, session) {
|
|||
return this.$modeBehaviours;
|
||||
};
|
||||
|
||||
this.setShowFoldWidgets = function(show) {
|
||||
var gutter = this.renderer.$gutterLayer;
|
||||
if (gutter.getShowFoldWidgets() == show)
|
||||
return;
|
||||
|
||||
this.renderer.$gutterLayer.setShowFoldWidgets(show);
|
||||
this.$showFoldWidgets = show;
|
||||
this.renderer.updateFull();
|
||||
};
|
||||
this.getShowFoldWidgets = function() {
|
||||
return this.renderer.$gutterLayer.getShowFoldWidgets();
|
||||
};
|
||||
|
||||
this.remove = function(dir) {
|
||||
if (this.selection.isEmpty()){
|
||||
if(dir == "left")
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -264,11 +264,11 @@ var VirtualRenderer = function(container, theme) {
|
|||
};
|
||||
|
||||
this.$onGutterClick = function(e) {
|
||||
var pageX = event.getDocumentX(e);
|
||||
var pageY = event.getDocumentY(e);
|
||||
var row = this.screenToTextCoordinates(0, pageY).row;
|
||||
|
||||
this._dispatchEvent("gutter" + e.type, {
|
||||
row: this.screenToTextCoordinates(pageX, pageY).row,
|
||||
row: row,
|
||||
htmlEvent: e
|
||||
});
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue