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 pos = editor.getCursorPosition();
|
||||||
var row = pos.row;
|
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) {
|
if (oldWidget) {
|
||||||
oldWidget.destroy();
|
oldWidget.destroy();
|
||||||
} else {
|
} else {
|
||||||
|
@ -128,7 +130,8 @@ exports.showErrorMarker = function(editor, dir) {
|
||||||
row: pos.row,
|
row: pos.row,
|
||||||
fixedWidth: true,
|
fixedWidth: true,
|
||||||
coverGutter: true,
|
coverGutter: true,
|
||||||
el: dom.createElement("div")
|
el: dom.createElement("div"),
|
||||||
|
type: "errorMarker"
|
||||||
};
|
};
|
||||||
var el = w.el.appendChild(dom.createElement("div"));
|
var el = w.el.appendChild(dom.createElement("div"));
|
||||||
var arrow = w.el.appendChild(dom.createElement("div"));
|
var arrow = w.el.appendChild(dom.createElement("div"));
|
||||||
|
|
|
@ -171,6 +171,10 @@ function LineWidgets(session) {
|
||||||
if (w) {
|
if (w) {
|
||||||
noWidgets = false;
|
noWidgets = false;
|
||||||
w.row = i;
|
w.row = i;
|
||||||
|
while (w.$oldWidget) {
|
||||||
|
w.$oldWidget.row = i;
|
||||||
|
w = w.$oldWidget;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (noWidgets)
|
if (noWidgets)
|
||||||
|
@ -181,6 +185,15 @@ function LineWidgets(session) {
|
||||||
if (!this.session.lineWidgets)
|
if (!this.session.lineWidgets)
|
||||||
this.session.lineWidgets = new Array(this.session.getLength());
|
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;
|
this.session.lineWidgets[w.row] = w;
|
||||||
|
|
||||||
var renderer = this.editor.renderer;
|
var renderer = this.editor.renderer;
|
||||||
|
@ -231,12 +244,37 @@ function LineWidgets(session) {
|
||||||
if (w.editor && w.editor.destroy) try {
|
if (w.editor && w.editor.destroy) try {
|
||||||
w.editor.destroy();
|
w.editor.destroy();
|
||||||
} catch(e){}
|
} catch(e){}
|
||||||
if (this.session.lineWidgets)
|
if (this.session.lineWidgets) {
|
||||||
this.session.lineWidgets[w.row] = undefined;
|
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.session._emit("changeFold", {data:{start:{row: w.row}}});
|
||||||
this.$updateRows();
|
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.onWidgetChanged = function(w) {
|
||||||
this.session._changedWidgets.push(w);
|
this.session._changedWidgets.push(w);
|
||||||
this.editor && this.editor.renderer.updateFull();
|
this.editor && this.editor.renderer.updateFull();
|
||||||
|
@ -250,7 +288,7 @@ function LineWidgets(session) {
|
||||||
var min = Infinity;
|
var min = Infinity;
|
||||||
for (var i = 0; i < changedWidgets.length; i++) {
|
for (var i = 0; i < changedWidgets.length; i++) {
|
||||||
var w = changedWidgets[i];
|
var w = changedWidgets[i];
|
||||||
if (!w.el) continue;
|
if (!w || !w.el) continue;
|
||||||
if (!w._inDocument) {
|
if (!w._inDocument) {
|
||||||
w._inDocument = true;
|
w._inDocument = true;
|
||||||
renderer.container.appendChild(w.el);
|
renderer.container.appendChild(w.el);
|
||||||
|
|
Ładowanie…
Reference in New Issue