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