kopia lustrzana https://github.com/c9/core
fix line widgets added to same line getting stuck
rodzic
137c2731fe
commit
2962ff6e9e
|
@ -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"));
|
||||
|
|
|
@ -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);
|
||||
|
|
Ładowanie…
Reference in New Issue