fix line widgets added to same line getting stuck

pull/134/merge
nightwing 2015-08-28 19:24:33 +04:00
rodzic 137c2731fe
commit 2962ff6e9e
2 zmienionych plików z 46 dodań i 5 usunięć

Wyświetl plik

@ -98,7 +98,9 @@ exports.showErrorMarker = function(editor, dir) {
var pos = editor.getCursorPosition();
var row = pos.row;
var oldWidget = session.lineWidgets && session.lineWidgets[row];
var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) {
return w.type == "errorMarker";
})[0];
if (oldWidget) {
oldWidget.destroy();
} else {
@ -128,7 +130,8 @@ exports.showErrorMarker = function(editor, dir) {
row: pos.row,
fixedWidth: true,
coverGutter: true,
el: dom.createElement("div")
el: dom.createElement("div"),
type: "errorMarker"
};
var el = w.el.appendChild(dom.createElement("div"));
var arrow = w.el.appendChild(dom.createElement("div"));

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

@ -171,6 +171,10 @@ function LineWidgets(session) {
if (w) {
noWidgets = false;
w.row = i;
while (w.$oldWidget) {
w.$oldWidget.row = i;
w = w.$oldWidget;
}
}
});
if (noWidgets)
@ -181,6 +185,15 @@ function LineWidgets(session) {
if (!this.session.lineWidgets)
this.session.lineWidgets = new Array(this.session.getLength());
var old = this.session.lineWidgets[w.row];
if (old) {
w.$oldWidget = old;
if (old.el && old.el.parentNode) {
old.el.parentNode.removeChild(old.el);
old._inDocument = false;
}
}
this.session.lineWidgets[w.row] = w;
var renderer = this.editor.renderer;
@ -231,12 +244,37 @@ function LineWidgets(session) {
if (w.editor && w.editor.destroy) try {
w.editor.destroy();
} catch(e){}
if (this.session.lineWidgets)
this.session.lineWidgets[w.row] = undefined;
if (this.session.lineWidgets) {
var w1 = this.session.lineWidgets[w.row]
if (w1 == w) {
this.session.lineWidgets[w.row] = w.$oldWidget;
if (w.$oldWidget)
this.onWidgetChanged(w.$oldWidget);
} else {
while (w1) {
if (w1.$oldWidget == w) {
w1.$oldWidget = w.$oldWidget;
break;
}
w1 = w1.$oldWidget;
}
}
}
this.session._emit("changeFold", {data:{start:{row: w.row}}});
this.$updateRows();
};
this.getWidgetsAtRow = function(row) {
var lineWidgets = this.session.lineWidgets;
var w = lineWidgets && lineWidgets[row];
var list = [];
while (w) {
list.push(w)
w = w.$oldWidget;
}
return list;
};
this.onWidgetChanged = function(w) {
this.session._changedWidgets.push(w);
this.editor && this.editor.renderer.updateFull();
@ -250,7 +288,7 @@ function LineWidgets(session) {
var min = Infinity;
for (var i = 0; i < changedWidgets.length; i++) {
var w = changedWidgets[i];
if (!w.el) continue;
if (!w || !w.el) continue;
if (!w._inDocument) {
w._inDocument = true;
renderer.container.appendChild(w.el);