fix linewidgets interaction with folding

pull/134/merge
nightwing 2015-08-28 03:44:03 +04:00
rodzic 9c91ae4a8c
commit 1ca8dbdd31
2 zmienionych plików z 63 dodań i 20 usunięć

Wyświetl plik

@ -119,7 +119,7 @@ function Folding() {
var folds = this.getFoldsInRange(ranges); var folds = this.getFoldsInRange(ranges);
} }
return folds; return folds;
} };
/* /*
* Returns all folds in the document * Returns all folds in the document
@ -340,7 +340,7 @@ function Folding() {
// Notify that fold data has changed. // Notify that fold data has changed.
this.$modified = true; this.$modified = true;
this._emit("changeFold", { data: fold, action: "add" }); this._signal("changeFold", { data: fold, action: "add" });
return fold; return fold;
}; };
@ -401,7 +401,7 @@ function Folding() {
// Notify that fold data has changed. // Notify that fold data has changed.
this.$modified = true; this.$modified = true;
this._emit("changeFold", { data: fold, action: "remove" }); this._signal("changeFold", { data: fold, action: "remove" });
}; };
this.removeFolds = function(folds) { this.removeFolds = function(folds) {
@ -698,7 +698,7 @@ function Folding() {
this.off('change', this.$updateFoldWidgets); this.off('change', this.$updateFoldWidgets);
this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets); this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);
this._emit("changeAnnotation"); this._signal("changeAnnotation");
if (!foldMode || this.$foldStyle == "manual") { if (!foldMode || this.$foldStyle == "manual") {
this.foldWidgets = null; this.foldWidgets = null;
@ -740,7 +740,7 @@ function Folding() {
range: i !== -1 && range, range: i !== -1 && range,
firstRange: firstRange firstRange: firstRange
}; };
} };
this.onFoldWidgetClick = function(row, e) { this.onFoldWidgetClick = function(row, e) {
e = e.domEvent; e = e.domEvent;
@ -752,7 +752,7 @@ function Folding() {
var range = this.$toggleFoldWidget(row, options); var range = this.$toggleFoldWidget(row, options);
if (!range) { if (!range) {
var el = (e.target || e.srcElement) var el = (e.target || e.srcElement);
if (el && /ace_fold-widget/.test(el.className)) if (el && /ace_fold-widget/.test(el.className))
el.className += " ace_invalid"; el.className += " ace_invalid";
} }
@ -849,7 +849,7 @@ function Folding() {
if (this.foldWidgets.length > rows.first) if (this.foldWidgets.length > rows.first)
this.foldWidgets.splice(rows.first, this.foldWidgets.length); this.foldWidgets.splice(rows.first, this.foldWidgets.length);
} }
} };
} }
exports.Folding = Folding; exports.Folding = Folding;

49
node_modules/ace/lib/ace/line_widgets.js wygenerowano vendored
Wyświetl plik

@ -48,6 +48,7 @@ function LineWidgets(session) {
this.$onChangeEditor = this.$onChangeEditor.bind(this); this.$onChangeEditor = this.$onChangeEditor.bind(this);
this.session.on("change", this.updateOnChange); this.session.on("change", this.updateOnChange);
this.session.on("changeFold", this.updateOnFold);
this.session.on("changeEditor", this.$onChangeEditor); this.session.on("changeEditor", this.$onChangeEditor);
} }
@ -68,7 +69,7 @@ function LineWidgets(session) {
this.$getWidgetScreenLength = function() { this.$getWidgetScreenLength = function() {
var screenRows = 0; var screenRows = 0;
this.lineWidgets.forEach(function(w){ this.lineWidgets.forEach(function(w){
if (w && w.rowCount) if (w && w.rowCount && !w.hidden)
screenRows += w.rowCount; screenRows += w.rowCount;
}); });
return screenRows; return screenRows;
@ -113,6 +114,32 @@ function LineWidgets(session) {
}); });
}; };
this.updateOnFold = function(e, session) {
var lineWidgets = session.lineWidgets;
if (!lineWidgets || !e.action)
return;
var fold = e.data;
var start = fold.start.row;
var end = fold.end.row;
var hide = e.action == "add";
for (var i = start + 1; i < end; i++) {
if (lineWidgets[i])
lineWidgets[i].hidden = hide;
}
if (lineWidgets[end]) {
if (hide) {
if (!lineWidgets[start])
lineWidgets[start] = lineWidgets[end];
else
lineWidgets[end].hidden = hide;
} else {
if (lineWidgets[start] == lineWidgets[end])
lineWidgets[start] = undefined;
lineWidgets[end].hidden = hide;
}
}
};
this.updateOnChange = function(delta) { this.updateOnChange = function(delta) {
var lineWidgets = this.session.lineWidgets; var lineWidgets = this.session.lineWidgets;
if (!lineWidgets) return; if (!lineWidgets) return;
@ -175,8 +202,21 @@ function LineWidgets(session) {
if (!w.pixelHeight) { if (!w.pixelHeight) {
w.pixelHeight = w.el.offsetHeight; w.pixelHeight = w.el.offsetHeight;
} }
if (w.rowCount == null) if (w.rowCount == null) {
w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight; w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;
}
if (w.fullWidth) {
w.pixelWidth = w.el.pixelWidth;
}
var fold = this.session.getFoldAt(w.row, 0);
w.$fold = fold;
if (fold) {
var lineWidgets = this.session.lineWidgets;
if (w.row == fold.end.row && !lineWidgets[fold.start.row])
lineWidgets[fold.start.row] = w;
else
w.hidden = true;
}
this.session._emit("changeFold", {data:{start:{row: w.row}}}); this.session._emit("changeFold", {data:{start:{row: w.row}}});
@ -260,7 +300,10 @@ function LineWidgets(session) {
for (var i = first; i <= last; i++) { for (var i = first; i <= last; i++) {
var w = lineWidgets[i]; var w = lineWidgets[i];
if (!w || !w.el) continue; if (!w || !w.el) continue;
if (w.hidden) {
w.el.style.top = -100 - (w.pixelHeight || 0) + "px";
continue;
}
if (!w._inDocument) { if (!w._inDocument) {
w._inDocument = true; w._inDocument = true;
renderer.container.appendChild(w.el); renderer.container.appendChild(w.el);