Commit 76876225 authored by Alexander.Trofimov's avatar Alexander.Trofimov Committed by Alexander.Trofimov

Убрал функцию firstLoadChanges (вместо нее saveChanges с аргументом first)

Переделал сохранение. Теперь сохранение осуществляется не целым массивом, а множеством одиночных блоков.
Добавил новую таблицу в базу (для того, чтобы убрать дублирование данных).

Пересчетный индекс теперь передается в одном изменении.

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@58708 954022d7-b5bf-4e40-9824-e11837661b57
parent bd865f1e
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
'use strict'; 'use strict';
var asc = window["Asc"]; var asc = window["Asc"];
var asc_coAuthV = '3.0.3'; var asc_coAuthV = '3.0.4';
// Класс надстройка, для online и offline работы // Класс надстройка, для online и offline работы
function CDocsCoApi (options) { function CDocsCoApi (options) {
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
this.onLocksReleased = options.onLocksReleased; this.onLocksReleased = options.onLocksReleased;
this.onLocksReleasedEnd = options.onLocksReleasedEnd; // ToDo переделать на массив release locks this.onLocksReleasedEnd = options.onLocksReleasedEnd; // ToDo переделать на массив release locks
this.onDisconnect = options.onDisconnect; this.onDisconnect = options.onDisconnect;
this.onFirstLoadChanges = options.onFirstLoadChanges;
this.onFirstLoadChangesEnd = options.onFirstLoadChangesEnd; this.onFirstLoadChangesEnd = options.onFirstLoadChangesEnd;
this.onConnectionStateChanged = options.onConnectionStateChanged; this.onConnectionStateChanged = options.onConnectionStateChanged;
this.onSetIndexUser = options.onSetIndexUser; this.onSetIndexUser = options.onSetIndexUser;
...@@ -40,11 +39,10 @@ ...@@ -40,11 +39,10 @@
this._CoAuthoringApi.onLocksReleased = function (e, bChanges) {t.callback_OnLocksReleased(e, bChanges);}; this._CoAuthoringApi.onLocksReleased = function (e, bChanges) {t.callback_OnLocksReleased(e, bChanges);};
this._CoAuthoringApi.onLocksReleasedEnd = function () {t.callback_OnLocksReleasedEnd();}; this._CoAuthoringApi.onLocksReleasedEnd = function () {t.callback_OnLocksReleasedEnd();};
this._CoAuthoringApi.onDisconnect = function (e, isDisconnectAtAll, isCloseCoAuthoring) {t.callback_OnDisconnect(e, isDisconnectAtAll, isCloseCoAuthoring);}; this._CoAuthoringApi.onDisconnect = function (e, isDisconnectAtAll, isCloseCoAuthoring) {t.callback_OnDisconnect(e, isDisconnectAtAll, isCloseCoAuthoring);};
this._CoAuthoringApi.onFirstLoadChanges = function (e, userId) {t.callback_OnFirstLoadChanges(e, userId);};
this._CoAuthoringApi.onFirstLoadChangesEnd = function () {t.callback_OnFirstLoadChangesEnd();}; this._CoAuthoringApi.onFirstLoadChangesEnd = function () {t.callback_OnFirstLoadChangesEnd();};
this._CoAuthoringApi.onConnectionStateChanged = function (e) {t.callback_OnConnectionStateChanged(e);}; this._CoAuthoringApi.onConnectionStateChanged = function (e) {t.callback_OnConnectionStateChanged(e);};
this._CoAuthoringApi.onSetIndexUser = function (e) {t.callback_OnSetIndexUser(e);}; this._CoAuthoringApi.onSetIndexUser = function (e) {t.callback_OnSetIndexUser(e);};
this._CoAuthoringApi.onSaveChanges = function (e, userId) {t.callback_OnSaveChanges(e, userId);}; this._CoAuthoringApi.onSaveChanges = function (e, userId, bFirstLoad) {t.callback_OnSaveChanges(e, userId, bFirstLoad);};
// Callback есть пользователей больше 1 // Callback есть пользователей больше 1
this._CoAuthoringApi.onStartCoAuthoring = function (e) {t.callback_OnStartCoAuthoring(e);}; this._CoAuthoringApi.onStartCoAuthoring = function (e) {t.callback_OnStartCoAuthoring(e);};
this._CoAuthoringApi.onEndCoAuthoring = function (e) {t.callback_OnEndCoAuthoring(e);}; this._CoAuthoringApi.onEndCoAuthoring = function (e) {t.callback_OnEndCoAuthoring(e);};
...@@ -197,11 +195,6 @@ ...@@ -197,11 +195,6 @@
this.onDisconnect(e, isDisconnectAtAll, isCloseCoAuthoring); this.onDisconnect(e, isDisconnectAtAll, isCloseCoAuthoring);
}; };
CDocsCoApi.prototype.callback_OnFirstLoadChanges = function (e, userId) {
if (this.onFirstLoadChanges)
this.onFirstLoadChanges(e, userId);
};
CDocsCoApi.prototype.callback_OnFirstLoadChangesEnd = function () { CDocsCoApi.prototype.callback_OnFirstLoadChangesEnd = function () {
if (this.onFirstLoadChangesEnd) if (this.onFirstLoadChangesEnd)
this.onFirstLoadChangesEnd(); this.onFirstLoadChangesEnd();
...@@ -217,9 +210,9 @@ ...@@ -217,9 +210,9 @@
this.onSetIndexUser(e); this.onSetIndexUser(e);
}; };
CDocsCoApi.prototype.callback_OnSaveChanges = function (e, userId) { CDocsCoApi.prototype.callback_OnSaveChanges = function (e, userId, bFirstLoad) {
if (this.onSaveChanges) if (this.onSaveChanges)
this.onSaveChanges(e, userId); this.onSaveChanges(e, userId, bFirstLoad);
}; };
CDocsCoApi.prototype.callback_OnStartCoAuthoring = function (e) { CDocsCoApi.prototype.callback_OnStartCoAuthoring = function (e) {
if (this.onStartCoAuthoring) if (this.onStartCoAuthoring)
...@@ -254,7 +247,6 @@ ...@@ -254,7 +247,6 @@
this.onDisconnect = options.onDisconnect; this.onDisconnect = options.onDisconnect;
this.onConnect = options.onConnect; this.onConnect = options.onConnect;
this.onSaveChanges = options.onSaveChanges; this.onSaveChanges = options.onSaveChanges;
this.onFirstLoadChanges = options.onFirstLoadChanges;
this.onFirstLoadChangesEnd = options.onFirstLoadChangesEnd; this.onFirstLoadChangesEnd = options.onFirstLoadChangesEnd;
this.onConnectionStateChanged = options.onConnectionStateChanged; this.onConnectionStateChanged = options.onConnectionStateChanged;
this.onUnSaveLock = options.onUnSaveLock; this.onUnSaveLock = options.onUnSaveLock;
...@@ -288,6 +280,8 @@ ...@@ -288,6 +280,8 @@
this.arrayChanges = null; this.arrayChanges = null;
// Время последнего сохранения (для разрыва соединения) // Время последнего сохранения (для разрыва соединения)
this.lastOtherSaveTime = -1; this.lastOtherSaveTime = -1;
// Локальный индекс изменений
this.changesIndex = 0;
this._url = ""; this._url = "";
...@@ -442,6 +436,8 @@ ...@@ -442,6 +436,8 @@
DocsCoApi.prototype.saveChanges = function (arrayChanges, currentIndex, deleteIndex) { DocsCoApi.prototype.saveChanges = function (arrayChanges, currentIndex, deleteIndex) {
if (null === currentIndex) { if (null === currentIndex) {
this.deleteIndex = deleteIndex; this.deleteIndex = deleteIndex;
if (null != this.deleteIndex && -1 !== this.deleteIndex)
this.deleteIndex += this.changesIndex;
this.currentIndex = 0; this.currentIndex = 0;
this.arrayChanges = arrayChanges; this.arrayChanges = arrayChanges;
} else { } else {
...@@ -607,12 +603,7 @@ ...@@ -607,12 +603,7 @@
if (bSendEnd && this.onLocksReleasedEnd) if (bSendEnd && this.onLocksReleasedEnd)
this.onLocksReleasedEnd(); this.onLocksReleasedEnd();
} }
if (data["changes"]) { this._updateChanges(data["changes"], false);
this.lastOtherSaveTime = data["time"];
if (this.onSaveChanges) {
this.onSaveChanges(JSON.parse(data["changes"]), data["user"]);
}
}
}; };
DocsCoApi.prototype._onStartCoAuthoring = function (isStartEvent) { DocsCoApi.prototype._onStartCoAuthoring = function (isStartEvent) {
...@@ -648,11 +639,14 @@ ...@@ -648,11 +639,14 @@
} }
}; };
DocsCoApi.prototype._onUnSaveLock = function () { DocsCoApi.prototype._onUnSaveLock = function (data) {
// Очищаем предыдущий таймер // Очищаем предыдущий таймер
if (null !== this.saveCallbackErrorTimeOutId) if (null !== this.saveCallbackErrorTimeOutId)
clearTimeout(this.saveCallbackErrorTimeOutId); clearTimeout(this.saveCallbackErrorTimeOutId);
if (-1 !== data['index'])
this.changesIndex = data['index'];
if (this.onUnSaveLock) if (this.onUnSaveLock)
this.onUnSaveLock(); this.onUnSaveLock();
}; };
...@@ -667,23 +661,23 @@ ...@@ -667,23 +661,23 @@
return false; return false;
}; };
DocsCoApi.prototype._onFirstLoadChanges = function (allServerChanges) { DocsCoApi.prototype._updateChanges = function (allServerChanges, bFirstLoad) {
if (allServerChanges && this.onFirstLoadChanges) { if (this.onSaveChanges) {
for (var changeId in allServerChanges) { if (allServerChanges) {
var change = allServerChanges[changeId]; this.changesIndex = allServerChanges['index'];
var changesOneUser = change["changes"]; var arrChanges = allServerChanges['arrChanges'];
if (changesOneUser) { for (var changeId in arrChanges) {
if (change["user"] !== this._userId) var change = arrChanges[changeId];
this.lastOtherSaveTime = change["time"]; var changesOneUser = change["change"];
this.onFirstLoadChanges(JSON.parse(changesOneUser), change["user"]); if (changesOneUser) {
if (change["user"] !== this._userId)
this.lastOtherSaveTime = change["time"];
this.onSaveChanges(JSON.parse(changesOneUser), change["user"], bFirstLoad);
}
} }
} }
}
// Посылать нужно всегда, т.к. на это рассчитываем при открытии };
if (this.onFirstLoadChangesEnd)
this.onFirstLoadChangesEnd();
}
};
DocsCoApi.prototype._onSetIndexUser = function (data) { DocsCoApi.prototype._onSetIndexUser = function (data) {
if (data && this.onSetIndexUser) { if (data && this.onSetIndexUser) {
...@@ -825,8 +819,10 @@ ...@@ -825,8 +819,10 @@
} }
this._onGetLock(data); this._onGetLock(data);
} }
// Нужно послать фиктивное завершение (эта функция означает что мы соединились) this._updateChanges(data["changes"], true);
this._onFirstLoadChanges(data["changes"] || []); // Посылать нужно всегда, т.к. на это рассчитываем при открытии
if (this.onFirstLoadChangesEnd)
this.onFirstLoadChangesEnd();
//Send prebuffered //Send prebuffered
this._sendPrebuffered(); this._sendPrebuffered();
...@@ -892,12 +888,8 @@ ...@@ -892,12 +888,8 @@
}, },
'locks' : t.ownedLockBlocks, 'locks' : t.ownedLockBlocks,
'sessionId' : t._id, 'sessionId' : t._id,
'server' : { 'server' : window.location.protocol + '//' + window.location.hostname +
'https' : 'https:' === window.location.protocol, (window.location.port || '') + g_sMainServiceLocalUrl,
'host' : window.location.hostname,
'port' : window.location.port || '',
'path' : g_sMainServiceLocalUrl
},
'documentFormatSave' : t._documentFormatSave, 'documentFormatSave' : t._documentFormatSave,
'isViewer' : t._isViewer, 'isViewer' : t._isViewer,
'version' : asc_coAuthV 'version' : asc_coAuthV
...@@ -917,7 +909,7 @@ ...@@ -917,7 +909,7 @@
case 'connectState' : t._onConnectionStateChanged(dataObject); break; case 'connectState' : t._onConnectionStateChanged(dataObject); break;
case 'saveChanges' : t._onSaveChanges(dataObject); break; case 'saveChanges' : t._onSaveChanges(dataObject); break;
case 'saveLock' : t._onSaveLock(dataObject); break; case 'saveLock' : t._onSaveLock(dataObject); break;
case 'unSaveLock' : t._onUnSaveLock(); break; case 'unSaveLock' : t._onUnSaveLock(dataObject); break;
case 'savePartChanges' : t._onSavePartChanges(); break; case 'savePartChanges' : t._onSavePartChanges(); break;
case 'drop' : t._onDrop(dataObject); break; case 'drop' : t._onDrop(dataObject); break;
case 'waitAuth' : /*Ждем, когда придет auth, документ залочен*/break; case 'waitAuth' : /*Ждем, когда придет auth, документ залочен*/break;
......
...@@ -1618,28 +1618,19 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -1618,28 +1618,19 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
worksheet.objectRender.showDrawingObjects(true); worksheet.objectRender.showDrawingObjects(true);
} }
}; };
this.CoAuthoringApi.onSaveChanges = function (e, userId, bSendEvent) { this.CoAuthoringApi.onSaveChanges = function (e, userId, bFirstLoad) {
// bSendEvent = false - это означает, что мы загружаем имеющиеся изменения при открытии // bSendEvent = false - это означает, что мы загружаем имеющиеся изменения при открытии
var bAddChanges = false; var bAddChanges = false;
var nCount = e.length;
var nIndex = 0;
var oElement = null;
var oRecalcIndexColumns = null, oRecalcIndexRows = null; var oRecalcIndexColumns = null, oRecalcIndexRows = null;
for (; nIndex < nCount; ++nIndex) { if (!e.hasOwnProperty("type")) {
oElement = e[nIndex]; t.collaborativeEditing.addChanges(e);
if (!oElement.hasOwnProperty("type")) { bAddChanges = true;
t.collaborativeEditing.addChanges(oElement); } else if (!bFirstLoad) {
bAddChanges = true; if ("10" === e["type"]) {
} else if (false !== bSendEvent) { // Это мы получили recalcIndexColumns и recalcIndexRows
if ("0" === oElement["type"]) { oRecalcIndexColumns = t.collaborativeEditing.addRecalcIndex('0', e['indexCols']);
// Это мы получили recalcIndexColumns oRecalcIndexRows = t.collaborativeEditing.addRecalcIndex('1', e['indexRows']);
oRecalcIndexColumns = t.collaborativeEditing.addRecalcIndex(oElement["type"], oElement["index"]);
} else if ("1" === oElement["type"]) {
// Это мы получили recalcIndexRows
oRecalcIndexRows = t.collaborativeEditing.addRecalcIndex(oElement["type"], oElement["index"]);
}
} }
} }
// Теперь нужно пересчитать индексы для lock-элементов // Теперь нужно пересчитать индексы для lock-элементов
...@@ -1649,14 +1640,11 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -1649,14 +1640,11 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
} }
// т.е. если bSendEvent не задан, то посылаем сообщение + если мы уже открыли документ // т.е. если bSendEvent не задан, то посылаем сообщение + если мы уже открыли документ
if (true === bAddChanges && false !== bSendEvent && t.IsSendDocumentLoadCompleate) if (true === bAddChanges && !bFirstLoad && t.IsSendDocumentLoadCompleate)
t.syncCollaborativeChanges(); t.syncCollaborativeChanges();
}; };
this.CoAuthoringApi.onFirstLoadChanges = function (e, userId) {
t.CoAuthoringApi.onSaveChanges(e, userId, false);
};
this.CoAuthoringApi.onFirstLoadChangesEnd = function () { this.CoAuthoringApi.onFirstLoadChangesEnd = function () {
t.asyncServerIdEndLoaded (); t.asyncServerIdEndLoaded();
}; };
this.CoAuthoringApi.onSetIndexUser = function (e) { this.CoAuthoringApi.onSetIndexUser = function (e) {
g_oIdCounter.Set_UserId("" + e); g_oIdCounter.Set_UserId("" + e);
...@@ -1717,10 +1705,8 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -1717,10 +1705,8 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
var arrChanges = this.wbModel.SerializeHistory(); var arrChanges = this.wbModel.SerializeHistory();
if (this.collaborativeEditing.getCollaborativeEditing()) { if (this.collaborativeEditing.getCollaborativeEditing()) {
// Пересчетные индексы добавляем только если мы не одни // Пересчетные индексы добавляем только если мы не одни
if (recalcIndexColumns) if (recalcIndexColumns || recalcIndexRows)
arrChanges.push({"index" : recalcIndexColumns, "type" : "0"}); arrChanges.push({"indexCols" : recalcIndexColumns, "indexRows" : recalcIndexRows, "type" : "10"});
if (recalcIndexRows)
arrChanges.push({"index" : recalcIndexRows, "type" : "1"});
} }
if (0 < arrChanges.length || null !== deleteIndex) if (0 < arrChanges.length || null !== deleteIndex)
this.CoAuthoringApi.saveChanges(arrChanges, deleteIndex); this.CoAuthoringApi.saveChanges(arrChanges, deleteIndex);
......
...@@ -554,6 +554,8 @@ ...@@ -554,6 +554,8 @@
}; };
CCollaborativeEditing.prototype.addRecalcIndex = function (type, oRecalcIndex) { CCollaborativeEditing.prototype.addRecalcIndex = function (type, oRecalcIndex) {
if (null == oRecalcIndex)
return null;
var nIndex = 0; var nIndex = 0;
var nRecalcType = c_oAscRecalcIndexTypes.RecalcIndexAdd; var nRecalcType = c_oAscRecalcIndexTypes.RecalcIndexAdd;
var oRecalcIndexElement = null; var oRecalcIndexElement = null;
......
...@@ -461,24 +461,16 @@ asc_docs_api.prototype._coAuthoringInit = function () { ...@@ -461,24 +461,16 @@ asc_docs_api.prototype._coAuthoringInit = function () {
} }
} }
}; };
this.CoAuthoringApi.onSaveChanges = function (e, userId, bSendEvent) { this.CoAuthoringApi.onSaveChanges = function (e, userId, bFirstLoad) {
// bSendEvent = false - это означает, что мы загружаем имеющиеся изменения при открытии // bSendEvent = false - это означает, что мы загружаем имеющиеся изменения при открытии
var Count = e.length; var Changes = new CCollaborativeChanges();
for ( var Index = 0; Index < Count; Index++ ) Changes.Set_Id(e["Id"]);
{ Changes.Set_Data(e["Data"]);
var Changes = new CCollaborativeChanges(); CollaborativeEditing.Add_Changes(Changes);
Changes.Set_Id( e[Index]["Id"]);
Changes.Set_Data( e[Index]["Data"]);
CollaborativeEditing.Add_Changes( Changes );
}
// т.е. если bSendEvent не задан, то посылаем сообщение + когда загрузился документ // т.е. если bSendEvent не задан, то посылаем сообщение + когда загрузился документ
if ( Count > 0 && false != bSendEvent && t.bInit_word_control ) if (!bFirstLoad && t.bInit_word_control)
t.sync_CollaborativeChanges(); t.sync_CollaborativeChanges();
};
this.CoAuthoringApi.onFirstLoadChanges = function (e, userId) {
t.CoAuthoringApi.onSaveChanges(e, userId, false);
//CollaborativeEditing.Apply_Changes();
}; };
this.CoAuthoringApi.onFirstLoadChangesEnd = function () { this.CoAuthoringApi.onFirstLoadChangesEnd = function () {
t.asyncServerIdEndLoaded (); t.asyncServerIdEndLoaded ();
......
...@@ -1442,18 +1442,21 @@ CChatMessage.prototype.get_Message = function() { return this.Message; } ...@@ -1442,18 +1442,21 @@ CChatMessage.prototype.get_Message = function() { return this.Message; }
ToDo Register Callback OnCoAuthoringDisconnectUser возвращается userId ToDo Register Callback OnCoAuthoringDisconnectUser возвращается userId
*/ */
// Init CoAuthoring // Init CoAuthoring
asc_docs_api.prototype._coAuthoringSetChange = function(change, oColor)
{
var oChange = new CCollaborativeChanges();
oChange.Set_Id( change["Id"] );
oChange.Set_Data( change["Data"] );
oChange.Set_Color( oColor );
CollaborativeEditing.Add_Changes( oChange );
};
asc_docs_api.prototype._coAuthoringSetChanges = function(e, oColor) asc_docs_api.prototype._coAuthoringSetChanges = function(e, oColor)
{ {
var Count = e.length; var Count = e.length;
for ( var Index = 0; Index < Count; Index++ ) for (var Index = 0; Index < Count; ++Index)
{ this._coAuthoringSetChange(e[Index], oColor);
var Changes = new CCollaborativeChanges(); };
Changes.Set_Id( e[Index]["Id"] );
Changes.Set_Data( e[Index]["Data"] );
Changes.Set_Color( oColor );
CollaborativeEditing.Add_Changes( Changes );
}
}
asc_docs_api.prototype._coAuthoringInit = function() asc_docs_api.prototype._coAuthoringInit = function()
{ {
...@@ -1565,8 +1568,11 @@ asc_docs_api.prototype._coAuthoringInit = function() ...@@ -1565,8 +1568,11 @@ asc_docs_api.prototype._coAuthoringInit = function()
CollaborativeEditing.Remove_NeedLock(Id); CollaborativeEditing.Remove_NeedLock(Id);
} }
}; };
this.CoAuthoringApi.onSaveChanges = function (e, userId, bSendEvent, bUseColor) this.CoAuthoringApi.onSaveChanges = function (e, userId, bFirstLoad)
{ {
var bUseColor;
if (bFirstLoad)
bUseColor = -1 === CollaborativeEditing.m_nUseType;
if (editor.CollaborativeMarksShowType === c_oAscCollaborativeMarksShowType.None) if (editor.CollaborativeMarksShowType === c_oAscCollaborativeMarksShowType.None)
bUseColor = false; bUseColor = false;
...@@ -1574,17 +1580,11 @@ asc_docs_api.prototype._coAuthoringInit = function() ...@@ -1574,17 +1580,11 @@ asc_docs_api.prototype._coAuthoringInit = function()
var nColor = oUser ? oUser.asc_getColorValue() : null; var nColor = oUser ? oUser.asc_getColorValue() : null;
var oColor = false === bUseColor ? null : (null !== nColor ? new CDocumentColor( (nColor >> 16) & 0xFF, (nColor >> 8) & 0xFF, nColor & 0xFF ) : new CDocumentColor( 191, 255, 199 )); var oColor = false === bUseColor ? null : (null !== nColor ? new CDocumentColor( (nColor >> 16) & 0xFF, (nColor >> 8) & 0xFF, nColor & 0xFF ) : new CDocumentColor( 191, 255, 199 ));
t._coAuthoringSetChanges(e, oColor); t._coAuthoringSetChange(e, oColor);
var Count = e.length; // т.е. если bSendEvent не задан, то посылаем сообщение + когда загрузился документ
// т.е. если bSendEvent не задан, то посылаем сообщение + когда загрузился документ if (!bFirstLoad && t.bInit_word_control)
if ( Count > 0 && false != bSendEvent && t.bInit_word_control )
t.sync_CollaborativeChanges(); t.sync_CollaborativeChanges();
}; };
this.CoAuthoringApi.onFirstLoadChanges = function (e, userId)
{
t.CoAuthoringApi.onSaveChanges(e, userId, false, (-1 === CollaborativeEditing.m_nUseType ? true : false));
//CollaborativeEditing.Apply_Changes();
};
this.CoAuthoringApi.onFirstLoadChangesEnd = function () { this.CoAuthoringApi.onFirstLoadChangesEnd = function () {
t.asyncServerIdEndLoaded (); t.asyncServerIdEndLoaded ();
}; };
......
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