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()
this.m_aForeignCursorsXY = {};
this.m_aForeignCursorsToShow = {};
this.m_nAllChangesSavedIndex = 0;
this.m_aAllChanges = []; // Список всех изменений
this.m_aOwnChangesIndexes = []; // Список номеров своих изменений в общем списке, которые мы можем откатить
......@@ -628,7 +630,7 @@ CWordCollaborativeEditing.prototype.private_AddOverallChange = function(oChange)
// Здесь мы должны смержить пришедшее изменение с одним из наших изменений
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;
}
......@@ -637,20 +639,27 @@ CWordCollaborativeEditing.prototype.private_AddOverallChange = function(oChange)
};
CWordCollaborativeEditing.prototype.private_OnSendOwnChanges = function(arrChanges, nDeleteIndex)
{
this.m_aOwnChangesIndexes.push({
Position : this.m_aAllChanges.length,
Count : arrChanges.length
});
this.m_aAllChanges = this.m_aAllChanges.concat(arrChanges);
// TODO: Пока nDeleteIndex не учитывается, исправить.
// TODO: Тут возможен случай, когда arrChanges пустой. Возможно необходимо убрать несколько последних записей
// в массиве this.m_aOwnChangesIndexes
if (null !== nDeleteIndex)
{
this.m_aAllChanges.length = this.m_nAllChangesSavedIndex + nDeleteIndex;
}
else
{
this.m_nAllChangesSavedIndex = this.m_aAllChanges.length;
}
// 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()
{
......
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