Commit 22ad3c87 authored by Alexander.Trofimov's avatar Alexander.Trofimov Committed by Alexander.Trofimov

Добавил в c_oAscAsyncAction тип PrepareToSave (Подготовка к сохранению)

Добавил автосохранение:
autoSaveGap - Интервал автосохранения (0 - означает, что автосохранения нет)
autoSaveGapAsk - Константа для повторного запуска автосохранения, если не смогли сделать сразу lock (только при автосохранении)

В функцию asc_Save добавил параметр isAutoSave - это если мы запускаем функцию из автосохранения
Переделал порядок сохранения. Теперь мы не ждем ответа от сервера сохранения документа, чтобы отослать всем свои изменения. Мы их отправляем сразу. Но не даем сохранять никому, пока сервер не сохранит документ. В связи с этим переделал информационные эвенты.

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@48650 954022d7-b5bf-4e40-9824-e11837661b57
parent 88028026
/** @define {boolean} */ /** @define {boolean} */
var ASC_DOCS_API_DEBUG = true; var ASC_DOCS_API_DEBUG = true;
var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
...@@ -540,6 +540,12 @@ function asc_docs_api(name) ...@@ -540,6 +540,12 @@ function asc_docs_api(name)
this.isSpellCheckEnable = true; this.isSpellCheckEnable = true;
/**************************************/ /**************************************/
// AutoSave
this.autoSaveGap = 0; // Интервал автосохранения (0 - означает, что автосохранения нет)
this.autoSaveTimeOutId = null; // Идентификатор таймаута
this.isAutoSave = false; // Флаг, означает что запущено автосохранение
this.autoSaveGapAsk = 5000; // Константа для повторного запуска автосохранения, если не смогли сделать сразу lock (только при автосохранении)
this.bInit_word_control = false; this.bInit_word_control = false;
this.isDocumentModify = false; this.isDocumentModify = false;
...@@ -815,6 +821,7 @@ asc_docs_api.prototype.LoadDocument = function(c_DocInfo) ...@@ -815,6 +821,7 @@ asc_docs_api.prototype.LoadDocument = function(c_DocInfo)
} }
else else
{ {
// ToDo убрать зависимость от this.FontLoader.fontFilesPath
documentUrl = this.FontLoader.fontFilesPath + "../Word/document/"; documentUrl = this.FontLoader.fontFilesPath + "../Word/document/";
this.DocInfo.put_OfflineApp(true); this.DocInfo.put_OfflineApp(true);
...@@ -1433,6 +1440,24 @@ asc_docs_api.prototype._coSpellCheckInit = function() { ...@@ -1433,6 +1440,24 @@ asc_docs_api.prototype._coSpellCheckInit = function() {
asc_docs_api.prototype.asc_getSpellCheckLanguages = function() { asc_docs_api.prototype.asc_getSpellCheckLanguages = function() {
return g_spellCheckLanguages; return g_spellCheckLanguages;
}; };
/////////////////////////////////////////////////////////////////////////
////////////////////////////AutoSave api/////////////////////////////////
/////////////////////////////////////////////////////////////////////////
asc_docs_api.prototype.autoSaveInit = function (autoSaveGap) {
if (autoSaveGap || this.autoSaveGap) {
// Очищаем предыдущий таймер
if (null !== this.autoSaveTimeOutId)
clearTimeout(this.autoSaveTimeOutId);
var t = this;
this.autoSaveTimeOutId = setTimeout(function () {
t.autoSaveTimeOutId = null;
if (t.isDocumentModified())
t.asc_Save(/*isAutoSave*/true);
else
t.autoSaveInit();
}, (autoSaveGap || this.autoSaveGap));
}
};
// get functions // get functions
// Возвращает // Возвращает
...@@ -2212,43 +2237,38 @@ asc_docs_api.prototype.Paste = function() ...@@ -2212,43 +2237,38 @@ asc_docs_api.prototype.Paste = function()
asc_docs_api.prototype.Share = function(){ asc_docs_api.prototype.Share = function(){
} }
asc_docs_api.prototype.asc_Save = function() asc_docs_api.prototype.asc_Save = function (isAutoSave) {
{ if(true === this.canSave) {
if(true == this.canSave)
{
this.canSave = false; this.canSave = false;
// Не даем пользователю что-нибудь менять пока не закончится сохранени editor.sync_StartAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
CollaborativeEditing.m_bGlobalLock = true; this.isAutoSave = !!isAutoSave;
editor.sync_StartAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.Save); if (!this.isAutoSave)
editor.sync_StartAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.PrepareToSave);
this.CoAuthoringApi.askSaveChanges( OnSave_Callback ); this.CoAuthoringApi.askSaveChanges( OnSave_Callback );
} }
} };
asc_docs_api.prototype.asc_OnSaveEnd = function(isDocumentSaved) asc_docs_api.prototype.asc_OnSaveEnd = function (isDocumentSaved) {
{
this.canSave = true; this.canSave = true;
editor.sync_EndAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.Save); this.isAutoSave = false;
//Обратно выставляем, что документ не модифицирован editor.sync_EndAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
editor.SetUnchangedDocument(); if (isDocumentSaved) {
// Пересылаем свои изменения
if(isDocumentSaved)
{
CollaborativeEditing.Send_Changes();
editor.CoAuthoringApi.unSaveChanges(); editor.CoAuthoringApi.unSaveChanges();
}
else // Запускаем таймер автосохранения
{ this.autoSaveInit();
} else {
editor.CoAuthoringApi.unSaveChanges(); editor.CoAuthoringApi.unSaveChanges();
editor.CoAuthoringApi.logout(); editor.CoAuthoringApi.logout();
} }
return; };
}
function OnSave_Callback(e) function OnSave_Callback(e)
{ {
var nState; var nState;
if ( false == e["savelock"] ) { if ( false == e["savelock"] ) {
CollaborativeEditing.m_bGlobalLock = false; if (editor.isAutoSave)
editor.sync_StartAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.PrepareToSave);
if ( c_oAscCollaborativeMarksShowType.LastChanges === editor.CollaborativeMarksShowType ) if ( c_oAscCollaborativeMarksShowType.LastChanges === editor.CollaborativeMarksShowType )
CollaborativeEditing.Clear_CollaborativeMarks(); CollaborativeEditing.Clear_CollaborativeMarks();
...@@ -2283,12 +2303,33 @@ function OnSave_Callback(e) ...@@ -2283,12 +2303,33 @@ function OnSave_Callback(e)
editor.processSavedFile(incomeObject.data, true); editor.processSavedFile(incomeObject.data, true);
}, sData); }, sData);
} }
// Пересылаем свои изменения
CollaborativeEditing.Send_Changes();
//Обратно выставляем, что документ не модифицирован
editor.SetUnchangedDocument();
// Заканчиваем сохранение, т.к. мы хотим дать пользователю продолжать набирать документ
// Но сохранять до прихода ответа от сервера не сможет
editor.sync_EndAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.PrepareToSave);
} else { } else {
nState = editor.CoAuthoringApi.get_state(); nState = editor.CoAuthoringApi.get_state();
if (3 === nState) { if (3 === nState) {
// Отключаемся от сохранения, соединение потеряно // Отключаемся от сохранения, соединение потеряно
editor.sync_EndAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.Save); if (!editor.isAutoSave)
editor.sync_EndAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.PrepareToSave);
editor.sync_EndAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
editor.isAutoSave = false;
editor.canSave = true;
} else { } else {
// Если автосохранение, то не будем ждать ответа, а просто перезапустим таймер на немного
if (editor.isAutoSave) {
editor.isAutoSave = false;
editor.canSave = true;
editor.autoSaveInit(editor.autoSaveGapAsk);
return;
}
// Для автосохранения не стоит пытаться еще раз запросить... (нужно рестартовать функцию автосохранения)
setTimeout( function(){ editor.CoAuthoringApi.askSaveChanges( OnSave_Callback ); }, 1000 ); setTimeout( function(){ editor.CoAuthoringApi.askSaveChanges( OnSave_Callback ); }, 1000 );
} }
} }
...@@ -5816,7 +5857,9 @@ asc_docs_api.prototype.OpenDocumentEndCallback = function() ...@@ -5816,7 +5857,9 @@ asc_docs_api.prototype.OpenDocumentEndCallback = function()
{ {
window['qtDocBridge']['documentContentReady'] (); window['qtDocBridge']['documentContentReady'] ();
} }
// Запускаем таймер автосохранения
this.autoSaveInit();
} }
asc_docs_api.prototype.UpdateInterfaceState = function() asc_docs_api.prototype.UpdateInterfaceState = function()
...@@ -6441,12 +6484,13 @@ function sendCommand(editor, fCallback, rdata){ ...@@ -6441,12 +6484,13 @@ function sendCommand(editor, fCallback, rdata){
setTimeout( function(){sendCommand(editor, fCallback, JSON.stringify(rData))}, 3000); setTimeout( function(){sendCommand(editor, fCallback, JSON.stringify(rData))}, 3000);
break; break;
case "changes": case "changes":
editor.canSave = true;
editor.sync_EndAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.Save);
//var rData = {"id":documentId, "c":"sfc", "outputformat": c_oAscFileType.DOCX}; //var rData = {"id":documentId, "c":"sfc", "outputformat": c_oAscFileType.DOCX};
//sendCommand(editor, fCallback, JSON.stringify(rData)); //sendCommand(editor, fCallback, JSON.stringify(rData));
if(fCallback) if(fCallback)
fCallback(incomeObject); fCallback(incomeObject);
// Важно: потом сверху этот эвент придти не должен (т.е. мы не отправляем ссылку на документ наверх)
editor.asc_OnSaveEnd(/*isDocumentSaved*/true);
break; break;
case "save": case "save":
if(fCallback) if(fCallback)
......
...@@ -2,62 +2,61 @@ var c_oAscZoomType = { ...@@ -2,62 +2,61 @@ var c_oAscZoomType = {
Current :0, Current :0,
FitWidth:1, FitWidth:1,
FitPage :2 FitPage :2
} };
var c_oAscAsyncActionType = { var c_oAscAsyncActionType = {
Information : 0, Information : 0,
BlockInteraction : 1 BlockInteraction : 1
} };
var c_oAscAsyncAction = { var c_oAscAsyncAction = {
Open:0, // �������� ��������� Open : 0, // открытие документа
Save:1, Save : 1,
LoadDocumentFonts:2, // ��������� ����� ��������� (����� ����� ��������) LoadDocumentFonts : 2, // загружаем фонты документа (сразу после открытия)
LoadDocumentImages:3, // ��������� �������� ��������� (����� ����� �������� �������) LoadDocumentImages : 3, // загружаем картинки документа (сразу после загрузки шрифтов)
LoadFont:4, // ��������� ������� ������ LoadFont : 4, // подгрузка нужного шрифта
LoadImage:5, // ��������� �������� LoadImage : 5, // подгрузка картинки
DownloadAs:6, DownloadAs : 6,
Print:7,//����������� � PDF � ���������� � ������������ Print : 7, // конвертация в PDF и сохранение у пользователя
UploadImage:8, UploadImage : 8,
ApplyChanges:9 //���������� ��������� �� ������� ������������. ApplyChanges : 9, // применение изменений от другого пользователя.
} PrepareToSave : 10 // Подготовка к сохранению
};
//files type for Saving & DownloadAs //files type for Saving & DownloadAs
var c_oAscFileType = { var c_oAscFileType = {
INNER: 0x0041, INNER: 0x0041,
DOCX: 0x0041, DOCX: 0x0041,
DOC: 0x0042, DOC: 0x0042,
ODT: 0x0043, ODT: 0x0043,
RTF: 0x0044, RTF: 0x0044,
TXT: 0x0045, TXT: 0x0045,
HTML_ZIP: 0x0803, HTML_ZIP: 0x0803,
MHT: 0x0047, MHT: 0x0047,
PDF: 0x0802, PDF: 0x0802,
EPUB: 0x0048, EPUB: 0x0048,
FB2: 0x0049, FB2: 0x0049,
MOBI: 0x004a, MOBI: 0x004a,
DOCY: 0x1001 DOCY: 0x1001
} };
// Right = 0; Left = 1; Center = 2; Justify = 3; // Right = 0; Left = 1; Center = 2; Justify = 3;
var c_oAscAlignType = { var c_oAscAlignType = {
LEFT:0, LEFT:0,
CENTER:1, CENTER:1,
RIGHT:2, RIGHT:2,
JUSTIFY:3, JUSTIFY:3,
TOP:4, TOP:4,
MIDDLE:5, MIDDLE:5,
BOTTOM:6 BOTTOM:6
} };
// image wrap style // image wrap style
var c_oAscWrapStyle = var c_oAscWrapStyle = {
{
Inline:0, Inline:0,
Flow : 1 Flow : 1
} };
var c_oAscWrapStyle2 = var c_oAscWrapStyle2 = {
{
Inline : 0, Inline : 0,
Square : 1, Square : 1,
Tight : 2, Tight : 2,
...@@ -65,53 +64,52 @@ var c_oAscWrapStyle2 = ...@@ -65,53 +64,52 @@ var c_oAscWrapStyle2 =
TopAndBottom : 4, TopAndBottom : 4,
Behind : 5, Behind : 5,
InFront : 6 InFront : 6
} };
/*Error level & ID*/ /*Error level & ID*/
var c_oAscError = { var c_oAscError = {
Level: { Level: {
Critical:-1, Critical:-1,
NoCritical:0 NoCritical:0
}, },
ID : { ID : {
ServerSaveComplete: 3, ServerSaveComplete: 3,
ConvertationProgress: 2, ConvertationProgress: 2,
DownloadProgress: 1, DownloadProgress: 1,
No: 0, No: 0,
Unknown: -1, Unknown: -1,
ConvertationTimeout: -2, ConvertationTimeout: -2,
ConvertationError: -3, ConvertationError: -3,
DownloadError: -4, DownloadError: -4,
UnexpectedGuid: -5, UnexpectedGuid: -5,
Database: -6, Database: -6,
FileRequest: -7, FileRequest: -7,
FileVKey: -8, FileVKey: -8,
UplImageSize: -9, UplImageSize: -9,
UplImageExt: -10, UplImageExt: -10,
UplImageFileCount: -11, UplImageFileCount: -11,
NoSupportClipdoard: -12, NoSupportClipdoard: -12,
SplitCellMaxRows: -13, SplitCellMaxRows: -13,
SplitCellMaxCols: -14, SplitCellMaxCols: -14,
SplitCellRowsDivider: -15, SplitCellRowsDivider: -15,
CoAuthoringDisconnect: -18, CoAuthoringDisconnect: -18,
VKeyEncrypt: -20, VKeyEncrypt: -20,
KeyExpire: -21, KeyExpire: -21,
UserCountExceed: -22, UserCountExceed: -22,
MobileUnexpectedCharCount: -23 MobileUnexpectedCharCount: -23
}
} }
};
var c_oAscTypeSelectElement = var c_oAscTypeSelectElement = {
{
Paragraph : 0, Paragraph : 0,
Table : 1, Table : 1,
Image : 2, Image : 2,
Header : 3, Header : 3,
Hyperlink : 4, Hyperlink : 4,
SpellCheck : 5 SpellCheck : 5
} };
var c_oAscTableBordersType = { var c_oAscTableBordersType = {
LEFT:0, LEFT:0,
...@@ -123,26 +121,25 @@ var c_oAscTableBordersType = { ...@@ -123,26 +121,25 @@ var c_oAscTableBordersType = {
INSIDE:6, INSIDE:6,
OUTSIDE:7, OUTSIDE:7,
ALL:8 ALL:8
} };
var c_oAscImageUploadProp = {//�� ��� �������� ��������� �������� ���������� � ����� �� ��������(�������� ie9), ����� ��������� ����� ���� �������� ����������� ��������� � cwFileUploader.ashx var c_oAscImageUploadProp = {//Не все браузеры позволяют получить информацию о файле до загрузки(например ie9), меняя параметры здесь надо поменять аналогичные параметры в cwFileUploader.ashx
MaxFileSize:25000000, //25 mb MaxFileSize:25000000, //25 mb
SupportedFormats:[ "jpg", "jpeg", "jpe", "png", "gif", "bmp"] SupportedFormats:[ "jpg", "jpeg", "jpe", "png", "gif", "bmp"]
} };
var FONT_THUMBNAIL_HEIGHT = parseInt(7 * 96.0 / 25.4); var FONT_THUMBNAIL_HEIGHT = parseInt(7 * 96.0 / 25.4);
var c_oAscStyleImage = { var c_oAscStyleImage = {
Default :0, Default :0,
Document:1 Document:1
} };
var c_oAscLineDrawingRule = var c_oAscLineDrawingRule = {
{
Left : 0, Left : 0,
Center : 1, Center : 1,
Right : 2, Right : 2,
Top : 0, Top : 0,
Bottom : 2 Bottom : 2
} };
var align_Right = 0; var align_Right = 0;
var align_Left = 1; var align_Left = 1;
...@@ -159,13 +156,12 @@ var hdrftr_Default = 0x01; ...@@ -159,13 +156,12 @@ var hdrftr_Default = 0x01;
var hdrftr_Even = 0x02; var hdrftr_Even = 0x02;
var hdrftr_First = 0x03; var hdrftr_First = 0x03;
var c_oAscTableSelectionType = var c_oAscTableSelectionType = {
{
Cell : 0, Cell : 0,
Row : 1, Row : 1,
Column : 2, Column : 2,
Table : 3 Table : 3
} };
var linerule_AtLeast = 0; var linerule_AtLeast = 0;
var linerule_Auto = 1; var linerule_Auto = 1;
...@@ -174,34 +170,29 @@ var linerule_Exact = 2; ...@@ -174,34 +170,29 @@ var linerule_Exact = 2;
var shd_Clear = 0; var shd_Clear = 0;
var shd_Nil = 1; var shd_Nil = 1;
var c_oAscContextMenuTypes = var c_oAscContextMenuTypes = {
{ Common : 0, // Обычное контекстное меню
Common : 0, // ������� ����������� ���� ChangeHdrFtr : 1 // Специальное контестное меню для попадания в колонтитул
ChangeHdrFtr : 1 // ����������� ���������� ���� ��� ��������� � ���������� };
}
var c_oAscMouseMoveDataTypes = var c_oAscMouseMoveDataTypes = {
{
Common : 0, Common : 0,
Hyperlink : 1, Hyperlink : 1,
LockedObject : 2 LockedObject : 2
} };
var c_oAscMouseMoveLockedObjectType = var c_oAscMouseMoveLockedObjectType = {
{
Common : 0, Common : 0,
Header : 1, Header : 1,
Footer : 2 Footer : 2
} };
var c_oAscCollaborativeMarksShowType = var c_oAscCollaborativeMarksShowType = {
{
All : 0, All : 0,
LastChanges : 1 LastChanges : 1
}; };
var c_oAscRelativeFromH = var c_oAscRelativeFromH = {
{
Character : 0x00, Character : 0x00,
Column : 0x01, Column : 0x01,
InsideMargin : 0x02, InsideMargin : 0x02,
...@@ -212,8 +203,7 @@ var c_oAscRelativeFromH = ...@@ -212,8 +203,7 @@ var c_oAscRelativeFromH =
RightMargin : 0x07 RightMargin : 0x07
}; };
var c_oAscAlignH = var c_oAscAlignH = {
{
Center : 0x00, Center : 0x00,
Inside : 0x01, Inside : 0x01,
Left : 0x02, Left : 0x02,
...@@ -221,16 +211,14 @@ var c_oAscAlignH = ...@@ -221,16 +211,14 @@ var c_oAscAlignH =
Right : 0x04 Right : 0x04
}; };
var c_oAscChangeLevel = var c_oAscChangeLevel = {
{
BringToFront : 0x00, BringToFront : 0x00,
BringForward : 0x01, BringForward : 0x01,
SendToBack : 0x02, SendToBack : 0x02,
BringBackward: 0x03 BringBackward: 0x03
}; };
var c_oAscRelativeFromV = var c_oAscRelativeFromV = {
{
BottomMargin : 0x00, BottomMargin : 0x00,
InsideMargin : 0x01, InsideMargin : 0x01,
Line : 0x02, Line : 0x02,
...@@ -241,8 +229,7 @@ var c_oAscRelativeFromV = ...@@ -241,8 +229,7 @@ var c_oAscRelativeFromV =
TopMargin : 0x07 TopMargin : 0x07
}; };
var c_oAscAlignV = var c_oAscAlignV = {
{
Bottom : 0x00, Bottom : 0x00,
Center : 0x01, Center : 0x01,
Inside : 0x02, Inside : 0x02,
...@@ -250,21 +237,18 @@ var c_oAscAlignV = ...@@ -250,21 +237,18 @@ var c_oAscAlignV =
Top : 0x04 Top : 0x04
}; };
var c_oAscVertAlignJc = var c_oAscVertAlignJc = {
{
Top : 0x00, // var vertalignjc_Top = 0x00; Top : 0x00, // var vertalignjc_Top = 0x00;
Center : 0x01, // var vertalignjc_Center = 0x01; Center : 0x01, // var vertalignjc_Center = 0x01;
Bottom : 0x02 // var vertalignjc_Bottom = 0x02 Bottom : 0x02 // var vertalignjc_Bottom = 0x02
}; };
var c_oAscTableLayout = var c_oAscTableLayout = {
{
AutoFit : 0x00, AutoFit : 0x00,
Fixed : 0x01 Fixed : 0x01
}; };
var c_oAscHAnchor = var c_oAscHAnchor = {
{
Margin : 0x00, Margin : 0x00,
Page : 0x01, Page : 0x01,
Text : 0x02, Text : 0x02,
...@@ -272,8 +256,7 @@ var c_oAscHAnchor = ...@@ -272,8 +256,7 @@ var c_oAscHAnchor =
PageInternal : 0xFF // только для внутреннего использования PageInternal : 0xFF // только для внутреннего использования
}; };
var c_oAscXAlign = var c_oAscXAlign = {
{
Center : 0x00, Center : 0x00,
Inside : 0x01, Inside : 0x01,
Left : 0x02, Left : 0x02,
...@@ -281,8 +264,7 @@ var c_oAscXAlign = ...@@ -281,8 +264,7 @@ var c_oAscXAlign =
Right : 0x04 Right : 0x04
}; };
var c_oAscYAlign = var c_oAscYAlign = {
{
Bottom : 0x00, Bottom : 0x00,
Center : 0x01, Center : 0x01,
Inline : 0x02, Inline : 0x02,
...@@ -291,8 +273,7 @@ var c_oAscYAlign = ...@@ -291,8 +273,7 @@ var c_oAscYAlign =
Top : 0x05 Top : 0x05
}; };
var c_oAscVAnchor = var c_oAscVAnchor = {
{
Margin : 0x00, Margin : 0x00,
Page : 0x01, Page : 0x01,
Text : 0x02 Text : 0x02
...@@ -359,8 +340,7 @@ var c_oAscLineBeginType = { ...@@ -359,8 +340,7 @@ var c_oAscLineBeginType = {
Triangle: 5 Triangle: 5
}; };
var c_oAscLineBeginSize = var c_oAscLineBeginSize = {
{
small_small : 0, small_small : 0,
small_mid : 1, small_mid : 1,
small_large : 2, small_large : 2,
......
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