Commit e3a7cce9 authored by Ilya Kirillov's avatar Ilya Kirillov

Worked on deleted index in a new undo scheme.

parent 792eb8d5
...@@ -48,6 +48,8 @@ function CWordCollaborativeEditing() ...@@ -48,6 +48,8 @@ function CWordCollaborativeEditing()
this.m_aForeignCursorsXY = {}; this.m_aForeignCursorsXY = {};
this.m_aForeignCursorsToShow = {}; this.m_aForeignCursorsToShow = {};
this.m_nAllChangesSavedIndex = 0;
this.m_aAllChanges = []; // Список всех изменений this.m_aAllChanges = []; // Список всех изменений
this.m_aOwnChangesIndexes = []; // Список номеров своих изменений в общем списке, которые мы можем откатить this.m_aOwnChangesIndexes = []; // Список номеров своих изменений в общем списке, которые мы можем откатить
...@@ -628,7 +630,7 @@ CWordCollaborativeEditing.prototype.private_AddOverallChange = function(oChange) ...@@ -628,7 +630,7 @@ CWordCollaborativeEditing.prototype.private_AddOverallChange = function(oChange)
// Здесь мы должны смержить пришедшее изменение с одним из наших изменений // Здесь мы должны смержить пришедшее изменение с одним из наших изменений
for (var nIndex = 0, nCount = this.m_oOwnChanges.length; nIndex < nCount; ++nIndex) for (var nIndex = 0, nCount = this.m_oOwnChanges.length; nIndex < nCount; ++nIndex)
{ {
if (false === oChange.Merge(this.m_oOwnChanges[nIndex])) if (oChange && oChange.Merge && false === oChange.Merge(this.m_oOwnChanges[nIndex]))
return false; return false;
} }
...@@ -637,20 +639,27 @@ CWordCollaborativeEditing.prototype.private_AddOverallChange = function(oChange) ...@@ -637,20 +639,27 @@ CWordCollaborativeEditing.prototype.private_AddOverallChange = function(oChange)
}; };
CWordCollaborativeEditing.prototype.private_OnSendOwnChanges = function(arrChanges, nDeleteIndex) CWordCollaborativeEditing.prototype.private_OnSendOwnChanges = function(arrChanges, nDeleteIndex)
{ {
this.m_aOwnChangesIndexes.push({ if (null !== nDeleteIndex)
Position : this.m_aAllChanges.length, {
Count : arrChanges.length this.m_aAllChanges.length = this.m_nAllChangesSavedIndex + nDeleteIndex;
}); }
else
this.m_aAllChanges = this.m_aAllChanges.concat(arrChanges); {
this.m_nAllChangesSavedIndex = this.m_aAllChanges.length;
// TODO: Пока nDeleteIndex не учитывается, исправить. }
// TODO: Тут возможен случай, когда arrChanges пустой. Возможно необходимо убрать несколько последних записей
// в массиве this.m_aOwnChangesIndexes
// TODO: Пока мы делаем это как одну точку, которую надо откатить. Надо пробежаться по массиву и разбить его // TODO: Пока мы делаем это как одну точку, которую надо откатить. Надо пробежаться по массиву и разбить его
// по отдельным действиям. // по отдельным действиям. В принципе, данная схема срабатывает в быстром совместном редактировании,
// так что как правило две точки не успевают попасть в одно сохранение.
if (arrChanges.length > 0)
{
this.m_aOwnChangesIndexes.push({
Position : this.m_aAllChanges.length,
Count : arrChanges.length
});
this.m_aAllChanges = this.m_aAllChanges.concat(arrChanges);
}
}; };
CWordCollaborativeEditing.prototype.Undo = function() CWordCollaborativeEditing.prototype.Undo = function()
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment