fix author layer getting lost when moving tab between panes

pull/495/head
nightwing 2018-04-19 12:06:47 +04:00
rodzic 7e90154196
commit 2e524ab8ba
1 zmienionych plików z 186 dodań i 172 usunięć

Wyświetl plik

@ -38,9 +38,17 @@ define(function(require, module, exports) {
function AuthorLayer(session) {
var plugin = new Plugin("Ajax.org", main.consumes);
// var emit = plugin.getEmitter();
var marker = session.addDynamicMarker({ update: drawAuthInfos }, false);
var marker;
function refresh() {
if (showAuthorInfo) {
session.on("changeEditor", onChangeEditor);
marker = session.addDynamicMarker({ update: drawAuthInfos }, false);
}
else {
dispose();
}
var doc = session.collabDoc.original;
var ace = doc.editor && doc.editor.ace;
var aceSession = ace && ace.session;
@ -48,15 +56,33 @@ define(function(require, module, exports) {
return;
session._emit("changeBackMarker");
var renderer = ace.renderer;
onChangeEditor({ editor: ace });
}
function dispose() {
marker && session.removeMarker(marker.id);
session.off("changeEditor", onChangeEditor);
}
plugin.freezePublicAPI({
get colorPool() { return workspace.colorPool; },
refresh: refresh,
dispose: dispose
});
return plugin;
}
function onChangeEditor(e) {
var renderer = (e.editor || e.oldEditor).renderer;
renderer.$gutterLayer.$padding = null;
renderer.$loop.schedule(renderer.CHANGE_GUTTER);
if (showAuthorInfo) {
if (showAuthorInfo && e.editor) {
renderer.$gutterLayer.on("afterRender", decorateGutter);
}
else {
renderer.$gutterLayer.off("afterRender", decorateGutter);
clearGutterDecorations(renderer);
clearGutterDecorations(renderer.$gutterLayer);
}
}
@ -119,14 +145,15 @@ define(function(require, module, exports) {
var doc = session.collabDoc;
var isCollabGutter = doc && showAuthorInfo && util.isRealCollab(workspace);
if (!isCollabGutter)
return;
var config = gutter.config;
var range = new Range(config.firstRow, 0, config.lastRow, Number.MAX_VALUE);
var authorKeysCache = isCollabGutter && createAuthorKeyCache(editorDoc, doc.authAttribs, range).authorKeys;
var colorPool = workspace.colorPool;
var reversedAuthorPool = workspace.reversedAuthorPool;
if (!isCollabGutter)
return clearGutterDecorations();
var cells = gutter.$lines.cells;
for (var i = 0; i < cells.length; i++) {
var cell = cells[i];
@ -144,9 +171,9 @@ define(function(require, module, exports) {
}
}
function clearGutterDecorations(renderer) {
renderer.$gutterLayer.$lines.cellCache.length = 0;
var cells = renderer.$gutterLayer.$lines.cells;
function clearGutterDecorations(gutter) {
gutter.$lines.cellCache.length = 0;
var cells = gutter.$lines.cells;
for (var i = 0; i < cells.length; i++) {
var cell = cells[i];
cell.element.style.borderLeft = "";
@ -219,19 +246,6 @@ define(function(require, module, exports) {
};
}
function dispose () {
session.removeMarker(marker.id);
}
plugin.freezePublicAPI({
get colorPool() { return workspace.colorPool; },
refresh: refresh,
dispose: dispose
});
return plugin;
}
function getLineAuthorKey(session, authAttribs, row) {
var editorDoc = session.doc;