Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
sdkjs
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boris Kocherov
sdkjs
Commits
935a5375
Commit
935a5375
authored
Oct 06, 2016
by
konovalovsergey
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
operation transformation mine/theirs changes, remove renameWsToCollaborate
parent
4bbaddbf
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
377 additions
and
251 deletions
+377
-251
cell/model/History.js
cell/model/History.js
+0
-32
cell/model/UndoRedo.js
cell/model/UndoRedo.js
+168
-141
cell/model/Workbook.js
cell/model/Workbook.js
+209
-78
No files found.
cell/model/History.js
View file @
935a5375
...
...
@@ -165,7 +165,6 @@ function CHistory()
// Параметры для специального сохранения для локальной версии редактора
this
.
UserSaveMode
=
false
;
this
.
UserSavedIndex
=
null
;
// Номер точки, на которой произошло последнее сохранение пользователем (не автосохранение)
this
.
changesFormula
=
{};
}
CHistory
.
prototype
.
init
=
function
(
workbook
)
{
this
.
workbook
=
workbook
;
...
...
@@ -901,37 +900,6 @@ CHistory.prototype._CheckCanNotAddChanges = function () {
}
catch
(
e
)
{
}
};
CHistory
.
prototype
.
changesFormulaAdd
=
function
(
formula
)
{
this
.
changesFormula
[
formula
.
getListenerId
()]
=
formula
;
};
CHistory
.
prototype
.
changesFormulaBuildDep
=
function
()
{
for
(
var
listenerId
in
this
.
changesFormula
)
{
this
.
changesFormula
[
listenerId
].
buildDependencies
();
}
};
CHistory
.
prototype
.
changesFormulaRemoveDep
=
function
()
{
for
(
var
listenerId
in
this
.
changesFormula
)
{
this
.
changesFormula
[
listenerId
].
removeDependencies
();
}
this
.
changesFormula
=
{};
};
CHistory
.
prototype
.
onFormulaEvent
=
function
(
type
,
eventData
)
{
if
(
AscCommon
.
c_oNotifyParentType
.
CanDo
===
type
)
{
return
true
;
}
else
if
(
AscCommon
.
c_oNotifyParentType
.
Change
===
type
)
{
eventData
.
formula
.
setIsDirty
(
false
);
}
else
if
(
AscCommon
.
c_oNotifyParentType
.
ChangeFormula
===
type
)
{
if
(
eventData
.
isRebuild
)
{
delete
this
.
changesFormula
[
eventData
.
formula
.
getListenerId
()];
eventData
.
formula
=
new
AscCommonExcel
.
parserFormula
(
eventData
.
assemble
,
this
,
eventData
.
formula
.
ws
);
eventData
.
formula
.
parse
();
this
.
addFormula
(
eventData
.
formula
);
}
else
{
eventData
.
formula
.
Formula
=
eventData
.
assemble
;
}
eventData
.
formula
.
buildDependencies
();
}
};
//------------------------------------------------------------export--------------------------------------------------
window
[
'
AscCommon
'
]
=
window
[
'
AscCommon
'
]
||
{};
...
...
cell/model/UndoRedo.js
View file @
935a5375
...
...
@@ -555,12 +555,7 @@ UndoRedoData_CellSimpleData.prototype = {
{
case
this
.
Properties
.
Row
:
return
this
.
nRow
;
break
;
case
this
.
Properties
.
Col
:
return
this
.
nCol
;
break
;
case
this
.
Properties
.
NewVal
:
if
(
this
.
oNewVal
&&
this
.
sFormula
)
{
this
.
oNewVal
.
formula
=
this
.
sFormula
.
assemble
(
true
);
}
return
this
.
oNewVal
;
break
;
case
this
.
Properties
.
NewVal
:
return
this
.
oNewVal
;
break
;
}
return
null
;
},
...
...
@@ -1697,11 +1692,10 @@ var g_oUndoRedoData_DefinedNamesChangeProperties = {
oldName
:
0
,
newName
:
1
};
function
UndoRedoData_DefinedNamesChange
(
oldName
,
newName
,
formula
){
function
UndoRedoData_DefinedNamesChange
(
oldName
,
newName
){
this
.
Properties
=
g_oUndoRedoData_DefinedNamesChangeProperties
;
this
.
oldName
=
oldName
?
new
UndoRedoData_DefinedNames
(
oldName
.
Name
,
oldName
.
Ref
,
oldName
.
LocalSheetId
,
oldName
.
isTable
,
null
):
undefined
;
this
.
newName
=
newName
?
new
UndoRedoData_DefinedNames
(
newName
.
Name
,
newName
.
Ref
,
newName
.
LocalSheetId
,
newName
.
isTable
,
null
):
undefined
;
this
.
formula
=
formula
;
}
UndoRedoData_DefinedNamesChange
.
prototype
=
{
getType
:
function
()
...
...
@@ -1717,12 +1711,7 @@ UndoRedoData_DefinedNamesChange.prototype = {
switch
(
nType
)
{
case
this
.
Properties
.
oldName
:
return
this
.
oldName
;
break
;
case
this
.
Properties
.
newName
:
if
(
this
.
newName
&&
this
.
formula
)
{
this
.
newName
.
Ref
=
this
.
formula
.
assemble
(
true
);
}
return
this
.
newName
;
break
;
case
this
.
Properties
.
newName
:
return
this
.
newName
;
break
;
}
return
null
;
},
...
...
@@ -2855,16 +2844,17 @@ UndoRedoWorkbook.prototype = {
{
return
this
.
nType
;
},
Undo
:
function
(
Type
,
Data
,
nSheetId
)
Undo
:
function
(
Type
,
Data
,
nSheetId
,
opt_wb
)
{
this
.
UndoRedo
(
Type
,
Data
,
nSheetId
,
true
);
this
.
UndoRedo
(
Type
,
Data
,
nSheetId
,
true
,
opt_wb
);
},
Redo
:
function
(
Type
,
Data
,
nSheetId
)
Redo
:
function
(
Type
,
Data
,
nSheetId
,
opt_wb
)
{
this
.
UndoRedo
(
Type
,
Data
,
nSheetId
,
false
);
this
.
UndoRedo
(
Type
,
Data
,
nSheetId
,
false
,
opt_wb
);
},
UndoRedo
:
function
(
Type
,
Data
,
nSheetId
,
bUndo
)
UndoRedo
:
function
(
Type
,
Data
,
nSheetId
,
bUndo
,
opt_wb
)
{
var
wb
=
opt_wb
?
opt_wb
:
this
.
wb
;
var
bNeedTrigger
=
true
;
if
(
AscCH
.
historyitem_Workbook_SheetAdd
==
Type
)
{
...
...
@@ -2873,7 +2863,7 @@ UndoRedoWorkbook.prototype = {
if
(
bUndo
)
{
var
outputParams
=
{
sheet
:
null
};
this
.
wb
.
removeWorksheet
(
Data
.
insertBefore
,
outputParams
);
wb
.
removeWorksheet
(
Data
.
insertBefore
,
outputParams
);
//сохраняем тот sheet который удалили, иначе может возникнуть ошибка, если какой-то обьект запоминал ссылку на sheet(например):
//Добавляем лист -> Добавляем ссылку -> undo -> undo -> redo -> redo
Data
.
sheet
=
outputParams
.
sheet
;
...
...
@@ -2883,72 +2873,60 @@ UndoRedoWorkbook.prototype = {
if
(
null
!=
Data
.
sheet
)
{
//сюда заходим только если до этого было сделано Undo
this
.
wb
.
insertWorksheet
(
Data
.
insertBefore
,
Data
.
sheet
);
wb
.
insertWorksheet
(
Data
.
insertBefore
,
Data
.
sheet
);
}
else
{
var
name
=
Data
.
name
;
if
(
this
.
wb
.
bCollaborativeChanges
)
{
var
nIndex
=
this
.
wb
.
checkUniqueSheetName
(
name
);
if
(
-
1
!=
nIndex
)
{
var
oConflictWs
=
this
.
wb
.
getWorksheet
(
nIndex
);
if
(
null
!=
oConflictWs
)
oConflictWs
.
renameWsToCollaborate
(
this
.
wb
.
getUniqueSheetNameFrom
(
oConflictWs
.
getName
(),
true
));
}
}
var
ws
=
null
;
if
(
null
==
Data
.
sheetidfrom
)
this
.
wb
.
createWorksheet
(
Data
.
insertBefore
,
Data
.
name
,
Data
.
sheetid
);
wb
.
createWorksheet
(
Data
.
insertBefore
,
Data
.
name
,
Data
.
sheetid
);
else
{
var
oCurWorksheet
=
this
.
wb
.
getWorksheetById
(
Data
.
sheetidfrom
);
var
oCurWorksheet
=
wb
.
getWorksheetById
(
Data
.
sheetidfrom
);
var
nIndex
=
oCurWorksheet
.
getIndex
();
this
.
wb
.
copyWorksheet
(
nIndex
,
Data
.
insertBefore
,
Data
.
name
,
Data
.
sheetid
,
true
,
Data
.
tableNames
);
wb
.
copyWorksheet
(
nIndex
,
Data
.
insertBefore
,
Data
.
name
,
Data
.
sheetid
,
true
,
Data
.
tableNames
);
}
}
}
this
.
wb
.
handlers
.
trigger
(
"
updateWorksheetByModel
"
);
wb
.
handlers
.
trigger
(
"
updateWorksheetByModel
"
);
}
else
if
(
AscCH
.
historyitem_Workbook_SheetRemove
==
Type
)
{
if
(
bUndo
)
{
this
.
wb
.
insertWorksheet
(
Data
.
index
,
Data
.
sheet
);
wb
.
insertWorksheet
(
Data
.
index
,
Data
.
sheet
);
}
else
{
var
nIndex
=
Data
.
index
;
if
(
null
==
nIndex
)
{
var
oCurWorksheet
=
this
.
wb
.
getWorksheetById
(
Data
.
sheetId
);
var
oCurWorksheet
=
wb
.
getWorksheetById
(
Data
.
sheetId
);
if
(
oCurWorksheet
)
nIndex
=
oCurWorksheet
.
getIndex
();
}
if
(
null
!=
nIndex
)
{
this
.
wb
.
removeWorksheet
(
nIndex
);
wb
.
removeWorksheet
(
nIndex
);
}
}
this
.
wb
.
handlers
.
trigger
(
"
updateWorksheetByModel
"
);
wb
.
handlers
.
trigger
(
"
updateWorksheetByModel
"
);
}
else
if
(
AscCH
.
historyitem_Workbook_SheetMove
==
Type
)
{
if
(
bUndo
)
{
this
.
wb
.
replaceWorksheet
(
Data
.
to
,
Data
.
from
);
wb
.
replaceWorksheet
(
Data
.
to
,
Data
.
from
);
}
else
{
this
.
wb
.
replaceWorksheet
(
Data
.
from
,
Data
.
to
);
wb
.
replaceWorksheet
(
Data
.
from
,
Data
.
to
);
}
this
.
wb
.
handlers
.
trigger
(
"
updateWorksheetByModel
"
);
wb
.
handlers
.
trigger
(
"
updateWorksheetByModel
"
);
}
else
if
(
AscCH
.
historyitem_Workbook_SheetPositions
==
Type
)
{
if
(
Data
.
positions
){
var
wsActive
=
this
.
wb
.
getActiveWs
();
var
wsActive
=
wb
.
getActiveWs
();
//делаем вспомогательным map из sheetid
var
oTempSheetMap
=
{};
for
(
var
i
=
0
,
length
=
Data
.
positions
.
length
;
i
<
length
;
++
i
)
...
...
@@ -2956,45 +2934,45 @@ UndoRedoWorkbook.prototype = {
//находим sheet уникальные для данного пользователя и запоминаем перед каким sheetid они идут
var
oUniqueSheetId
=
{};
var
nLastId
=
null
;
for
(
var
i
=
0
,
length
=
this
.
wb
.
aWorksheets
.
length
;
i
<
length
;
++
i
)
for
(
var
i
=
0
,
length
=
wb
.
aWorksheets
.
length
;
i
<
length
;
++
i
)
{
var
ws
=
this
.
wb
.
aWorksheets
[
i
];
var
ws
=
wb
.
aWorksheets
[
i
];
var
id
=
ws
.
getId
();
if
(
null
==
oTempSheetMap
[
id
])
{
if
(
i
<
length
-
1
)
oUniqueSheetId
[
this
.
wb
.
aWorksheets
[
i
+
1
].
getId
()]
=
id
;
oUniqueSheetId
[
wb
.
aWorksheets
[
i
+
1
].
getId
()]
=
id
;
else
nLastId
=
id
;
}
}
//расставляем в соответствии с изменениями
this
.
wb
.
aWorksheets
=
[];
wb
.
aWorksheets
=
[];
for
(
var
i
=
0
,
length
=
Data
.
positions
.
length
;
i
<
length
;
++
i
)
{
var
sheetId
=
Data
.
positions
[
i
];
var
ws
=
this
.
wb
.
aWorksheetsById
[
sheetId
];
var
ws
=
wb
.
aWorksheetsById
[
sheetId
];
if
(
null
!=
ws
)
this
.
wb
.
aWorksheets
.
push
(
ws
);
wb
.
aWorksheets
.
push
(
ws
);
}
if
(
null
!=
nLastId
)
{
var
ws
=
this
.
wb
.
aWorksheetsById
[
nLastId
];
var
ws
=
wb
.
aWorksheetsById
[
nLastId
];
if
(
null
!=
ws
)
this
.
wb
.
aWorksheets
.
push
(
ws
);
wb
.
aWorksheets
.
push
(
ws
);
}
//не стал оптимизировать по скорости, потому что много добавленых sheet быть не может
while
(
true
)
{
for
(
var
i
=
0
,
length
=
this
.
wb
.
aWorksheets
.
length
;
i
<
length
;
++
i
)
for
(
var
i
=
0
,
length
=
wb
.
aWorksheets
.
length
;
i
<
length
;
++
i
)
{
var
ws
=
this
.
wb
.
aWorksheets
[
i
];
var
ws
=
wb
.
aWorksheets
[
i
];
var
insertId
=
oUniqueSheetId
[
ws
.
getId
()];
if
(
null
!=
insertId
)
{
var
insertWs
=
this
.
wb
.
aWorksheetsById
[
insertId
];
var
insertWs
=
wb
.
aWorksheetsById
[
insertId
];
if
(
null
!=
insertWs
)
this
.
wb
.
aWorksheets
.
splice
(
i
,
0
,
insertWs
);
wb
.
aWorksheets
.
splice
(
i
,
0
,
insertWs
);
delete
oUniqueSheetId
[
ws
.
getId
()];
}
}
...
...
@@ -3007,18 +2985,18 @@ UndoRedoWorkbook.prototype = {
if
(
bEmpty
)
break
;
}
this
.
wb
.
_updateWorksheetIndexes
(
wsActive
);
this
.
wb
.
handlers
.
trigger
(
"
updateWorksheetByModel
"
);
wb
.
_updateWorksheetIndexes
(
wsActive
);
wb
.
handlers
.
trigger
(
"
updateWorksheetByModel
"
);
}
}
else
if
(
AscCH
.
historyitem_Workbook_ChangeColorScheme
==
Type
)
{
bNeedTrigger
=
false
;
if
(
bUndo
)
this
.
wb
.
theme
.
themeElements
.
clrScheme
=
Data
.
oldVal
;
wb
.
theme
.
themeElements
.
clrScheme
=
Data
.
oldVal
;
else
this
.
wb
.
theme
.
themeElements
.
clrScheme
=
Data
.
newVal
;
this
.
wb
.
oApi
.
asc_AfterChangeColorScheme
();
wb
.
theme
.
themeElements
.
clrScheme
=
Data
.
newVal
;
wb
.
oApi
.
asc_AfterChangeColorScheme
();
}
else
if
(
AscCH
.
historyitem_Workbook_DefinedNamesChange
===
Type
||
AscCH
.
historyitem_Workbook_DefinedNamesChangeUndo
===
Type
)
{
var
oldName
,
newName
;
...
...
@@ -3026,22 +3004,46 @@ UndoRedoWorkbook.prototype = {
oldName
=
Data
.
newName
;
newName
=
Data
.
oldName
;
}
else
{
if
(
this
.
wb
.
bCollaborativeChanges
)
{
this
.
wb
.
handlers
.
trigger
(
"
asc_onLockDefNameManager
"
,
Asc
.
c_oAscDefinedNameReason
.
OK
);
if
(
wb
.
bCollaborativeChanges
)
{
wb
.
handlers
.
trigger
(
"
asc_onLockDefNameManager
"
,
Asc
.
c_oAscDefinedNameReason
.
OK
);
}
oldName
=
Data
.
oldName
;
newName
=
Data
.
newName
;
}
if
(
bUndo
||
AscCH
.
historyitem_Workbook_DefinedNamesChangeUndo
!==
Type
)
{
if
(
null
==
newName
)
{
this
.
wb
.
delDefinesNames
(
oldName
);
this
.
wb
.
handlers
.
trigger
(
"
asc_onDelDefName
"
)
wb
.
delDefinesNames
(
oldName
);
wb
.
handlers
.
trigger
(
"
asc_onDelDefName
"
)
}
else
{
this
.
wb
.
editDefinesNames
(
oldName
,
newName
);
this
.
wb
.
handlers
.
trigger
(
"
asc_onEditDefName
"
,
oldName
,
newName
);
wb
.
editDefinesNames
(
oldName
,
newName
);
wb
.
handlers
.
trigger
(
"
asc_onEditDefName
"
,
oldName
,
newName
);
}
}
}
},
forwardTransformationIsAffect
:
function
(
Type
)
{
return
AscCH
.
historyitem_Workbook_SheetAdd
===
Type
||
AscCH
.
historyitem_Workbook_SheetRemove
===
Type
||
AscCH
.
historyitem_Workbook_SheetMove
===
Type
||
AscCH
.
historyitem_Workbook_DefinedNamesChange
===
Type
;
},
forwardTransformationGet
:
function
(
Type
,
Data
,
nSheetId
)
{
if
(
AscCH
.
historyitem_Workbook_DefinedNamesChange
===
Type
)
{
if
(
Data
.
newName
&&
Data
.
newName
.
Ref
){
return
{
formula
:
Data
.
newName
.
Ref
};
}
}
else
if
(
AscCH
.
historyitem_Workbook_SheetAdd
===
Type
)
{
return
{
name
:
Data
.
name
};
}
return
null
;
},
forwardTransformationSet
:
function
(
Type
,
Data
,
nSheetId
,
getRes
)
{
if
(
AscCH
.
historyitem_Workbook_SheetAdd
===
Type
)
{
Data
.
name
=
getRes
.
name
;
}
else
if
(
AscCH
.
historyitem_Cell_ChangeValue
===
Type
)
{
if
(
Data
&&
Data
.
newName
){
Data
.
newName
.
Ref
=
getRes
.
formula
;
}
}
return
null
;
}
};
...
...
@@ -3157,6 +3159,20 @@ UndoRedoCell.prototype = {
{
cell
.
setCellStyle
(
Val
);
}
},
forwardTransformationGet
:
function
(
Type
,
Data
,
nSheetId
)
{
if
(
AscCH
.
historyitem_Cell_ChangeValue
===
Type
&&
Data
.
oNewVal
&&
Data
.
oNewVal
.
formula
)
{
return
{
formula
:
Data
.
oNewVal
.
formula
};
}
return
null
;
},
forwardTransformationSet
:
function
(
Type
,
Data
,
nSheetId
,
getRes
)
{
if
(
AscCH
.
historyitem_Cell_ChangeValue
===
Type
)
{
if
(
Data
&&
Data
.
oNewVal
){
Data
.
oNewVal
.
formula
=
getRes
.
formula
;
}
}
return
null
;
}
};
...
...
@@ -3169,27 +3185,28 @@ UndoRedoWoorksheet.prototype = {
{
return
this
.
nType
;
},
Undo
:
function
(
Type
,
Data
,
nSheetId
)
Undo
:
function
(
Type
,
Data
,
nSheetId
,
opt_wb
)
{
this
.
UndoRedo
(
Type
,
Data
,
nSheetId
,
true
);
this
.
UndoRedo
(
Type
,
Data
,
nSheetId
,
true
,
opt_wb
);
},
Redo
:
function
(
Type
,
Data
,
nSheetId
)
Redo
:
function
(
Type
,
Data
,
nSheetId
,
opt_wb
)
{
this
.
UndoRedo
(
Type
,
Data
,
nSheetId
,
false
);
this
.
UndoRedo
(
Type
,
Data
,
nSheetId
,
false
,
opt_wb
);
},
UndoRedo
:
function
(
Type
,
Data
,
nSheetId
,
bUndo
)
UndoRedo
:
function
(
Type
,
Data
,
nSheetId
,
bUndo
,
opt_wb
)
{
var
wb
=
opt_wb
?
opt_wb
:
this
.
wb
;
var
worksheetView
,
nRow
,
nCol
,
oLockInfo
,
cell
,
index
,
from
,
to
,
range
,
r1
,
c1
,
r2
,
c2
,
temp
,
i
,
length
,
data
;
var
bInsert
,
operType
;
// ToDo избавиться от этого
var
ws
=
this
.
wb
.
getWorksheetById
(
nSheetId
);
var
ws
=
wb
.
getWorksheetById
(
nSheetId
);
if
(
null
==
ws
)
return
;
var
collaborativeEditing
=
this
.
wb
.
oApi
.
collaborativeEditing
;
var
collaborativeEditing
=
wb
.
oApi
.
collaborativeEditing
;
if
(
AscCH
.
historyitem_Worksheet_RemoveCell
==
Type
)
{
nRow
=
Data
.
nRow
;
nCol
=
Data
.
nCol
;
if
(
false
!=
this
.
wb
.
bCollaborativeChanges
)
if
(
false
!=
wb
.
bCollaborativeChanges
)
{
nRow
=
collaborativeEditing
.
getLockOtherRow2
(
nSheetId
,
nRow
);
nCol
=
collaborativeEditing
.
getLockOtherColumn2
(
nSheetId
,
nCol
);
...
...
@@ -3197,7 +3214,7 @@ UndoRedoWoorksheet.prototype = {
oLockInfo
[
"
sheetId
"
]
=
nSheetId
;
oLockInfo
[
"
type
"
]
=
c_oAscLockTypeElem
.
Range
;
oLockInfo
[
"
rangeOrObjectId
"
]
=
new
Asc
.
Range
(
nCol
,
nRow
,
nCol
,
nRow
);
this
.
wb
.
aCollaborativeChangeElements
.
push
(
oLockInfo
);
wb
.
aCollaborativeChangeElements
.
push
(
oLockInfo
);
}
if
(
bUndo
)
{
...
...
@@ -3216,7 +3233,7 @@ UndoRedoWoorksheet.prototype = {
else
if
(
AscCH
.
historyitem_Worksheet_ColProp
==
Type
)
{
index
=
Data
.
index
;
if
(
false
!=
this
.
wb
.
bCollaborativeChanges
)
if
(
false
!=
wb
.
bCollaborativeChanges
)
{
if
(
AscCommonExcel
.
g_nAllColIndex
==
index
)
{
range
=
new
Asc
.
Range
(
0
,
0
,
gc_nMaxCol0
,
gc_nMaxRow0
);
...
...
@@ -3229,7 +3246,7 @@ UndoRedoWoorksheet.prototype = {
oLockInfo
[
"
sheetId
"
]
=
nSheetId
;
oLockInfo
[
"
type
"
]
=
c_oAscLockTypeElem
.
Range
;
oLockInfo
[
"
rangeOrObjectId
"
]
=
range
;
this
.
wb
.
aCollaborativeChangeElements
.
push
(
oLockInfo
);
wb
.
aCollaborativeChangeElements
.
push
(
oLockInfo
);
}
var
col
=
ws
.
_getCol
(
index
);
if
(
bUndo
)
...
...
@@ -3240,14 +3257,14 @@ UndoRedoWoorksheet.prototype = {
else
if
(
AscCH
.
historyitem_Worksheet_RowProp
==
Type
)
{
index
=
Data
.
index
;
if
(
false
!=
this
.
wb
.
bCollaborativeChanges
)
if
(
false
!=
wb
.
bCollaborativeChanges
)
{
index
=
collaborativeEditing
.
getLockOtherRow2
(
nSheetId
,
index
);
oLockInfo
=
new
AscCommonExcel
.
asc_CLockInfo
();
oLockInfo
[
"
sheetId
"
]
=
nSheetId
;
oLockInfo
[
"
type
"
]
=
c_oAscLockTypeElem
.
Range
;
oLockInfo
[
"
rangeOrObjectId
"
]
=
new
Asc
.
Range
(
0
,
index
,
gc_nMaxCol0
,
index
);
this
.
wb
.
aCollaborativeChangeElements
.
push
(
oLockInfo
);
wb
.
aCollaborativeChangeElements
.
push
(
oLockInfo
);
}
var
row
=
ws
.
_getRow
(
index
);
if
(
bUndo
)
...
...
@@ -3256,7 +3273,7 @@ UndoRedoWoorksheet.prototype = {
row
.
setHeightProp
(
Data
.
oNewVal
);
//TODO проверить без этой перерисовки и убрать!!!
//var workSheetView =
this.wb.oApi.wb.getWorksheetById(nSheetId);
//var workSheetView =
wb.oApi.wb.getWorksheetById(nSheetId);
//workSheetView.autoFilters.reDrawFilter(null, index);
}
else
if
(
AscCH
.
historyitem_Worksheet_RowHide
==
Type
)
...
...
@@ -3265,7 +3282,7 @@ UndoRedoWoorksheet.prototype = {
to
=
Data
.
to
;
nRow
=
Data
.
bRow
;
if
(
false
!=
this
.
wb
.
bCollaborativeChanges
)
if
(
false
!=
wb
.
bCollaborativeChanges
)
{
from
=
collaborativeEditing
.
getLockOtherRow2
(
nSheetId
,
from
);
to
=
collaborativeEditing
.
getLockOtherRow2
(
nSheetId
,
to
);
...
...
@@ -3274,7 +3291,7 @@ UndoRedoWoorksheet.prototype = {
oLockInfo
[
"
sheetId
"
]
=
nSheetId
;
oLockInfo
[
"
type
"
]
=
c_oAscLockTypeElem
.
Range
;
oLockInfo
[
"
rangeOrObjectId
"
]
=
new
Asc
.
Range
(
0
,
from
,
gc_nMaxCol0
,
to
);
this
.
wb
.
aCollaborativeChangeElements
.
push
(
oLockInfo
);
wb
.
aCollaborativeChangeElements
.
push
(
oLockInfo
);
}
if
(
bUndo
)
...
...
@@ -3284,7 +3301,7 @@ UndoRedoWoorksheet.prototype = {
if
(
bUndo
)
{
var
workSheetView
=
this
.
wb
.
oApi
.
wb
.
getWorksheetById
(
nSheetId
);
var
workSheetView
=
wb
.
oApi
.
wb
.
getWorksheetById
(
nSheetId
);
workSheetView
.
model
.
autoFilters
.
reDrawFilter
(
new
Asc
.
Range
(
0
,
from
,
ws
.
nColsCount
-
1
,
to
));
}
}
...
...
@@ -3292,7 +3309,7 @@ UndoRedoWoorksheet.prototype = {
{
from
=
Data
.
from
;
to
=
Data
.
to
;
if
(
false
!=
this
.
wb
.
bCollaborativeChanges
)
if
(
false
!=
wb
.
bCollaborativeChanges
)
{
from
=
collaborativeEditing
.
getLockOtherRow2
(
nSheetId
,
from
);
to
=
collaborativeEditing
.
getLockOtherRow2
(
nSheetId
,
to
);
...
...
@@ -3302,7 +3319,7 @@ UndoRedoWoorksheet.prototype = {
oLockInfo
[
"
sheetId
"
]
=
nSheetId
;
oLockInfo
[
"
type
"
]
=
c_oAscLockTypeElem
.
Range
;
oLockInfo
[
"
rangeOrObjectId
"
]
=
new
Asc
.
Range
(
0
,
from
,
gc_nMaxCol0
,
to
);
this
.
wb
.
aCollaborativeChangeElements
.
push
(
oLockInfo
);
wb
.
aCollaborativeChangeElements
.
push
(
oLockInfo
);
}
}
range
=
Asc
.
Range
(
0
,
from
,
gc_nMaxCol0
,
to
);
...
...
@@ -3317,18 +3334,18 @@ UndoRedoWoorksheet.prototype = {
}
// Нужно поменять пересчетные индексы для совместного редактирования (lock-элементы), но только если это не изменения от другого пользователя
if
(
true
!==
this
.
wb
.
bCollaborativeChanges
)
if
(
true
!==
wb
.
bCollaborativeChanges
)
ws
.
workbook
.
handlers
.
trigger
(
"
undoRedoAddRemoveRowCols
"
,
nSheetId
,
Type
,
range
,
bUndo
);
// ToDo Так делать неправильно, нужно поправить (перенести логику в model, а отрисовку отделить)
worksheetView
=
this
.
wb
.
oApi
.
wb
.
getWorksheetById
(
nSheetId
);
worksheetView
=
wb
.
oApi
.
wb
.
getWorksheetById
(
nSheetId
);
worksheetView
.
cellCommentator
.
updateCommentsDependencies
(
bInsert
,
operType
,
range
);
}
else
if
(
AscCH
.
historyitem_Worksheet_AddCols
==
Type
||
AscCH
.
historyitem_Worksheet_RemoveCols
==
Type
)
{
from
=
Data
.
from
;
to
=
Data
.
to
;
if
(
false
!=
this
.
wb
.
bCollaborativeChanges
)
if
(
false
!=
wb
.
bCollaborativeChanges
)
{
from
=
collaborativeEditing
.
getLockOtherColumn2
(
nSheetId
,
from
);
to
=
collaborativeEditing
.
getLockOtherColumn2
(
nSheetId
,
to
);
...
...
@@ -3338,7 +3355,7 @@ UndoRedoWoorksheet.prototype = {
oLockInfo
[
"
sheetId
"
]
=
nSheetId
;
oLockInfo
[
"
type
"
]
=
c_oAscLockTypeElem
.
Range
;
oLockInfo
[
"
rangeOrObjectId
"
]
=
new
Asc
.
Range
(
from
,
0
,
to
,
gc_nMaxRow0
);
this
.
wb
.
aCollaborativeChangeElements
.
push
(
oLockInfo
);
wb
.
aCollaborativeChangeElements
.
push
(
oLockInfo
);
}
}
...
...
@@ -3354,11 +3371,11 @@ UndoRedoWoorksheet.prototype = {
}
// Нужно поменять пересчетные индексы для совместного редактирования (lock-элементы), но только если это не изменения от другого пользователя
if
(
true
!==
this
.
wb
.
bCollaborativeChanges
)
if
(
true
!==
wb
.
bCollaborativeChanges
)
ws
.
workbook
.
handlers
.
trigger
(
"
undoRedoAddRemoveRowCols
"
,
nSheetId
,
Type
,
range
,
bUndo
);
// ToDo Так делать неправильно, нужно поправить (перенести логику в model, а отрисовку отделить)
worksheetView
=
this
.
wb
.
oApi
.
wb
.
getWorksheetById
(
nSheetId
);
worksheetView
=
wb
.
oApi
.
wb
.
getWorksheetById
(
nSheetId
);
worksheetView
.
cellCommentator
.
updateCommentsDependencies
(
bInsert
,
operType
,
range
);
}
else
if
(
AscCH
.
historyitem_Worksheet_ShiftCellsLeft
==
Type
||
AscCH
.
historyitem_Worksheet_ShiftCellsRight
==
Type
)
...
...
@@ -3367,7 +3384,7 @@ UndoRedoWoorksheet.prototype = {
c1
=
Data
.
c1
;
r2
=
Data
.
r2
;
c2
=
Data
.
c2
;
if
(
false
!=
this
.
wb
.
bCollaborativeChanges
)
if
(
false
!=
wb
.
bCollaborativeChanges
)
{
r1
=
collaborativeEditing
.
getLockOtherRow2
(
nSheetId
,
r1
);
c1
=
collaborativeEditing
.
getLockOtherColumn2
(
nSheetId
,
c1
);
...
...
@@ -3379,7 +3396,7 @@ UndoRedoWoorksheet.prototype = {
oLockInfo
[
"
sheetId
"
]
=
nSheetId
;
oLockInfo
[
"
type
"
]
=
c_oAscLockTypeElem
.
Range
;
oLockInfo
[
"
rangeOrObjectId
"
]
=
new
Asc
.
Range
(
c1
,
r1
,
c2
,
r2
);
this
.
wb
.
aCollaborativeChangeElements
.
push
(
oLockInfo
);
wb
.
aCollaborativeChangeElements
.
push
(
oLockInfo
);
}
}
...
...
@@ -3395,7 +3412,7 @@ UndoRedoWoorksheet.prototype = {
}
// ToDo Так делать неправильно, нужно поправить (перенести логику в model, а отрисовку отделить)
worksheetView
=
this
.
wb
.
oApi
.
wb
.
getWorksheetById
(
nSheetId
);
worksheetView
=
wb
.
oApi
.
wb
.
getWorksheetById
(
nSheetId
);
worksheetView
.
cellCommentator
.
updateCommentsDependencies
(
bInsert
,
operType
,
range
.
bbox
);
}
else
if
(
AscCH
.
historyitem_Worksheet_ShiftCellsTop
==
Type
||
AscCH
.
historyitem_Worksheet_ShiftCellsBottom
==
Type
)
...
...
@@ -3404,7 +3421,7 @@ UndoRedoWoorksheet.prototype = {
c1
=
Data
.
c1
;
r2
=
Data
.
r2
;
c2
=
Data
.
c2
;
if
(
false
!=
this
.
wb
.
bCollaborativeChanges
)
if
(
false
!=
wb
.
bCollaborativeChanges
)
{
r1
=
collaborativeEditing
.
getLockOtherRow2
(
nSheetId
,
r1
);
c1
=
collaborativeEditing
.
getLockOtherColumn2
(
nSheetId
,
c1
);
...
...
@@ -3416,7 +3433,7 @@ UndoRedoWoorksheet.prototype = {
oLockInfo
[
"
sheetId
"
]
=
nSheetId
;
oLockInfo
[
"
type
"
]
=
c_oAscLockTypeElem
.
Range
;
oLockInfo
[
"
rangeOrObjectId
"
]
=
new
Asc
.
Range
(
c1
,
r1
,
c2
,
r2
);
this
.
wb
.
aCollaborativeChangeElements
.
push
(
oLockInfo
);
wb
.
aCollaborativeChangeElements
.
push
(
oLockInfo
);
}
}
...
...
@@ -3432,14 +3449,14 @@ UndoRedoWoorksheet.prototype = {
}
// ToDo Так делать неправильно, нужно поправить (перенести логику в model, а отрисовку отделить)
worksheetView
=
this
.
wb
.
oApi
.
wb
.
getWorksheetById
(
nSheetId
);
worksheetView
=
wb
.
oApi
.
wb
.
getWorksheetById
(
nSheetId
);
worksheetView
.
cellCommentator
.
updateCommentsDependencies
(
bInsert
,
operType
,
range
.
bbox
);
}
else
if
(
AscCH
.
historyitem_Worksheet_Sort
==
Type
)
{
var
bbox
=
Data
.
bbox
;
var
places
=
Data
.
places
;
if
(
false
!=
this
.
wb
.
bCollaborativeChanges
)
if
(
false
!=
wb
.
bCollaborativeChanges
)
{
bbox
.
r1
=
collaborativeEditing
.
getLockOtherRow2
(
nSheetId
,
bbox
.
r1
);
bbox
.
c1
=
collaborativeEditing
.
getLockOtherColumn2
(
nSheetId
,
bbox
.
c1
);
...
...
@@ -3454,13 +3471,13 @@ UndoRedoWoorksheet.prototype = {
oLockInfo
[
"
sheetId
"
]
=
nSheetId
;
oLockInfo
[
"
type
"
]
=
c_oAscLockTypeElem
.
Range
;
oLockInfo
[
"
rangeOrObjectId
"
]
=
new
Asc
.
Range
(
bbox
.
c1
,
place
.
from
,
bbox
.
c2
,
place
.
from
);
this
.
wb
.
aCollaborativeChangeElements
.
push
(
oLockInfo
);
wb
.
aCollaborativeChangeElements
.
push
(
oLockInfo
);
}
}
range
=
ws
.
getRange3
(
bbox
.
r1
,
bbox
.
c1
,
bbox
.
r2
,
bbox
.
c2
);
range
.
_sortByArray
(
bbox
,
places
);
worksheetView
=
this
.
wb
.
oApi
.
wb
.
getWorksheetById
(
nSheetId
);
worksheetView
=
wb
.
oApi
.
wb
.
getWorksheetById
(
nSheetId
);
worksheetView
.
model
.
autoFilters
.
resetTableStyles
(
bbox
);
}
else
if
(
AscCH
.
historyitem_Worksheet_MoveRange
==
Type
)
...
...
@@ -3476,7 +3493,7 @@ UndoRedoWoorksheet.prototype = {
from
=
to
;
to
=
temp
;
}
if
(
false
!=
this
.
wb
.
bCollaborativeChanges
)
if
(
false
!=
wb
.
bCollaborativeChanges
)
{
var
coBBoxTo
=
Asc
.
Range
(
0
,
0
,
0
,
0
),
coBBoxFrom
=
Asc
.
Range
(
0
,
0
,
0
,
0
);
...
...
@@ -3496,7 +3513,7 @@ UndoRedoWoorksheet.prototype = {
else
{
ws
.
_moveRange
(
from
,
to
,
copyRange
);
}
worksheetView
=
this
.
wb
.
oApi
.
wb
.
getWorksheetById
(
nSheetId
);
worksheetView
=
wb
.
oApi
.
wb
.
getWorksheetById
(
nSheetId
);
if
(
bUndo
)
//если на Undo перемещается диапазон из форматированной таблицы - стиль форматированной таблицы не должен цепляться
{
worksheetView
.
model
.
autoFilters
.
_cleanStyleTable
(
to
);
...
...
@@ -3507,22 +3524,10 @@ UndoRedoWoorksheet.prototype = {
}
else
if
(
AscCH
.
historyitem_Worksheet_Rename
==
Type
)
{
if
(
bUndo
)
if
(
bUndo
)
{
ws
.
setName
(
Data
.
from
,
true
);
else
{
var
name
=
Data
.
to
;
if
(
this
.
wb
.
bCollaborativeChanges
)
{
var
nIndex
=
this
.
wb
.
checkUniqueSheetName
(
name
);
if
(
-
1
!=
nIndex
)
{
var
oConflictWs
=
this
.
wb
.
getWorksheet
(
nIndex
);
if
(
null
!=
oConflictWs
)
oConflictWs
.
renameWsToCollaborate
(
this
.
wb
.
getUniqueSheetNameFrom
(
oConflictWs
.
getName
(),
true
));
}
}
ws
.
setName
(
name
,
true
);
}
else
{
ws
.
setName
(
Data
.
to
,
true
);
}
}
else
if
(
AscCH
.
historyitem_Worksheet_Hide
==
Type
)
...
...
@@ -3560,7 +3565,7 @@ UndoRedoWoorksheet.prototype = {
from
=
null
;
if
(
null
!=
Data
.
from
&&
null
!=
Data
.
from
.
r1
&&
null
!=
Data
.
from
.
c1
&&
null
!=
Data
.
from
.
r2
&&
null
!=
Data
.
from
.
c2
)
{
from
=
new
Asc
.
Range
(
Data
.
from
.
c1
,
Data
.
from
.
r1
,
Data
.
from
.
c2
,
Data
.
from
.
r2
);
if
(
false
!=
this
.
wb
.
bCollaborativeChanges
)
{
if
(
false
!=
wb
.
bCollaborativeChanges
)
{
from
.
r1
=
collaborativeEditing
.
getLockOtherRow2
(
nSheetId
,
from
.
r1
);
from
.
c1
=
collaborativeEditing
.
getLockOtherColumn2
(
nSheetId
,
from
.
c1
);
from
.
r2
=
collaborativeEditing
.
getLockOtherRow2
(
nSheetId
,
from
.
r2
);
...
...
@@ -3570,7 +3575,7 @@ UndoRedoWoorksheet.prototype = {
to
=
null
;
if
(
null
!=
Data
.
to
&&
null
!=
Data
.
to
.
r1
&&
null
!=
Data
.
to
.
c1
&&
null
!=
Data
.
to
.
r2
&&
null
!=
Data
.
to
.
c2
)
{
to
=
new
Asc
.
Range
(
Data
.
to
.
c1
,
Data
.
to
.
r1
,
Data
.
to
.
c2
,
Data
.
to
.
r2
);
if
(
false
!=
this
.
wb
.
bCollaborativeChanges
)
{
if
(
false
!=
wb
.
bCollaborativeChanges
)
{
to
.
r1
=
collaborativeEditing
.
getLockOtherRow2
(
nSheetId
,
to
.
r1
);
to
.
c1
=
collaborativeEditing
.
getLockOtherColumn2
(
nSheetId
,
to
.
c1
);
to
.
r2
=
collaborativeEditing
.
getLockOtherRow2
(
nSheetId
,
to
.
r2
);
...
...
@@ -3604,7 +3609,7 @@ UndoRedoWoorksheet.prototype = {
from
=
null
;
if
(
null
!=
Data
.
from
&&
null
!=
Data
.
from
.
r1
&&
null
!=
Data
.
from
.
c1
&&
null
!=
Data
.
from
.
r2
&&
null
!=
Data
.
from
.
c2
)
{
from
=
new
Asc
.
Range
(
Data
.
from
.
c1
,
Data
.
from
.
r1
,
Data
.
from
.
c2
,
Data
.
from
.
r2
);
if
(
false
!=
this
.
wb
.
bCollaborativeChanges
)
{
if
(
false
!=
wb
.
bCollaborativeChanges
)
{
from
.
r1
=
collaborativeEditing
.
getLockOtherRow2
(
nSheetId
,
from
.
r1
);
from
.
c1
=
collaborativeEditing
.
getLockOtherColumn2
(
nSheetId
,
from
.
c1
);
from
.
r2
=
collaborativeEditing
.
getLockOtherRow2
(
nSheetId
,
from
.
r2
);
...
...
@@ -3614,7 +3619,7 @@ UndoRedoWoorksheet.prototype = {
to
=
null
;
if
(
null
!=
Data
.
to
&&
null
!=
Data
.
to
.
r1
&&
null
!=
Data
.
to
.
c1
&&
null
!=
Data
.
to
.
r2
&&
null
!=
Data
.
to
.
c2
)
{
to
=
new
Asc
.
Range
(
Data
.
to
.
c1
,
Data
.
to
.
r1
,
Data
.
to
.
c2
,
Data
.
to
.
r2
);
if
(
false
!=
this
.
wb
.
bCollaborativeChanges
)
{
if
(
false
!=
wb
.
bCollaborativeChanges
)
{
to
.
r1
=
collaborativeEditing
.
getLockOtherRow2
(
nSheetId
,
to
.
r1
);
to
.
c1
=
collaborativeEditing
.
getLockOtherColumn2
(
nSheetId
,
to
.
c1
);
to
.
r2
=
collaborativeEditing
.
getLockOtherRow2
(
nSheetId
,
to
.
r2
);
...
...
@@ -3652,13 +3657,33 @@ UndoRedoWoorksheet.prototype = {
}
}
else
if
(
AscCH
.
historyitem_Worksheet_ChangeFrozenCell
===
Type
)
{
worksheetView
=
this
.
wb
.
oApi
.
wb
.
getWorksheetById
(
nSheetId
);
worksheetView
=
wb
.
oApi
.
wb
.
getWorksheetById
(
nSheetId
);
var
updateData
=
bUndo
?
Data
.
from
:
Data
.
to
;
worksheetView
.
_updateFreezePane
(
updateData
.
c1
,
updateData
.
r1
,
/*lockDraw*/
true
);
}
else
if
(
AscCH
.
historyitem_Worksheet_SetTabColor
===
Type
)
{
ws
.
setTabColor
(
bUndo
?
Data
.
from
:
Data
.
to
);
}
},
forwardTransformationIsAffect
:
function
(
Type
)
{
return
AscCH
.
historyitem_Worksheet_AddRows
===
Type
||
AscCH
.
historyitem_Worksheet_RemoveRows
===
Type
||
AscCH
.
historyitem_Worksheet_AddCols
===
Type
||
AscCH
.
historyitem_Worksheet_RemoveCols
===
Type
||
AscCH
.
historyitem_Worksheet_ShiftCellsLeft
===
Type
||
AscCH
.
historyitem_Worksheet_ShiftCellsRight
===
Type
||
AscCH
.
historyitem_Worksheet_ShiftCellsTop
===
Type
||
AscCH
.
historyitem_Worksheet_ShiftCellsBottom
===
Type
||
AscCH
.
historyitem_Worksheet_MoveRange
===
Type
||
AscCH
.
historyitem_Worksheet_Rename
===
Type
;
},
forwardTransformationGet
:
function
(
Type
,
Data
,
nSheetId
)
{
if
(
AscCH
.
historyitem_Worksheet_Rename
===
Type
)
{
return
{
from
:
Data
.
from
,
name
:
Data
.
to
};
}
return
null
;
},
forwardTransformationSet
:
function
(
Type
,
Data
,
nSheetId
,
getRes
)
{
if
(
AscCH
.
historyitem_Worksheet_Rename
===
Type
)
{
Data
.
from
=
getRes
.
from
;
Data
.
to
=
getRes
.
name
;
}
return
null
;
}
};
...
...
@@ -3836,26 +3861,28 @@ UndoRedoAutoFilters.prototype = {
getClassType
:
function
()
{
return
this
.
nType
;
},
Undo
:
function
(
Type
,
Data
,
nSheetId
)
{
this
.
UndoRedo
(
Type
,
Data
,
nSheetId
,
true
);
Undo
:
function
(
Type
,
Data
,
nSheetId
,
opt_wb
)
{
this
.
UndoRedo
(
Type
,
Data
,
nSheetId
,
true
,
opt_wb
);
},
Redo
:
function
(
Type
,
Data
,
nSheetId
)
{
this
.
UndoRedo
(
Type
,
Data
,
nSheetId
,
false
);
Redo
:
function
(
Type
,
Data
,
nSheetId
,
opt_wb
)
{
this
.
UndoRedo
(
Type
,
Data
,
nSheetId
,
false
,
opt_wb
);
},
UndoRedo
:
function
(
Type
,
Data
,
nSheetId
,
bUndo
)
{
var
api
=
window
[
"
Asc
"
][
"
editor
"
]
;
if
(
!
api
.
wb
)
return
;
var
ws
=
api
.
wb
.
getWorksheetById
(
nSheetId
);
Data
.
worksheet
=
ws
;
var
autoFilters
=
ws
.
model
.
autoFilters
;
if
(
bUndo
==
true
)
{
autoFilters
.
Un
do
(
Type
,
Data
);
UndoRedo
:
function
(
Type
,
Data
,
nSheetId
,
bUndo
,
opt_wb
)
{
var
wb
=
opt_wb
?
opt_wb
:
this
.
wb
;
var
ws
=
wb
.
getWorksheetById
(
nSheetId
);
if
(
ws
){
var
autoFilters
=
ws
.
autoFilters
;
if
(
bUndo
==
true
)
{
autoFilters
.
Undo
(
Type
,
Data
)
;
}
else
autoFilters
.
Re
do
(
Type
,
Data
);
}
else
autoFilters
.
Redo
(
Type
,
Data
);
},
forwardTransformationIsAffect
:
function
(
Type
)
{
return
AscCH
.
historyitem_AutoFilter_Add
===
Type
||
AscCH
.
historyitem_AutoFilter_ChangeTableName
===
Type
||
AscCH
.
historyitem_AutoFilter_Empty
===
Type
;
}
};
...
...
cell/model/Workbook.js
View file @
935a5375
...
...
@@ -190,6 +190,9 @@ function getRangeType(oBBox){
}
DefName
.
prototype
=
{
clone
:
function
(
wb
){
return
new
DefName
(
wb
,
this
.
name
,
this
.
ref
,
this
.
sheetId
,
this
.
hidden
,
this
.
isTable
);
},
removeDependencies
:
function
()
{
if
(
this
.
parsedRef
)
{
this
.
parsedRef
.
removeDependencies
();
...
...
@@ -592,19 +595,8 @@ function getRangeType(oBBox){
res
.
setAscCDefName
(
newAscName
);
}
}
if
(
History
.
Is_On
()){
var
changesFormula
=
null
;
if
(
!
oldAscName
)
{
if
(
newAscName
.
Ref
)
{
changesFormula
=
new
parserFormula
(
newAscName
.
Ref
,
History
,
AscCommonExcel
.
g_DefNameWorksheet
);
changesFormula
.
parse
();
History
.
changesFormulaAdd
(
changesFormula
);
}
}
History
.
Add
(
AscCommonExcel
.
g_oUndoRedoWorkbook
,
AscCH
.
historyitem_Workbook_DefinedNamesChange
,
null
,
null
,
new
UndoRedoData_DefinedNamesChange
(
oldAscName
,
newAscName
,
changesFormula
));
}
History
.
Add
(
AscCommonExcel
.
g_oUndoRedoWorkbook
,
AscCH
.
historyitem_Workbook_DefinedNamesChange
,
null
,
null
,
new
UndoRedoData_DefinedNamesChange
(
oldAscName
,
newAscName
));
return
res
;
},
checkDefName
:
function
(
name
,
sheetIndex
)
{
...
...
@@ -897,6 +889,16 @@ function getRangeType(oBBox){
defName
.
setRef
(
defName
.
ref
,
true
,
true
);
});
},
getSnapshot
:
function
(
wb
)
{
var
res
=
new
DependencyGraph
(
wb
);
this
.
_foreachDefName
(
function
(
defName
){
//_addDefName because we don't need dependency
//include table defNames too.
res
.
_addDefName
(
defName
.
clone
(
wb
));
});
res
.
tableNameIndex
=
this
.
tableNameIndex
;
return
res
;
},
//internal
_addDefName
:
function
(
defName
)
{
var
nameIndex
=
getDefNameIndex
(
defName
.
name
);
...
...
@@ -1363,6 +1365,7 @@ Workbook.prototype.init=function(tableCustomFunc, bNoBuildDep){
this
.
dependencyFormulas
.
initOpen
();
this
.
dependencyFormulas
.
calcTree
();
}
this
.
snapshot
=
this
.
_getSnapshot
();
};
Workbook
.
prototype
.
rebuildColors
=
function
(){
AscCommonExcel
.
g_oColorManager
.
rebuildColors
();
...
...
@@ -1768,7 +1771,7 @@ Workbook.prototype._SerializeHistoryBase64 = function (oMemory, item, aPointChan
Workbook
.
prototype
.
SerializeHistory
=
function
(){
var
aRes
=
[];
//соединяем изменения, которые были до приема данных с теми, что получились после.
History
.
changesFormulaRemoveDep
();
var
worksheets
=
this
.
aWorksheets
,
t
,
j
,
length2
;
for
(
t
=
0
;
t
<
worksheets
.
length
;
++
t
)
{
...
...
@@ -1808,12 +1811,184 @@ Workbook.prototype.SerializeHistory = function(){
this
.
_SerializeHistoryBase64
(
oMemory
,
new
UndoRedoItemSerializable
(
AscCommonExcel
.
g_oUndoRedoWorkbook
,
AscCH
.
historyitem_Workbook_SheetPositions
,
null
,
null
,
oUndoRedoData_SheetPositions
),
aRes
);
}
this
.
aCollaborativeActions
=
[];
this
.
snapshot
=
this
.
_getSnapshot
();
}
return
aRes
;
};
Workbook
.
prototype
.
_getSnapshot
=
function
()
{
var
wb
=
new
Workbook
(
new
AscCommonExcel
.
asc_CHandlersList
(),
this
.
oApi
);
wb
.
dependencyFormulas
=
this
.
dependencyFormulas
.
getSnapshot
(
wb
);
for
(
var
i
=
0
;
i
<
this
.
aWorksheets
.
length
;
++
i
)
{
var
ws
=
this
.
aWorksheets
[
i
].
getSnapshot
(
wb
);
wb
.
aWorksheets
.
push
(
ws
);
wb
.
aWorksheetsById
[
ws
.
getId
()]
=
ws
;
}
return
wb
;
};
Workbook
.
prototype
.
_forwardTransformation
=
function
(
wbSnapshot
,
changesMine
,
changesTheir
)
{
History
.
TurnOff
();
//first mine changes to resolve conflict sheet names
var
res1
=
this
.
_forwardTransformationGetTransform
(
wbSnapshot
,
changesTheir
,
changesMine
);
var
res2
=
this
.
_forwardTransformationGetTransform
(
wbSnapshot
,
changesMine
,
changesTheir
);
//modify formulas at the end - to prevent negative effect during tranformation
var
i
,
elem
,
elemWrap
;
for
(
i
=
0
;
i
<
res1
.
modify
.
length
;
++
i
)
{
elemWrap
=
res1
.
modify
[
i
];
elem
=
elemWrap
.
elem
;
elem
.
oClass
.
forwardTransformationSet
(
elem
.
nActionType
,
elem
.
oData
,
elem
.
nSheetId
,
elemWrap
);
}
for
(
i
=
0
;
i
<
res2
.
modify
.
length
;
++
i
)
{
elemWrap
=
res2
.
modify
[
i
];
elem
=
elemWrap
.
elem
;
elem
.
oClass
.
forwardTransformationSet
(
elem
.
nActionType
,
elem
.
oData
,
elem
.
nSheetId
,
elemWrap
);
}
//rename current wb
for
(
var
oldName
in
res1
.
renameSheet
)
{
var
ws
=
this
.
getWorksheetByName
(
oldName
);
if
(
ws
)
{
ws
.
setName
(
res1
.
renameSheet
[
oldName
]);
}
}
History
.
TurnOn
();
};
Workbook
.
prototype
.
_forwardTransformationGetTransform
=
function
(
wbSnapshot
,
changesMaster
,
changesModify
)
{
var
res
=
{
modify
:
[],
renameSheet
:
{}};
var
changesMasterSelected
=
[];
var
i
,
elem
;
if
(
changesModify
.
length
>
0
)
{
//select useful master changes
for
(
i
=
0
;
i
<
changesMaster
.
length
;
++
i
)
{
elem
=
changesMaster
[
i
];
if
(
elem
.
oClass
&&
elem
.
oClass
.
forwardTransformationIsAffect
&&
elem
.
oClass
.
forwardTransformationIsAffect
(
elem
.
nActionType
))
{
changesMasterSelected
.
push
(
elem
);
}
}
}
if
(
changesMasterSelected
.
length
>
0
&&
changesModify
.
length
>
0
)
{
var
wbSnapshotCur
=
wbSnapshot
.
_getSnapshot
();
var
formulas
=
[];
for
(
i
=
0
;
i
<
changesModify
.
length
;
++
i
)
{
elem
=
changesModify
[
i
];
var
renameRes
=
null
;
if
(
elem
.
oClass
&&
elem
.
oClass
.
forwardTransformationGet
)
{
var
getRes
=
elem
.
oClass
.
forwardTransformationGet
(
elem
.
nActionType
,
elem
.
oData
,
elem
.
nSheetId
);
if
(
getRes
&&
getRes
.
formula
)
{
//inserted formulas
formulas
.
push
({
elem
:
elem
,
formula
:
getRes
.
formula
,
parsed
:
null
});
}
if
(
getRes
&&
getRes
.
name
)
{
//add/rename sheet
//get getUniqueSheetNameFrom if need
renameRes
=
this
.
_forwardTransformationRenameStart
(
wbSnapshotCur
.
_getSnapshot
(),
changesMasterSelected
,
getRes
);
}
}
if
(
elem
.
oClass
&&
elem
.
oClass
.
forwardTransformationIsAffect
&&
elem
.
oClass
.
forwardTransformationIsAffect
(
elem
.
nActionType
))
{
if
(
formulas
.
length
>
0
)
{
//modify all formulas before apply next change
this
.
_forwardTransformationFormula
(
wbSnapshotCur
.
_getSnapshot
(),
formulas
,
changesMasterSelected
,
res
);
formulas
=
[];
}
//apply useful mine change
elem
.
oClass
.
Redo
(
elem
.
nActionType
,
elem
.
oData
,
elem
.
nSheetId
,
wbSnapshotCur
);
}
if
(
renameRes
)
{
this
.
_forwardTransformationRenameEnd
(
renameRes
,
res
.
renameSheet
,
getRes
,
elem
);
}
}
this
.
_forwardTransformationFormula
(
wbSnapshotCur
,
formulas
,
changesMasterSelected
,
res
);
}
return
res
;
};
Workbook
.
prototype
.
_forwardTransformationRenameStart
=
function
(
wbSnapshot
,
changes
,
getRes
)
{
var
res
=
{
newName
:
null
};
for
(
var
i
=
0
;
i
<
changes
.
length
;
++
i
)
{
var
elem
=
changes
[
i
];
elem
.
oClass
.
Redo
(
elem
.
nActionType
,
elem
.
oData
,
elem
.
nSheetId
,
wbSnapshot
);
}
if
(
-
1
!=
wbSnapshot
.
checkUniqueSheetName
(
getRes
.
name
))
{
res
.
newName
=
wbSnapshot
.
getUniqueSheetNameFrom
(
getRes
.
name
,
true
);
}
return
res
;
};
Workbook
.
prototype
.
_forwardTransformationRenameEnd
=
function
(
renameRes
,
renameSheet
,
getRes
,
elemCur
)
{
var
isChange
=
false
;
if
(
getRes
.
from
)
{
var
renameCur
=
renameSheet
[
getRes
.
from
];
if
(
renameCur
)
{
//no need rename next formulas
delete
renameSheet
[
getRes
.
from
];
getRes
.
from
=
renameCur
;
isChange
=
true
;
}
}
if
(
renameRes
&&
renameRes
.
newName
)
{
renameSheet
[
getRes
.
name
]
=
renameRes
.
newName
;
getRes
.
name
=
renameRes
.
newName
;
isChange
=
true
;
}
//apply immediately cause it is conflict
if
(
isChange
&&
elemCur
.
oClass
.
forwardTransformationSet
)
{
elemCur
.
oClass
.
forwardTransformationSet
(
elemCur
.
nActionType
,
elemCur
.
oData
,
elemCur
.
nSheetId
,
getRes
);
}
};
Workbook
.
prototype
.
_forwardTransformationFormula
=
function
(
wbSnapshot
,
formulas
,
changes
,
res
)
{
if
(
formulas
.
length
>
0
)
{
var
i
,
elem
,
elemWrap
,
ws
;
//parse formulas
for
(
i
=
0
;
i
<
formulas
.
length
;
++
i
)
{
elemWrap
=
formulas
[
i
];
ws
=
wbSnapshot
.
getWorksheetById
(
elemWrap
.
elem
.
nSheetId
);
if
(
ws
)
{
elemWrap
.
parsed
=
new
parserFormula
(
elemWrap
.
formula
,
wbSnapshot
,
ws
);
elemWrap
.
parsed
.
parse
();
elemWrap
.
parsed
.
buildDependencies
();
}
}
//rename sheet first to prevent name conflict
for
(
var
oldName
in
res
.
renameSheet
)
{
ws
=
wbSnapshot
.
getWorksheetByName
(
oldName
);
if
(
ws
)
{
ws
.
setName
(
res
.
renameSheet
[
oldName
]);
}
}
//apply useful theirs changes
for
(
i
=
0
;
i
<
changes
.
length
;
++
i
)
{
elem
=
changes
[
i
];
elem
.
oClass
.
Redo
(
elem
.
nActionType
,
elem
.
oData
,
elem
.
nSheetId
,
wbSnapshot
);
}
//assemble
for
(
i
=
0
;
i
<
formulas
.
length
;
++
i
)
{
elemWrap
=
formulas
[
i
];
if
(
elemWrap
.
parsed
)
{
elem
=
elemWrap
.
elem
;
elemWrap
.
parsed
.
removeDependencies
();
elemWrap
.
formula
=
elemWrap
.
parsed
.
Formula
;
res
.
modify
.
push
(
elemWrap
);
}
}
}
};
Workbook
.
prototype
.
onFormulaEvent
=
function
(
type
,
eventData
)
{
if
(
AscCommon
.
c_oNotifyParentType
.
CanDo
===
type
)
{
return
true
;
}
else
if
(
AscCommon
.
c_oNotifyParentType
.
Change
===
type
)
{
eventData
.
formula
.
setIsDirty
(
false
);
}
else
if
(
AscCommon
.
c_oNotifyParentType
.
ChangeFormula
===
type
)
{
if
(
eventData
.
isRebuild
)
{
eventData
.
formula
=
new
AscCommonExcel
.
parserFormula
(
eventData
.
assemble
,
this
,
eventData
.
formula
.
ws
);
eventData
.
formula
.
parse
();
}
else
{
eventData
.
formula
.
Formula
=
eventData
.
assemble
;
}
eventData
.
formula
.
buildDependencies
();
}
};
Workbook
.
prototype
.
DeserializeHistory
=
function
(
aChanges
,
fCallback
){
var
oThis
=
this
;
History
.
changesFormulaBuildDep
();
//сохраняем те изменения, которые были до приема данных, потому что дальше undo/redo будет очищено
this
.
aCollaborativeActions
=
this
.
aCollaborativeActions
.
concat
(
History
.
GetSerializeArray
());
if
(
aChanges
.
length
>
0
)
...
...
@@ -1888,6 +2063,8 @@ Workbook.prototype.DeserializeHistory = function(aChanges, fCallback){
History
.
SetSelectionRedo
(
null
);
var
oRedoObjectParam
=
new
AscCommonExcel
.
RedoObjectParam
();
History
.
UndoRedoPrepare
(
oRedoObjectParam
,
false
);
var
changesMine
=
[].
concat
.
apply
([],
oThis
.
aCollaborativeActions
);
oThis
.
_forwardTransformation
(
oThis
.
snapshot
,
changesMine
,
aUndoRedoElems
);
for
(
var
i
=
0
,
length
=
aUndoRedoElems
.
length
;
i
<
length
;
++
i
)
{
var
item
=
aUndoRedoElems
[
i
];
...
...
@@ -1924,6 +2101,8 @@ Workbook.prototype.DeserializeHistory = function(aChanges, fCallback){
History
.
UndoRedoEnd
(
null
,
oRedoObjectParam
,
false
);
oThis
.
bCollaborativeChanges
=
false
;
//make snapshot for faormulas
oThis
.
snapshot
=
oThis
.
_getSnapshot
();
History
.
Clear
();
if
(
null
!=
fCallback
)
fCallback
();
...
...
@@ -2141,7 +2320,18 @@ function Woorksheet(wb, _index, sId){
/*handlers*/
this
.
handlers
=
null
;
}
Woorksheet
.
prototype
.
getSnapshot
=
function
(
wb
)
{
var
ws
=
new
Woorksheet
(
wb
,
this
.
index
,
this
.
Id
);
ws
.
sName
=
this
.
sName
;
for
(
var
i
=
0
;
i
<
this
.
TableParts
.
length
;
++
i
)
{
var
table
=
this
.
TableParts
[
i
];
ws
.
TableParts
.
push
(
table
.
clone
(
null
,
table
.
Name
));
}
for
(
i
=
0
;
i
<
this
.
sheetViews
.
length
;
++
i
)
{
ws
.
sheetViews
.
push
(
this
.
sheetViews
[
i
].
clone
());
}
return
ws
;
};
Woorksheet
.
prototype
.
addContentChanges
=
function
(
changes
)
{
this
.
contentChanges
.
Add
(
changes
);
...
...
@@ -2695,51 +2885,6 @@ Woorksheet.prototype.rebuildTabColor = function() {
this
.
workbook
.
handlers
.
trigger
(
"
asc_onUpdateTabColor
"
,
this
.
getIndex
());
}
};
Woorksheet
.
prototype
.
renameWsToCollaborate
=
function
(
name
){
var
lastname
=
this
.
getName
();
//из-за особенностей реализации формул, сначала делаем parse со старым именем, потом преименовываем, потом assemble
var
aFormulas
=
[];
//переименование для отправки изменений
for
(
var
i
=
0
,
length
=
this
.
workbook
.
aCollaborativeActions
.
length
;
i
<
length
;
++
i
)
{
var
aPointActions
=
this
.
workbook
.
aCollaborativeActions
[
i
];
for
(
var
j
=
0
,
length2
=
aPointActions
.
length
;
j
<
length2
;
++
j
)
{
var
action
=
aPointActions
[
j
];
if
(
AscCommonExcel
.
g_oUndoRedoWorkbook
==
action
.
oClass
)
{
if
(
AscCH
.
historyitem_Workbook_SheetAdd
==
action
.
nActionType
)
{
if
(
lastname
==
action
.
oData
.
name
)
action
.
oData
.
name
=
name
;
}
}
else
if
(
AscCommonExcel
.
g_oUndoRedoWorksheet
==
action
.
oClass
)
{
if
(
AscCH
.
historyitem_Worksheet_Rename
==
action
.
nActionType
)
{
if
(
lastname
==
action
.
oData
.
to
)
action
.
oData
.
to
=
name
;
}
}
else
if
(
AscCommonExcel
.
g_oUndoRedoCell
==
action
.
oClass
)
{
if
(
action
.
oData
instanceof
UndoRedoData_CellSimpleData
)
{
if
(
action
.
oData
.
oNewVal
instanceof
UndoRedoData_CellValueData
)
{
var
oNewVal
=
action
.
oData
.
oNewVal
;
if
(
null
!=
oNewVal
.
formula
&&
-
1
!=
oNewVal
.
formula
.
indexOf
(
lastname
))
{
var
oParser
=
new
parserFormula
(
oNewVal
.
formula
,
null
,
this
);
oParser
.
parse
();
aFormulas
.
push
({
formula
:
oParser
,
value
:
oNewVal
});
}
}
}
}
}
}
//переименование для локальной версии
this
.
setName
(
name
);
for
(
var
i
=
0
,
length
=
aFormulas
.
length
;
i
<
length
;
++
i
)
{
var
item
=
aFormulas
[
i
];
item
.
value
.
formula
=
item
.
formula
.
assemble
();
}
};
Woorksheet
.
prototype
.
getHidden
=
function
(){
if
(
null
!=
this
.
bHidden
)
return
false
!=
this
.
bHidden
;
...
...
@@ -4396,14 +4541,9 @@ Cell.prototype.setValue=function(val,callback, isCopyPaste) {
DataNew
=
this
.
getValueData
();
}
if
(
History
.
Is_On
()
&&
false
==
DataOld
.
isEqual
(
DataNew
))
{
var
changesFormula
=
null
;
if
(
this
.
formulaParsed
)
{
changesFormula
=
this
.
formulaParsed
.
clone
(
null
,
History
,
ws
);
History
.
changesFormulaAdd
(
changesFormula
);
}
History
.
Add
(
AscCommonExcel
.
g_oUndoRedoCell
,
AscCH
.
historyitem_Cell_ChangeValue
,
this
.
ws
.
getId
(),
new
Asc
.
Range
(
this
.
nCol
,
this
.
nRow
,
this
.
nCol
,
this
.
nRow
),
new
UndoRedoData_CellSimpleData
(
this
.
nRow
,
this
.
nCol
,
DataOld
,
DataNew
,
changesFormula
));
new
UndoRedoData_CellSimpleData
(
this
.
nRow
,
this
.
nCol
,
DataOld
,
DataNew
));
}
//sortDependency вызывается ниже History.Add(AscCH.historyitem_Cell_ChangeValue, потому что в ней может быть выставлен формат ячейки(если это текстовый, то принимая изменения формула станет текстом)
this
.
ws
.
workbook
.
sortDependency
();
...
...
@@ -4452,17 +4592,8 @@ Cell.prototype.setValue2=function(array){
if
(
History
.
Is_On
())
{
DataNew
=
this
.
getValueData
();
if
(
false
==
DataOld
.
isEqual
(
DataNew
))
{
var
changesFormula
=
null
;
if
(
this
.
formulaParsed
)
{
changesFormula
=
new
parserFormula
(
formula
,
History
,
this
.
ws
);
changesFormula
.
parse
();
History
.
changesFormulaAdd
(
changesFormula
);
}
History
.
Add
(
AscCommonExcel
.
g_oUndoRedoCell
,
AscCH
.
historyitem_Cell_ChangeValue
,
this
.
ws
.
getId
(),
new
Asc
.
Range
(
this
.
nCol
,
this
.
nRow
,
this
.
nCol
,
this
.
nRow
),
new
UndoRedoData_CellSimpleData
(
this
.
nRow
,
this
.
nCol
,
DataOld
,
DataNew
,
changesFormula
));
}
if
(
false
==
DataOld
.
isEqual
(
DataNew
))
History
.
Add
(
AscCommonExcel
.
g_oUndoRedoCell
,
AscCH
.
historyitem_Cell_ChangeValue
,
this
.
ws
.
getId
(),
new
Asc
.
Range
(
this
.
nCol
,
this
.
nRow
,
this
.
nCol
,
this
.
nRow
),
new
UndoRedoData_CellSimpleData
(
this
.
nRow
,
this
.
nCol
,
DataOld
,
DataNew
));
}
};
Cell
.
prototype
.
removeDependencies
=
function
()
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment