/* * (c) Copyright Ascensio System SIA 2010-2024 * * This program is a free software product. You can redistribute it and/or * modify it under the terms of the GNU Affero General Public License (AGPL) * version 3 as published by the Free Software Foundation. In accordance with * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect * that Ascensio System SIA expressly excludes the warranty of non-infringement * of any third-party rights. * * This program is distributed WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html * * You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish * street, Riga, Latvia, EU, LV-1050. * * The interactive user interfaces in modified source and object code versions * of the Program must display Appropriate Legal Notices, as required under * Section 5 of the GNU AGPL version 3. * * Pursuant to Section 7(b) of the License you must retain the original Product * logo when distributing the program. Pursuant to Section 7(e) we decline to * grant you any rights under trademark law for use of our trademarks. * * All the Product's GUI elements, including illustrations and icon sets, as * well as technical writing content are licensed under the terms of the * Creative Commons Attribution-ShareAlike 4.0 International. See the License * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode * */ "use strict"; (/** * @param {Window} window * @param {undefined} undefined */ function (window, undefined) { // Import var c_oAscLockTypeElem = AscCommonExcel.c_oAscLockTypeElem; var c_oAscInsertOptions = Asc.c_oAscInsertOptions; var c_oAscDeleteOptions = Asc.c_oAscDeleteOptions; var gc_nMaxRow0 = AscCommon.gc_nMaxRow0; var gc_nMaxCol0 = AscCommon.gc_nMaxCol0; var c_oUndoRedoSerializeType = { Null: 0, Undefined: 1, SByte: 2, Byte: 3, Bool: 4, Long: 5, ULong: 6, Double: 7, String: 8, Object: 9, Array: 10 }; function DrawingCollaborativeData() { this.oClass = null; this.oBinaryReader = null; this.nPos = null; this.sChangedObjectId = null; this.isDrawingCollaborativeData = true; } //главный обьект для пересылки изменений function UndoRedoItemSerializable(oClass, nActionType, nSheetId, oRange, oData, LocalChange) { AscDFH.CChangesBase.call(this, this); this.oClass = oClass; this.nActionType = nActionType; this.nSheetId = nSheetId; this.oRange = oRange; this.oData = oData; this.LocalChange = LocalChange; } UndoRedoItemSerializable.prototype = Object.create(AscDFH.CChangesBase.prototype); UndoRedoItemSerializable.prototype.Serialize = function (oBinaryWriter, collaborativeEditing) { if ((this.oClass && this.oData && this.oData.getType) || (this.oClass && (this.oClass.Save_Changes || this.oClass.WriteToBinary))) { var oThis = this; var oBinaryCommonWriter = new AscCommon.BinaryCommonWriter(oBinaryWriter); oBinaryCommonWriter.WriteItemWithLength(function () { oThis.SerializeInner(oBinaryWriter, collaborativeEditing); }); } }; UndoRedoItemSerializable.prototype.SerializeInner = function (oBinaryWriter, collaborativeEditing) { //nClassType if (!this.oClass.WriteToBinary) { oBinaryWriter.WriteBool(true); var nClassType = this.oClass.getClassType(); oBinaryWriter.WriteByte(nClassType); //nActionType oBinaryWriter.WriteByte(this.nActionType); //nSheetId if (null != this.nSheetId) { oBinaryWriter.WriteBool(true); oBinaryWriter.WriteString2(this.nSheetId.toString()); } else { oBinaryWriter.WriteBool(false); } //oRange if (null != this.oRange) { oBinaryWriter.WriteBool(true); var c1 = this.oRange.c1; var c2 = this.oRange.c2; var r1 = this.oRange.r1; var r2 = this.oRange.r2; if (null != this.nSheetId && (0 != c1 || gc_nMaxCol0 != c2)) { c1 = collaborativeEditing.getLockMeColumn2(this.nSheetId, c1); c2 = collaborativeEditing.getLockMeColumn2(this.nSheetId, c2); } if (null != this.nSheetId && (0 != r1 || gc_nMaxRow0 != r2)) { r1 = collaborativeEditing.getLockMeRow2(this.nSheetId, r1); r2 = collaborativeEditing.getLockMeRow2(this.nSheetId, r2); } oBinaryWriter.WriteLong(c1); oBinaryWriter.WriteLong(r1); oBinaryWriter.WriteLong(c2); oBinaryWriter.WriteLong(r2); } else { oBinaryWriter.WriteBool(false); } //oData this.SerializeDataObject(oBinaryWriter, this.oData, this.nSheetId, collaborativeEditing); } else { oBinaryWriter.WriteBool(false); var Class; Class = this.oClass.GetClass(); oBinaryWriter.WriteString2(Class.Get_Id()); oBinaryWriter.WriteLong(this.oClass.Type); this.oClass.WriteToBinary(oBinaryWriter); } }; UndoRedoItemSerializable.prototype.SerializeDataObject = function (oBinaryWriter, oData, nSheetId, collaborativeEditing) { var oThis = this; if (oData.getType) { var nDataType = oData.getType(); //не далаем копию oData, а сдвигаем в ней, потому что все равно после сериализации изменения потруться // if (null != oData.applyCollaborative) { // oData.applyCollaborative(nSheetId, collaborativeEditing); // } oBinaryWriter.WriteByte(nDataType); var oBinaryCommonWriter = new AscCommon.BinaryCommonWriter(oBinaryWriter); if (oData.Write_ToBinary2) { oBinaryCommonWriter.WriteItemWithLength(function () { oData.Write_ToBinary2(oBinaryWriter) }); } else { oBinaryCommonWriter.WriteItemWithLength(function () { oThis.SerializeDataInnerObject(oBinaryWriter, oData, nSheetId, collaborativeEditing); }); } } else { oBinaryWriter.WriteByte(UndoRedoDataTypes.Unknown); oBinaryWriter.WriteLong(0); } }; UndoRedoItemSerializable.prototype.SerializeDataInnerObject = function (oBinaryWriter, oData, nSheetId, collaborativeEditing) { var oProperties = oData.getProperties(); for (var i in oProperties) { var nItemType = oProperties[i]; var oItem = oData.getProperty(nItemType, nSheetId); this.SerializeDataInner(oBinaryWriter, nItemType, oItem, nSheetId, collaborativeEditing); } }; UndoRedoItemSerializable.prototype.SerializeDataInnerArray = function (oBinaryWriter, oData, nSheetId, collaborativeEditing) { for (var i = 0; i < oData.length; ++i) { this.SerializeDataInner(oBinaryWriter, 0, oData[i], nSheetId, collaborativeEditing); } }; UndoRedoItemSerializable.prototype.SerializeDataInner = function (oBinaryWriter, nItemType, oItem, nSheetId, collaborativeEditing) { var oThis = this; var sTypeOf; if (null === oItem) { sTypeOf = "null"; } else if (oItem instanceof Array) { sTypeOf = "array"; } else { sTypeOf = typeof (oItem); } switch (sTypeOf) { case "object": oBinaryWriter.WriteByte(nItemType); oBinaryWriter.WriteByte(c_oUndoRedoSerializeType.Object); this.SerializeDataObject(oBinaryWriter, oItem, nSheetId, collaborativeEditing); break; case "array": oBinaryWriter.WriteByte(nItemType); oBinaryWriter.WriteByte(c_oUndoRedoSerializeType.Array); var oBinaryCommonWriter = new AscCommon.BinaryCommonWriter(oBinaryWriter); oBinaryCommonWriter.WriteItemWithLength(function () { oThis.SerializeDataInnerArray(oBinaryWriter, oItem, nSheetId, collaborativeEditing); }); break; case "number": oBinaryWriter.WriteByte(nItemType); var nFlorItem = Math.floor(oItem); if (nFlorItem == oItem) { if (-128 <= oItem && oItem <= 127) { oBinaryWriter.WriteByte(c_oUndoRedoSerializeType.SByte); oBinaryWriter.WriteSByte(oItem); } else if (127 < oItem && oItem <= 255) { oBinaryWriter.WriteByte(c_oUndoRedoSerializeType.Byte); oBinaryWriter.WriteByte(oItem); } else if (-0x80000000 <= oItem && oItem <= 0x7FFFFFFF) { oBinaryWriter.WriteByte(c_oUndoRedoSerializeType.Long); oBinaryWriter.WriteLong(oItem); } else if (0x7FFFFFFF < oItem && oItem <= 0xFFFFFFFF) { oBinaryWriter.WriteByte(c_oUndoRedoSerializeType.ULong); oBinaryWriter.WriteLong(oItem); } else { oBinaryWriter.WriteByte(c_oUndoRedoSerializeType.Double); oBinaryWriter.WriteDouble2(oItem); } } else { oBinaryWriter.WriteByte(c_oUndoRedoSerializeType.Double); oBinaryWriter.WriteDouble2(oItem); } break; case "boolean": oBinaryWriter.WriteByte(nItemType); oBinaryWriter.WriteByte(c_oUndoRedoSerializeType.Bool); oBinaryWriter.WriteBool(oItem); break; case "string": oBinaryWriter.WriteByte(nItemType); oBinaryWriter.WriteByte(c_oUndoRedoSerializeType.String); oBinaryWriter.WriteString2(oItem); break; case "null": oBinaryWriter.WriteByte(nItemType); oBinaryWriter.WriteByte(c_oUndoRedoSerializeType.Null); break; case "undefined": oBinaryWriter.WriteByte(nItemType); oBinaryWriter.WriteByte(c_oUndoRedoSerializeType.Undefined); break; default: break; } }; UndoRedoItemSerializable.prototype.Deserialize = function (oBinaryReader) { var res = AscCommon.c_oSerConstants.ReadOk; res = oBinaryReader.EnterFrame(4); var nLength = oBinaryReader.GetULongLE(); res = oBinaryReader.EnterFrame(nLength); if (AscCommon.c_oSerConstants.ReadOk != res || 0 === nLength) { return res; } var bNoDrawing = oBinaryReader.GetBool(); if (bNoDrawing) { var nClassType = oBinaryReader.GetUChar(); this.oClass = UndoRedoClassTypes.Create(nClassType); this.nActionType = oBinaryReader.GetUChar(); var bSheetId = oBinaryReader.GetBool(); if (bSheetId) { this.nSheetId = oBinaryReader.GetString2LE(oBinaryReader.GetULongLE()); } var bRange = oBinaryReader.GetBool(); if (bRange) { var nC1 = oBinaryReader.GetULongLE(); var nR1 = oBinaryReader.GetULongLE(); var nC2 = oBinaryReader.GetULongLE(); var nR2 = oBinaryReader.GetULongLE(); this.oRange = new Asc.Range(nC1, nR1, nC2, nR2); } else { this.oRange = null; } this.oData = this.DeserializeData(oBinaryReader); } else { var changedObjectId = oBinaryReader.GetString2(); this.nActionType = 1; this.oData = new DrawingCollaborativeData(); this.oData.sChangedObjectId = changedObjectId; this.oData.oBinaryReader = oBinaryReader; this.oData.nPos = oBinaryReader.cur; } }; UndoRedoItemSerializable.prototype.DeserializeData = function (oBinaryReader) { var nDataClassType = oBinaryReader.GetUChar(); var nLength = oBinaryReader.GetULongLE(); var oDataObject = UndoRedoDataTypes.Create(nDataClassType); if (null != oDataObject) { if (null != oDataObject.Read_FromBinary2) { oDataObject.Read_FromBinary2(oBinaryReader); } else if (null != oDataObject.Read_FromBinary2AndReplace) { oDataObject = oDataObject.Read_FromBinary2AndReplace(oBinaryReader); } else { this.DeserializeDataInner(oBinaryReader, oDataObject, nLength, false); } } else { oBinaryReader.Skip(nLength); } return oDataObject; }; UndoRedoItemSerializable.prototype.DeserializeDataInner = function (oBinaryReader, oDataObject, nLength, bIsArray) { var nStartPos = oBinaryReader.GetCurPos(); var nCurPos = nStartPos; while (nCurPos - nStartPos < nLength && nCurPos < oBinaryReader.GetSize() - 1) { var nMemeberType = oBinaryReader.GetUChar(); var nDataType = oBinaryReader.GetUChar(); var nUnknownType = false; var oNewValue = null; switch (nDataType) { case c_oUndoRedoSerializeType.Null: oNewValue = null; break; case c_oUndoRedoSerializeType.Undefined: oNewValue = undefined; break; case c_oUndoRedoSerializeType.Bool: oNewValue = oBinaryReader.GetBool(); break; case c_oUndoRedoSerializeType.SByte: oNewValue = oBinaryReader.GetChar(); break; case c_oUndoRedoSerializeType.Byte: oNewValue = oBinaryReader.GetUChar(); break; case c_oUndoRedoSerializeType.Long: oNewValue = oBinaryReader.GetLongLE(); break; case c_oUndoRedoSerializeType.ULong: oNewValue = AscFonts.FT_Common.IntToUInt(oBinaryReader.GetULongLE()); break; case c_oUndoRedoSerializeType.Double: oNewValue = oBinaryReader.GetDoubleLE(); break; case c_oUndoRedoSerializeType.String: oNewValue = oBinaryReader.GetString2LE(oBinaryReader.GetULongLE()); break; case c_oUndoRedoSerializeType.Object: oNewValue = this.DeserializeData(oBinaryReader); break; case c_oUndoRedoSerializeType.Array: var aNewArray = []; var nNewLength = oBinaryReader.GetULongLE(); this.DeserializeDataInner(oBinaryReader, aNewArray, nNewLength, true); oNewValue = aNewArray; break; default: nUnknownType = true; break; } if (false == nUnknownType) { if (bIsArray) { oDataObject.push(oNewValue); } else { oDataObject.setProperty(nMemeberType, oNewValue); } } nCurPos = oBinaryReader.GetCurPos(); } }; UndoRedoItemSerializable.prototype.GetChangedRange = function () { let res = null; let nActionType = this.nActionType; let classType = this.oClass.nType; if (classType === AscCommonExcel.g_oUndoRedoCell.nType) { res = this.oRange; } else if (classType === AscCommonExcel.g_oUndoRedoWorksheet.nType) { if (nActionType === AscCH.historyitem_Worksheet_Sort) { if (this.oData.bbox) { res = new Asc.Range(this.oData.bbox.c1, this.oData.bbox.r1, this.oData.bbox.c2, this.oData.bbox.r2); } } else if (nActionType === AscCH.historyitem_Worksheet_MoveRange) { //TODO all cols/rows in this.oRange if (this.oData) { res = []; if (this.oData.from) { res.push(new Asc.Range(this.oData.from.c1, this.oData.from.r1, this.oData.from.c2, this.oData.from.r2)); } if (this.oData.to) { res.push(new Asc.Range(this.oData.to.c1, this.oData.to.r1, this.oData.to.c2, this.oData.to.r2)); } } } } else if (classType === AscCommonExcel.g_oUndoRedoComment.nType) { res = new Asc.Range(this.oData.nCol, this.oData.nRow, this.oData.nCol, this.oData.nRow); } else if (classType === AscCommonExcel.g_oUndoRedoSortState.nType) { } else if (classType === AscCommonExcel.g_oUndoRedoCF.nType) { } else if (classType === AscCommonExcel.g_oUndoRedoAutoFilters.nType) { } else if (classType === AscCommonExcel.g_oUndoRedoCol.nType) { } else if (classType === AscCommonExcel.g_oUndoRedoRow.nType) { } return res; }; UndoRedoItemSerializable.prototype.Copy = function () { let oClass = this.oClass; if (this.oClass && this.oClass.Copy) { oClass = this.oClass.Copy(); } //todo clone oRange oData return new UndoRedoItemSerializable(oClass, this.nActionType, this.nSheetId, this.oRange, this.oData, this.LocalChange, null); }; UndoRedoItemSerializable.prototype.ConvertToSimpleActions = function() { if (this.oClass) { if (this.oClass.ConvertToSimpleActions) { return this.oClass.ConvertToSimpleActions(); } else if (this.oClass.ConvertToSimpleActionsSpreadsheet) { return this.oClass.ConvertToSimpleActionsSpreadsheet(this.nActionType, this.oData); } } var arrActions = []; return arrActions; }; UndoRedoItemSerializable.prototype.ConvertToSimpleChanges = function() { if (this.oClass) { if (this.oClass.ConvertToSimpleChanges) { return this.oClass.ConvertToSimpleChanges(); } else if (this.oClass.ConvertToSimpleChangesSpreadsheet) { return this.oClass.ConvertToSimpleChangesSpreadsheet(this); } } return []; }; UndoRedoItemSerializable.prototype.ConvertFromSimpleActions = function(arrActions) { if (this.oClass) { if (this.oClass.ConvertFromSimpleActions) { return this.oClass.ConvertFromSimpleActions(arrActions); } else if (this.oClass.ConvertFromSimpleActionsSpreadsheet) { return this.oClass.ConvertFromSimpleActionsSpreadsheet(arrActions, this.oData); } } }; UndoRedoItemSerializable.prototype.CreateReverseChange = function () { if (this.oClass && this.oClass.CreateReverseChange) { let change = this.oClass.CreateReverseChange(); if (change) { return new UndoRedoItemSerializable(change, this.nActionType, this.nSheetId, this.oRange, this.oData, this.LocalChange); } else { return null; } } else if (this.oClass && this.oClass.CreateReverseChangeSpreadsheet) { return this.oClass.CreateReverseChangeSpreadsheet(this.oClass, this.nActionType, this.nSheetId, this.oRange, this.oData, this.LocalChange); } return undefined; }; UndoRedoItemSerializable.prototype.IsRelated = function(oChanges) { if (this.oClass && oChanges.oClass) { if (this.oClass.IsRelated) { return this.oClass.IsRelated(oChanges.oClass); } else if(this.oClass.IsRelatedSpreadsheet){ return this.oClass.IsRelatedSpreadsheet(oChanges.oClass, oChanges.nActionType); } } return false; }; UndoRedoItemSerializable.prototype.IsContentChange = function () { if (this.oClass) { if (this.oClass.IsContentChange) { return this.oClass.IsContentChange(); } else if (this.oClass.IsContentChangeSpreadsheet) { return this.oClass.IsContentChangeSpreadsheet(this.nActionType); } } return false; }; UndoRedoItemSerializable.prototype.CommuteRelated = function (oActionToUndo, oActionOther) { if (oActionToUndo.oClass && oActionToUndo.oClass.CommuteRelated) { //ничего не делаем если есть изменения на удаленном листе if (!AscCommonExcel.g_oUndoRedoWorkbook.CommuteRelatedRemoveSheet(oActionToUndo.nSheetId, oActionOther)) { return false; } //todo don't use global api let api = window["Asc"]["editor"]; if (api && api.wbModel && api.collaborativeEditing.oRedoObjectParam && api.collaborativeEditing.oRedoObjectParam.snapshot) { let snapshot = api.collaborativeEditing.oRedoObjectParam.snapshot; //todo batch transform api.wbModel._forwardTransformation(snapshot, [oActionToUndo], [oActionOther], true); } return oActionToUndo.oClass.CommuteRelated(oActionToUndo, oActionOther); } else if (oActionToUndo.oClass.WriteToBinary) { //todo просмотреть измнения автофигур которые зависят от сдвигов return true; } return false; }; UndoRedoItemSerializable.prototype.ToHistoryItem = function () { return { Class : this.oClass || this.Class, Type : this.nActionType, SheetId : this.nSheetId, Range : this.oRange, Data : this.oData, LocalChange: this.LocalChange, Binary : { Pos : 0, Len : 0 } }; }; UndoRedoItemSerializable.prototype.Load = function () { AscFormat.ExecuteNoHistory(function () { var api = window["Asc"]["editor"]; if (!api.wb) { return; } AscCommon.History.RedoExecuteItem(this.ToHistoryItem(), api.collaborativeEditing.oRedoObjectParam, true); }, this); }; UndoRedoItemSerializable.prototype.Redo = function () { this.oClass.Redo(this.nActionType, this.oData, this.nSheetId); }; UndoRedoItemSerializable.prototype.Undo = function () { this.oClass.Undo(this.nActionType, this.oData, this.nSheetId); }; UndoRedoItemSerializable.prototype.IsSpreadsheetChange = function () { return true; }; function CChangesPointChange(Class, Point, snapshot) { //todo наследование от CChangesTableIdDescription AscDFH.CChangesBase.call(this, Class); this.Point = Point; this.snapshot = snapshot; } CChangesPointChange.prototype = Object.create(AscDFH.CChangesBase.prototype); CChangesPointChange.prototype.constructor = CChangesPointChange; CChangesPointChange.prototype.Properties = {}; CChangesPointChange.prototype.getType = function () { return UndoRedoDataTypes.Unknown; }; CChangesPointChange.prototype.getProperties = function () { return this.Properties; }; CChangesPointChange.prototype.getProperty = function (nType) { return null; }; CChangesPointChange.prototype.setProperty = function (nType, value) { } CChangesPointChange.prototype.CreateReverseChangeSpreadsheet = function() { let Point = Object.assign({}, this.Point); let tmp = Point.SelectRangeRedo; Point.SelectRangeRedo = Point.SelectRange; Point.SelectRange = tmp; tmp = Point.RedoSheetId; Point.RedoSheetId = Point.UndoSheetId; Point.UndoSheetId = tmp; return new CChangesPointChange(this.Class, Point, this.snapshot); }; CChangesPointChange.prototype.CommuteRelated = function (oActionToUndo, oActionOther) { if(!this.Point || !this.Point.SelectRangeRedo) { return true; } var oSelectRange = null; if (this.Point.SelectRangeRedo) oSelectRange = this.Point.SelectRangeRedo; else if(this.Point.SelectRange) oSelectRange = this.Point.SelectRange; if (null != oSelectRange) { AscCommonExcel.g_oUndoRedoWorksheet.CommuteRelatedRange(oSelectRange, oActionOther); } return true; } window['AscDFH'].CChangesPointChange = CChangesPointChange; //для сохранения в историю и пересылки изменений var UndoRedoDataTypes = new function () { this.Unknown = -1; this.CellSimpleData = 0; this.CellValue = 1; this.ValueMultiTextElem = 2; this.CellValueData = 3; this.CellData = 4; this.FromTo = 5; this.FromToRowCol = 6; this.FromToHyperlink = 7; this.IndexSimpleProp = 8; this.ColProp = 9; this.RowProp = 10; this.BBox = 11; this.StyleFont = 12; this.StyleFill = 13; this.StyleNum = 14; this.StyleBorder = 15; this.StyleBorderProp = 16; this.StyleXfs = 17; this.StyleAlign = 18; this.Hyperlink = 19; this.SortData = 20; this.CommentData = 21; this.CommentCoords = 22; this.ChartSeriesData = 24; this.SheetAdd = 25; this.SheetRemove = 26; this.ClrScheme = 28; this.AutoFilter = 29; this.AutoFiltersOptions = 30; this.AutoFilterObj = 31; this.AutoFiltersOptionsElements = 32; this.SingleProperty = 33; this.RgbColor = 34; this.ThemeColor = 35; this.CustomFilters = 36; this.CustomFilter = 37; this.ColorFilter = 38; this.DefinedName = 39; this.AdvancedTableInfoSettings = 40; this.AddFormatTableOptions = 63; this.SheetPr = 69; this.DynamicFilter = 75; this.Top10 = 76; this.DataField = 79; this.PivotTable = 80; this.PivotField = 81; this.PivotRowItems = 82; this.PivotColItems = 83; this.PivotLocation = 84; this.PivotCacheDefinition = 85; this.PivotCacheRecords = 86; this.BinaryWrapper = 87; this.BinaryWrapper2 = 88; this.PivotFieldElem = 89; this.PivotFilter = 90; this.Layout = 91; this.ArrayFormula = 95; this.StylePatternFill = 100; this.StyleGradientFill = 101; this.StyleGradientFillStop = 102; this.SortState = 115; this.SortStateData = 116; this.Slicer = 117; this.SlicerData = 118; this.NamedSheetView = 130; this.NamedSheetViewChange = 131; this.DataValidation = 140; this.DataValidationInner = 141; this.CFData = 150; this.CFDataInner = 151; this.ColorScale = 152; this.CFormulaCF = 153; this.DataBar = 154; this.IconSet = 155; this.ProtectedRangeData = 160; this.ProtectedRangeDataInner = 161; this.UserProtectedRange = 165; this.UserProtectedRangeChange = 166; this.UserProtectedRangeUserInfo = 167; this.externalReference = 170; this.RowColBreaks = 175; this.LegacyDrawingHFDrawing = 180; this.PivotFieldItem = 181; this.PivotCache = 182; this.CacheFields = 183; this.CacheFieldElem = 184; this.CalculatedItems = 185; this.Create = function (nType) { switch (nType) { case this.ValueMultiTextElem: return new AscCommonExcel.CMultiTextElem(); case this.CellValue: return new AscCommonExcel.CCellValue(); case this.CellValueData: return new UndoRedoData_CellValueData(); case this.CellData: return new UndoRedoData_CellData(); case this.CellSimpleData: return new UndoRedoData_CellSimpleData(); case this.FromTo: return new UndoRedoData_FromTo(); case this.FromToRowCol: return new UndoRedoData_FromToRowCol(); case this.FromToHyperlink: return new UndoRedoData_FromToHyperlink(); case this.IndexSimpleProp: return new UndoRedoData_IndexSimpleProp(); case this.ColProp: return new UndoRedoData_ColProp(); case this.RowProp: return new UndoRedoData_RowProp(); case this.BBox: return new UndoRedoData_BBox(); case this.Hyperlink: return new AscCommonExcel.Hyperlink(); case this.SortData: return new UndoRedoData_SortData(); case this.StyleFont: return new AscCommonExcel.Font(); case this.StyleFill: return new AscCommonExcel.Fill(); case this.StylePatternFill: return new AscCommonExcel.PatternFill(); case this.StyleGradientFill: return new AscCommonExcel.GradientFill(); case this.StyleGradientFillStop: return new AscCommonExcel.GradientStop(); case this.StyleNum: return new AscCommonExcel.Num(); case this.StyleBorder: return new AscCommonExcel.Border(); case this.StyleBorderProp: return new AscCommonExcel.BorderProp(); case this.StyleXfs: return new AscCommonExcel.CellXfs(); case this.StyleAlign: return new AscCommonExcel.Align(); case this.CommentData: return new Asc.asc_CCommentData(); case this.CommentCoords: return new AscCommonExcel.asc_CCommentCoords(); case this.ChartSeriesData: return new AscFormat.asc_CChartSeria(); case this.SheetAdd: return new UndoRedoData_SheetAdd(); case this.SheetRemove: return new UndoRedoData_SheetRemove(); case this.ClrScheme: return new UndoRedoData_ClrScheme(); case this.AutoFilter: return new UndoRedoData_AutoFilter(); case this.AutoFiltersOptions: return new Asc.AutoFiltersOptions(); case this.AutoFilterObj: return new Asc.AutoFilterObj(); case this.AdvancedTableInfoSettings: return new Asc.AdvancedTableInfoSettings(); case this.CustomFilters: return new Asc.CustomFilters(); case this.CustomFilter: return new Asc.CustomFilter(); case this.ColorFilter: return new Asc.ColorFilter(); case this.DynamicFilter: return new Asc.DynamicFilter(); case this.Top10: return new Asc.Top10(); case this.AutoFiltersOptionsElements: return new AscCommonExcel.AutoFiltersOptionsElements(); case this.AddFormatTableOptions: return new AscCommonExcel.AddFormatTableOptions(); case this.SingleProperty: return new UndoRedoData_SingleProperty(); case this.RgbColor: return new AscCommonExcel.RgbColor(); case this.ThemeColor: return new AscCommonExcel.ThemeColor(); case this.DefinedName: return new UndoRedoData_DefinedNames(); case this.PivotTable: return new UndoRedoData_PivotTable(); case this.PivotCache: return new UndoRedoData_PivotCache(); case this.CacheFields: return new UndoRedoData_CacheFields(); case this.DataField: return new UndoRedoData_DataField(); case this.PivotField: return new UndoRedoData_PivotField(); case this.PivotRowItems: return new CT_rowItems(); case this.PivotColItems: return new CT_colItems(); case this.PivotLocation: return new CT_Location(); case this.PivotCacheDefinition: return new CT_PivotCacheDefinition(); case this.PivotCacheRecords: return new CT_PivotCacheRecords(); case this.PivotFieldElem: return new CT_PivotField(true); case this.CacheFieldElem: return new CT_CacheField(); case this.CalculatedItems: return new CT_CalculatedItems(); case this.PivotFilter: return new CT_PivotFilter(); case this.BinaryWrapper: return new UndoRedoData_BinaryWrapper(); case this.BinaryWrapper2: return new UndoRedoData_BinaryWrapper2(); case this.Layout: return new UndoRedoData_Layout(); case this.ArrayFormula: return new UndoRedoData_ArrayFormula(); case this.SortState: return new AscCommonExcel.SortState(); case this.SortStateData: return new AscCommonExcel.UndoRedoData_SortState(); case this.SlicerData: return new AscCommonExcel.UndoRedoData_Slicer(); case this.Slicer: return new window['Asc'].CT_slicer(); case this.NamedSheetView: return new window['Asc'].CT_NamedSheetView(); case this.NamedSheetViewChange: if (window['AscCommonExcel'].UndoRedoData_NamedSheetView) { return new window['AscCommonExcel'].UndoRedoData_NamedSheetView(); } break; case this.DataValidationInner: return new window['AscCommonExcel'].CDataValidation(); case this.DataValidation: return new window['AscCommonExcel'].UndoRedoData_DataValidation(); case this.CFData: return new AscCommonExcel.UndoRedoData_CF(); case this.CFDataInner: return new AscCommonExcel.CConditionalFormattingRule(); case this.ColorScale: return new AscCommonExcel.CColorScale(); case this.CFormulaCF: return new AscCommonExcel.CFormulaCF(); case this.DataBar: return new AscCommonExcel.CDataBar(); case this.IconSet: return new AscCommonExcel.CIconSet(); case this.ProtectedRangeData: return new AscCommonExcel.UndoRedoData_ProtectedRange(); case this.ProtectedRangeDataInner: return new Asc.CProtectedRange(); case this.externalReference: return new AscCommonExcel.ExternalReference(); case this.UserProtectedRange: return new Asc.CUserProtectedRange(); case this.UserProtectedRangeChange: return new AscCommonExcel.UndoRedoData_UserProtectedRange(); case this.UserProtectedRangeUserInfo: return new Asc.CUserProtectedRangeUserInfo(); case this.RowColBreaks: return new AscCommonExcel.UndoRedoData_RowColBreaks(); case this.LegacyDrawingHFDrawing: return new AscCommonExcel.UndoRedoData_LegacyDrawingHFDrawing(); case this.PivotFieldItem: return new AscCommonExcel.UndoRedoData_PivotFieldItem(); } return null; }; }; function UndoRedoData_CellSimpleData(nRow, nCol, oOldVal, oNewVal, sFormula) { this.nRow = nRow; this.nCol = nCol; this.oOldVal = oOldVal; this.oNewVal = oNewVal; this.sFormula = sFormula;//todo unused } UndoRedoData_CellSimpleData.prototype.CreateReverseChangeSpreadsheet = function () { return new UndoRedoData_CellSimpleData(this.nRow, this.nCol, this.oNewVal, this.oOldVal, this.sFormula); } UndoRedoData_CellSimpleData.prototype.Properties = { Row: 0, Col: 1, NewVal: 2 }; UndoRedoData_CellSimpleData.prototype.getType = function () { return UndoRedoDataTypes.CellSimpleData; }; UndoRedoData_CellSimpleData.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_CellSimpleData.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.Row: return this.nRow; break; case this.Properties.Col: return this.nCol; break; case this.Properties.NewVal: return this.oNewVal; break; } return null; }; UndoRedoData_CellSimpleData.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.Row: this.nRow = value; break; case this.Properties.Col: this.nCol = value; break; case this.Properties.NewVal: this.oNewVal = value; break; } }; UndoRedoData_CellSimpleData.prototype.applyCollaborative = function (nSheetId, collaborativeEditing) { let nRowOld = this.nRow; let nColOld = this.nCol; this.nRow = collaborativeEditing.getLockMeRow2(nSheetId, this.nRow); this.nCol = collaborativeEditing.getLockMeColumn2(nSheetId, this.nCol); return this.nRow !== nRowOld || this.nCol !== nColOld; }; function UndoRedoData_CellData(value, style) { this.value = value; this.style = style; } UndoRedoData_CellData.prototype.Properties = { value: 0, style: 1 }; UndoRedoData_CellData.prototype.getType = function () { return UndoRedoDataTypes.CellData; }; UndoRedoData_CellData.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_CellData.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.value: return this.value; break; case this.Properties.style: return this.style; break; } return null; }; UndoRedoData_CellData.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.value: this.value = value; break; case this.Properties.style: this.style = value; break; } }; function UndoRedoData_CellValueData(sFormula, oValue, formulaRef, bCa) { this.formula = sFormula; this.formulaRef = formulaRef; this.value = oValue; this.ca = bCa; } UndoRedoData_CellValueData.prototype.Properties = { formula: 0, value: 1, formulaRef: 2, ca: 3 }; UndoRedoData_CellValueData.prototype.isEqual = function (val) { if (null == val) { return false; } if (this.formula != val.formula) { return false; } if ((this.formulaRef && val.formulaRef && !(this.formulaRef.r1 === val.formulaRef.r1 && this.formulaRef.c1 === val.formulaRef.c1 && this.formulaRef.r2 === val.formulaRef.r2 && this.formulaRef.c2 === val.formulaRef.c2)) || (this.formulaRef !== val.formulaRef)) { return false; } if (this.value.isEqual(val.value)) { return true; } return false; }; UndoRedoData_CellValueData.prototype.getType = function () { return UndoRedoDataTypes.CellValueData; }; UndoRedoData_CellValueData.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_CellValueData.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.formula: return this.formula; case this.Properties.value: return this.value; case this.Properties.formulaRef: return this.formulaRef ? new UndoRedoData_BBox(this.formulaRef) : null; case this.Properties.ca: return this.ca; } return null; }; UndoRedoData_CellValueData.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.formula: this.formula = value; break; case this.Properties.value: this.value = value; break; case this.Properties.formulaRef: this.formulaRef = value ? new Asc.Range(value.c1, value.r1, value.c2, value.r2) : null; break; case this.Properties.ca: this.ca = value; break; } }; function UndoRedoData_FromToRowCol(bRow, from, to) { this.bRow = bRow; this.from = from; this.to = to; } UndoRedoData_FromToRowCol.prototype.CreateReverseChangeSpreadsheet = function () { return new UndoRedoData_FromToRowCol(!this.bRow, this.from, this.to); } UndoRedoData_FromToRowCol.prototype.Properties = { from: 0, to: 1, bRow: 2 }; UndoRedoData_FromToRowCol.prototype.getType = function () { return UndoRedoDataTypes.FromToRowCol; }; UndoRedoData_FromToRowCol.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_FromToRowCol.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.from: return this.from; break; case this.Properties.to: return this.to; break; case this.Properties.bRow: return this.bRow; break; } return null; }; UndoRedoData_FromToRowCol.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.from: this.from = value; break; case this.Properties.to: this.to = value; break; case this.Properties.bRow: this.bRow = value; break; } }; UndoRedoData_FromToRowCol.prototype.applyCollaborative = function (nSheetId, collaborativeEditing) { let fromOld = this.from; let toOld = this.to; if (this.bRow) { this.from = collaborativeEditing.getLockMeRow2(nSheetId, this.from); this.to = collaborativeEditing.getLockMeRow2(nSheetId, this.to); } else { this.from = collaborativeEditing.getLockMeColumn2(nSheetId, this.from); this.to = collaborativeEditing.getLockMeColumn2(nSheetId, this.to); } return this.from !== fromOld || this.to !== toOld; }; function UndoRedoData_FromTo(from, to, copyRange, sheetIdTo) { this.from = from; this.to = to; this.copyRange = copyRange; this.sheetIdTo = sheetIdTo; } UndoRedoData_FromTo.prototype.CreateReverseChangeSpreadsheet = function () { return new UndoRedoData_FromTo(this.to, this.from, this.copyRange, this.sheetIdTo); } UndoRedoData_FromTo.prototype.Properties = { from: 0, to: 1, copyRange: 2, sheetIdTo: 3 }; UndoRedoData_FromTo.prototype.getType = function () { return UndoRedoDataTypes.FromTo; }; UndoRedoData_FromTo.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_FromTo.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.from: return this.from; case this.Properties.to: return this.to; case this.Properties.copyRange: return this.copyRange; case this.Properties.sheetIdTo: return this.sheetIdTo; } return null; }; UndoRedoData_FromTo.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.from: this.from = value; break; case this.Properties.to: this.to = value; break; case this.Properties.copyRange: this.copyRange = value; break; case this.Properties.sheetIdTo: this.sheetIdTo = value; break; } }; function UndoRedoData_FromToHyperlink(oBBoxFrom, oBBoxTo, hyperlink) { this.from = new UndoRedoData_BBox(oBBoxFrom); this.to = new UndoRedoData_BBox(oBBoxTo); this.hyperlink = hyperlink; } UndoRedoData_FromToHyperlink.prototype.CreateReverseChangeSpreadsheet = function () { return new UndoRedoData_FromToHyperlink(this.to, this.from, this.hyperlink); } UndoRedoData_FromToHyperlink.prototype.Properties = { from: 0, to: 1, hyperlink: 2 }; UndoRedoData_FromToHyperlink.prototype.getType = function () { return UndoRedoDataTypes.FromToHyperlink; }; UndoRedoData_FromToHyperlink.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_FromToHyperlink.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.from: return this.from; case this.Properties.to: return this.to; case this.Properties.hyperlink: return this.hyperlink; } return null; }; UndoRedoData_FromToHyperlink.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.from: this.from = value; break; case this.Properties.to: this.to = value; break; case this.Properties.hyperlink: this.hyperlink = value; break; } }; function UndoRedoData_IndexSimpleProp(index, bRow, oOldVal, oNewVal) { this.index = index; this.bRow = bRow; this.oOldVal = oOldVal; this.oNewVal = oNewVal; } UndoRedoData_IndexSimpleProp.prototype.CreateReverseChangeSpreadsheet = function () { return new UndoRedoData_IndexSimpleProp(this.index, this.bRow, this.oNewVal, this.oOldVal); } UndoRedoData_IndexSimpleProp.prototype.Properties = { index: 0, oNewVal: 1 }; UndoRedoData_IndexSimpleProp.prototype.getType = function () { return UndoRedoDataTypes.IndexSimpleProp; }; UndoRedoData_IndexSimpleProp.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_IndexSimpleProp.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.index: return this.index; case this.Properties.oNewVal: return this.oNewVal; } return null; }; UndoRedoData_IndexSimpleProp.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.index: this.index = value; break; case this.Properties.oNewVal: this.oNewVal = value; break; } }; UndoRedoData_IndexSimpleProp.prototype.applyCollaborative = function (nSheetId, collaborativeEditing) { let indexOld = this.index; if (this.bRow) { this.index = collaborativeEditing.getLockMeRow2(nSheetId, this.index); } else { this.index = collaborativeEditing.getLockMeColumn2(nSheetId, this.index); } return this.index !== indexOld; }; function UndoRedoData_ColProp(col) { if (null != col) { this.width = col.width; this.hd = col.hd; this.CustomWidth = col.CustomWidth; this.BestFit = col.BestFit; this.OutlineLevel = col.outlineLevel; this.Collapsed = col.collapsed; } else { this.width = null; this.hd = null; this.CustomWidth = null; this.BestFit = null; this.OutlineLevel = null; this.Collapsed = null; } } UndoRedoData_ColProp.prototype.Properties = { width: 0, hd: 1, CustomWidth: 2, BestFit: 3, OutlineLevel: 4, Collapsed: 5 }; UndoRedoData_ColProp.prototype.isEqual = function (val) { var defaultColWidth = AscCommonExcel.oDefaultMetrics.ColWidthChars; return this.hd == val.hd && this.CustomWidth == val.CustomWidth && ((this.BestFit == val.BestFit && this.width == val.width) || ((null == this.width || defaultColWidth == this.width) && (null == this.BestFit || true == this.BestFit) && (null == val.width || defaultColWidth == val.width) && (null == val.BestFit || true == val.BestFit))) && this.OutlineLevel == val.OutlineLevel && this.Collapsed == val.Collapsed; }; UndoRedoData_ColProp.prototype.getType = function () { return UndoRedoDataTypes.ColProp; }; UndoRedoData_ColProp.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_ColProp.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.width: return this.width; case this.Properties.hd: return this.hd; case this.Properties.CustomWidth: return this.CustomWidth; case this.Properties.BestFit: return this.BestFit; case this.Properties.OutlineLevel: return this.OutlineLevel; case this.Properties.Collapsed: return this.Collapsed; } return null; }; UndoRedoData_ColProp.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.width: this.width = value; break; case this.Properties.hd: this.hd = value; break; case this.Properties.CustomWidth: this.CustomWidth = value; break; case this.Properties.BestFit: this.BestFit = value; break; case this.Properties.OutlineLevel: this.OutlineLevel = value; break; case this.Properties.Collapsed: this.Collapsed = value; break; } }; function UndoRedoData_RowProp(row) { if (null != row) { this.h = row.getHeight(); this.hd = row.getHidden(); this.CustomHeight = row.getCustomHeight(); this.OutlineLevel = row.getOutlineLevel(); this.Collapsed = row.getCollapsed(); } else { this.h = null; this.hd = null; this.CustomHeight = null; this.OutlineLevel = null; this.Collapsed = null; } } UndoRedoData_RowProp.prototype.Properties = { h: 0, hd: 1, CustomHeight: 2, OutlineLevel: 3, Collapsed: 4 }; UndoRedoData_RowProp.prototype.isEqual = function (val) { var defaultRowHeight = AscCommonExcel.oDefaultMetrics.RowHeight; return this.hd == val.hd && ((this.CustomHeight == val.CustomHeight && this.h == val.h) || ((null == this.h || defaultRowHeight == this.h) && (null == this.CustomHeight || false == this.CustomHeight) && (null == val.h || defaultRowHeight == val.h) && (null == val.CustomHeight || false == val.CustomHeight))) && this.OutlineLevel == val.OutlineLevel && this.Collapsed == val.Collapsed; }; UndoRedoData_RowProp.prototype.getType = function () { return UndoRedoDataTypes.RowProp; }; UndoRedoData_RowProp.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_RowProp.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.h: return this.h; case this.Properties.hd: return this.hd; case this.Properties.CustomHeight: return this.CustomHeight; case this.Properties.OutlineLevel: return this.OutlineLevel; case this.Properties.Collapsed: return this.Collapsed; } return null; }; UndoRedoData_RowProp.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.h: this.h = value; break; case this.Properties.hd: this.hd = value; break; case this.Properties.CustomHeight: this.CustomHeight = value; break; case this.Properties.OutlineLevel: this.OutlineLevel = value; break; case this.Properties.Collapsed: this.Collapsed = value; break; } }; function UndoRedoData_BBox(oBBox) { if (null != oBBox) { this.c1 = oBBox.c1; this.r1 = oBBox.r1; this.c2 = oBBox.c2; this.r2 = oBBox.r2; } else { this.c1 = null; this.r1 = null; this.c2 = null; this.r2 = null; } } UndoRedoData_BBox.prototype.Properties = { c1: 0, r1: 1, c2: 2, r2: 3 }; UndoRedoData_BBox.prototype.getType = function () { return UndoRedoDataTypes.BBox; }; UndoRedoData_BBox.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_BBox.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.c1: return this.c1; case this.Properties.r1: return this.r1; case this.Properties.c2: return this.c2; case this.Properties.r2: return this.r2; } return null; }; UndoRedoData_BBox.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.c1: this.c1 = value; break; case this.Properties.r1: this.r1 = value; break; case this.Properties.c2: this.c2 = value; break; case this.Properties.r2: this.r2 = value; break; } }; UndoRedoData_BBox.prototype.applyCollaborative = function (nSheetId, collaborativeEditing) { let r1old = this.r1; let r2old = this.r2; let c1old = this.c1; let c2old = this.c2; this.r1 = collaborativeEditing.getLockMeRow2(nSheetId, this.r1); this.r2 = collaborativeEditing.getLockMeRow2(nSheetId, this.r2); this.c1 = collaborativeEditing.getLockMeColumn2(nSheetId, this.c1); this.c2 = collaborativeEditing.getLockMeColumn2(nSheetId, this.c2); return this.r1 !== r1old || this.r2 !== r2old || this.c1 !== c1old || this.c2 !== c2old; }; function UndoRedoData_FrozenBBox(oBBox) { if (null != oBBox) { this.c1 = oBBox.c1; this.r1 = oBBox.r1; this.c2 = oBBox.c2; this.r2 = oBBox.r2; } else { this.c1 = null; this.r1 = null; this.c2 = null; this.r2 = null; } } UndoRedoData_FrozenBBox.prototype = Object.create(UndoRedoData_BBox.prototype); UndoRedoData_FrozenBBox.prototype.applyCollaborative = function (nSheetId, collaborativeEditing) { let r1old = this.r1; let r2old = this.r2; let c1old = this.c1; let c2old = this.c2; var _r1 = this.r1 > 0 ? collaborativeEditing.getLockMeRow2(nSheetId, this.r1 - 1) : null; var _r2 = this.r2 > 0 ? collaborativeEditing.getLockMeRow2(nSheetId, this.r2 - 1) : null; var _c1 = this.c1 > 0 ? collaborativeEditing.getLockMeRow2(nSheetId, this.c1 - 1) : null; var _c2 = this.c2 > 0 ? collaborativeEditing.getLockMeRow2(nSheetId, this.c2 - 1) : null; if (_r1 !== null && _r1 !== this.r1 - 1) { this.r1 = _r1 + 1; } if (_r2 !== null && _r2 !== this.r2 - 1) { this.r2 = _r2 + 1; } if (_c1 !== null && _c1 !== this.c1 - 1) { this.c1 = _c1 + 1; } if (_c2 !== null && _c2 !== this.c2 - 1) { this.c2 = _c2 + 1; } return this.r1 !== r1old || this.r2 !== r2old || this.c1 !== c1old || this.c2 !== c2old; }; function UndoRedoData_SortData(bbox, places, sortByRow) { this.bbox = bbox; this.places = places; this.sortByRow = sortByRow; } UndoRedoData_SortData.prototype.Properties = { bbox: 0, places: 1, sortByRow: 2 }; UndoRedoData_SortData.prototype.getType = function () { return UndoRedoDataTypes.SortData; }; UndoRedoData_SortData.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_SortData.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.bbox: return this.bbox; case this.Properties.places: return this.places; case this.Properties.sortByRow: return this.sortByRow; } return null; }; UndoRedoData_SortData.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.bbox: this.bbox = value; break; case this.Properties.places: this.places = value; break; case this.Properties.sortByRow: this.sortByRow = value; break; } }; UndoRedoData_SortData.prototype.applyCollaborative = function (nSheetId, collaborativeEditing) { let res = false; let r1old = this.bbox.r1; let r2old = this.bbox.r2; let c1old = this.bbox.c1; let c2old = this.bbox.c2; this.bbox.r1 = collaborativeEditing.getLockMeRow2(nSheetId, this.bbox.r1); this.bbox.r2 = collaborativeEditing.getLockMeRow2(nSheetId, this.bbox.r2); this.bbox.c1 = collaborativeEditing.getLockMeColumn2(nSheetId, this.bbox.c1); this.bbox.c2 = collaborativeEditing.getLockMeColumn2(nSheetId, this.bbox.c2); res = this.bbox.r1 !== r1old || this.bbox.r2 !== r2old || this.bbox.c1 !== c1old || this.bbox.c2 !== c2old; for (var i = 0, length = this.places.length; i < length; ++i) { var place = this.places[i]; let fromOld = place.from; let toOld = place.to; if (this.sortByRow) { place.from = collaborativeEditing.getLockMeColumn2(nSheetId, place.from); place.to = collaborativeEditing.getLockMeColumn2(nSheetId, place.to); } else { place.from = collaborativeEditing.getLockMeRow2(nSheetId, place.from); place.to = collaborativeEditing.getLockMeRow2(nSheetId, place.to); } res = res || place.from !== fromOld || place.to !== toOld; } return res; }; function UndoRedoData_PivotTable(pivot, from, to) { this.pivot = pivot; this.from = from; this.to = to; } UndoRedoData_PivotTable.prototype.Properties = { pivot: 0, from: 1, to: 2 }; UndoRedoData_PivotTable.prototype.getType = function () { return UndoRedoDataTypes.PivotTable; }; UndoRedoData_PivotTable.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_PivotTable.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.pivot: return this.pivot; case this.Properties.from: return this.from; case this.Properties.to: return this.to; } return null; }; UndoRedoData_PivotTable.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.pivot: this.pivot = value; break; case this.Properties.from: this.from = value; break; case this.Properties.to: this.to = value; break; } }; function UndoRedoData_PivotCache(pivot, from, to) { this.pivot = pivot; this.from = from; this.to = to; } UndoRedoData_PivotCache.prototype.Properties = { pivot: 0, from: 1, to: 2 }; UndoRedoData_PivotCache.prototype.getType = function () { return UndoRedoDataTypes.PivotCache; }; UndoRedoData_PivotCache.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_PivotCache.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.pivot: return this.pivot; case this.Properties.from: return this.from; case this.Properties.to: return this.to; } return null; }; UndoRedoData_PivotCache.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.pivot: this.pivot = value; break; case this.Properties.from: this.from = value; break; case this.Properties.to: this.to = value; break; } }; function UndoRedoData_CacheFields(pivot, index, from, to) { this.pivot = pivot; this.index = index; this.from = from; this.to = to; } UndoRedoData_CacheFields.prototype.Properties = { pivot: 0, index: 1, from: 2, to: 3 }; UndoRedoData_CacheFields.prototype.getType = function () { return UndoRedoDataTypes.CacheFields; }; UndoRedoData_CacheFields.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_CacheFields.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.pivot: return this.pivot; case this.Properties.index: return this.index; case this.Properties.from: return this.from; case this.Properties.to: return this.to; } return null; }; UndoRedoData_CacheFields.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.pivot: this.pivot = value; break; case this.Properties.index: this.index = value; break; case this.Properties.from: this.from = value; break; case this.Properties.to: this.to = value; break; } }; function UndoRedoData_PivotTableRedo(pivot, from, to) { this.pivot = pivot; this.from = from; this.to = to; } UndoRedoData_PivotTableRedo.prototype = Object.create(UndoRedoData_PivotTable.prototype); UndoRedoData_PivotTableRedo.prototype.Properties = { pivot: 0, to: 2 }; function UndoRedoData_DataField(pivot, from, to, name) { this.pivot = pivot; this.from = from; this.to = to; this.name = name; } UndoRedoData_DataField.prototype.Properties = { pivot: 0, from: 1, to: 2, name: 3 }; UndoRedoData_DataField.prototype.getType = function () { return UndoRedoDataTypes.DataField; }; UndoRedoData_DataField.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_DataField.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.pivot: return this.pivot; case this.Properties.from: return this.from; case this.Properties.to: return this.to; case this.Properties.name: return this.name; } return null; }; UndoRedoData_DataField.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.pivot: this.pivot = value; break; case this.Properties.from: this.from = value; break; case this.Properties.to: this.to = value; break; case this.Properties.name: this.name = value; break; } }; function UndoRedoData_PivotField(pivot, index, from, to) { this.pivot = pivot; this.index = index; this.from = from; this.to = to; } UndoRedoData_PivotField.prototype.Properties = { pivot: 0, index: 1, from: 2, to: 3 }; UndoRedoData_PivotField.prototype.getType = function () { return UndoRedoDataTypes.PivotField; }; UndoRedoData_PivotField.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_PivotField.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.pivot: return this.pivot; case this.Properties.index: return this.index; case this.Properties.from: return this.from; case this.Properties.to: return this.to; } return null; }; UndoRedoData_PivotField.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.pivot: this.pivot = value; break; case this.Properties.index: this.index = value; break; case this.Properties.from: this.from = value; break; case this.Properties.to: this.to = value; break; } }; function UndoRedoData_PivotFieldItem(pivot, pivotIndex, itemIndex, from, to) { this.pivot = pivot; this.pivotIndex = pivotIndex; this.itemIndex = itemIndex; this.from = from; this.to = to; } UndoRedoData_PivotFieldItem.prototype.Properties = { pivot: 0, pivotIndex: 1, itemIndex: 2, from: 3, to: 4 }; UndoRedoData_PivotFieldItem.prototype.getType = function () { return UndoRedoDataTypes.PivotFieldItem; }; UndoRedoData_PivotFieldItem.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_PivotFieldItem.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.pivot: return this.pivot; case this.Properties.pivotIndex: return this.pivotIndex; case this.Properties.itemIndex: return this.itemIndex; case this.Properties.from: return this.from; case this.Properties.to: return this.to; } return null; }; UndoRedoData_PivotFieldItem.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.pivot: this.pivot = value; break; case this.Properties.pivotIndex: this.pivotIndex = value; break; case this.Properties.itemIndex: this.itemIndex = value; break; case this.Properties.from: this.from = value; break; case this.Properties.to: this.to = value; break; } }; function UndoRedoData_BinaryWrapper(data) { this.binary = null; this.len = 0; this.Id = null; if (data) { var memory = new AscCommon.CMemory(true); memory.CheckSize(1000); data.Write_ToBinary2(memory); this.Id = data.Get_Id(); this.len = memory.GetCurPosition(); this.binary = memory.GetData(); } } UndoRedoData_BinaryWrapper.prototype.getType = function () { return UndoRedoDataTypes.BinaryWrapper; }; UndoRedoData_BinaryWrapper.prototype.Write_ToBinary2 = function (writer) { writer.WriteString2(this.Id); writer.WriteLong(this.len); writer.WriteBuffer(this.binary, 0, this.len); }; UndoRedoData_BinaryWrapper.prototype.Read_FromBinary2 = function (reader) { this.Id = reader.GetString2(); this.len = reader.GetLong(); this.binary = reader.GetBufferUint8(this.len); }; UndoRedoData_BinaryWrapper.prototype.getData = function () { var reader = new AscCommon.FT_Stream2(this.binary, this.len); var data = AscCommon.g_oTableId.GetClassFromFactory(reader.GetLong()); data.Id = this.Id; data.Read_FromBinary2(reader); return data; }; UndoRedoData_BinaryWrapper.prototype.readData = function (data) { var reader = new AscCommon.FT_Stream2(this.binary, this.len); data.Read_FromBinary2(reader); }; function UndoRedoData_BinaryWrapper2(data) { this.binary = null; this.len = 0; if (data) { var memory = new AscCommon.CMemory(true); memory.CheckSize(1000); data.Write_ToBinary2(memory); this.len = memory.GetCurPosition(); this.binary = memory.GetData(); } } UndoRedoData_BinaryWrapper2.prototype.getType = function () { return UndoRedoDataTypes.BinaryWrapper2; }; UndoRedoData_BinaryWrapper2.prototype.Write_ToBinary2 = function (writer) { writer.WriteLong(this.len); writer.WriteBuffer(this.binary, 0, this.len); }; UndoRedoData_BinaryWrapper2.prototype.Read_FromBinary2 = function (reader) { this.len = reader.GetLong(); this.binary = reader.GetBufferUint8(this.len); }; UndoRedoData_BinaryWrapper2.prototype.initObject = function (data) { var reader = new AscCommon.FT_Stream2(this.binary, this.len); data.Read_FromBinary2(reader); }; function UndoRedoData_Layout(from, to) { this.from = from; this.to = to; } UndoRedoData_Layout.prototype.CreateReverseChangeSpreadsheet = function () { return new UndoRedoData_Layout(this.to, this.from); } UndoRedoData_Layout.prototype.Properties = { from: 0, to: 1 }; UndoRedoData_Layout.prototype.getType = function () { return UndoRedoDataTypes.Layout; }; UndoRedoData_Layout.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_Layout.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.from: return this.from; case this.Properties.to: return this.to; } return null; }; UndoRedoData_Layout.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.from: this.from = value; break; case this.Properties.to: this.to = value; break; } }; function UndoRedoData_SheetAdd(insertBefore, name, sheetidfrom, sheetid, tableNames, opt_sheet, opt_sheetidToAdd) { this.insertBefore = insertBefore; this.name = name; this.sheetidfrom = sheetidfrom; this.sheetid = sheetid; this.opt_sheet = opt_sheet; this.opt_sheetidToAdd = opt_sheetidToAdd; //Эти поля заполняются после Undo/Redo this.sheet = null; this.tableNames = tableNames; } UndoRedoData_SheetAdd.prototype.Properties = { name: 0, sheetidfrom: 1, sheetid: 2, tableNames: 3, insertBefore: 4, opt_sheet: 5, opt_sheetidToAdd: 6 }; UndoRedoData_SheetAdd.prototype.getType = function () { return UndoRedoDataTypes.SheetAdd; }; UndoRedoData_SheetAdd.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_SheetAdd.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.name: return this.name; break; case this.Properties.sheetidfrom: return this.sheetidfrom; break; case this.Properties.sheetid: return this.sheetid; break; case this.Properties.tableNames: return this.tableNames; break; case this.Properties.insertBefore: return this.insertBefore; break; case this.Properties.opt_sheet: return this.opt_sheet; break; case this.Properties.opt_sheetidToAdd: return this.opt_sheetidToAdd; break; } return null; }; UndoRedoData_SheetAdd.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.name: this.name = value; break; case this.Properties.sheetidfrom: this.sheetidfrom = value; break; case this.Properties.sheetid: this.sheetid = value; break; case this.Properties.tableNames: this.tableNames = value; break; case this.Properties.insertBefore: this.insertBefore = value; break; case this.Properties.opt_sheet: this.opt_sheet = value; break; case this.Properties.opt_sheetidToAdd: this.opt_sheetidToAdd = value; break; } }; function UndoRedoData_SheetRemove(index, sheetId, sheet) { this.index = index; this.sheetId = sheetId; this.sheet = sheet; } UndoRedoData_SheetRemove.prototype.Properties = { index: 0, sheetId: 1, sheet: 2 }; UndoRedoData_SheetRemove.prototype.getType = function () { return UndoRedoDataTypes.SheetRemove; }; UndoRedoData_SheetRemove.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_SheetRemove.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.index: return this.index; case this.Properties.sheetId: return this.sheetId; case this.Properties.sheet: return this.sheet; } return null; }; UndoRedoData_SheetRemove.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.index: this.index = value; break; case this.Properties.sheetId: this.sheetId = value; break; case this.Properties.sheet: this.sheet = value; break; } }; function UndoRedoData_DefinedNames(name, ref, sheetId, type, isXLNM, hidden) { this.name = name; this.ref = ref; this.sheetId = sheetId; this.type = type; this.isXLNM = isXLNM; this.hidden = hidden === undefined ? false : hidden; } UndoRedoData_DefinedNames.prototype.Properties = { name: 0, ref: 1, sheetId: 2, type: 4, isXLNM: 5, hidden: 6 }; UndoRedoData_DefinedNames.prototype.getType = function () { return UndoRedoDataTypes.DefinedName; }; UndoRedoData_DefinedNames.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_DefinedNames.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.name: return this.name; case this.Properties.ref: return this.ref; case this.Properties.sheetId: return this.sheetId; case this.Properties.type: return this.type; case this.Properties.isXLNM: return this.isXLNM; case this.Properties.hidden: return this.hidden; } return null; }; UndoRedoData_DefinedNames.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.name: this.name = value; break; case this.Properties.ref: this.ref = value; break; case this.Properties.sheetId: this.sheetId = value; break; case this.Properties.type: this.type = value; break; case this.Properties.isXLNM: this.isXLNM = value; break; case this.Properties.hidden: this.hidden = value; break; } }; function UndoRedoData_ClrScheme(oldVal, newVal) { this.oldVal = oldVal; this.newVal = newVal; } UndoRedoData_ClrScheme.prototype.getType = function () { return UndoRedoDataTypes.ClrScheme; }; UndoRedoData_ClrScheme.prototype.Write_ToBinary2 = function (writer) { }; UndoRedoData_ClrScheme.prototype.Read_FromBinary2 = function (reader) { }; function UndoRedoData_AutoFilter() { this.undo = null; this.activeCells = null; this.styleName = null; this.type = null; this.cellId = null; this.autoFiltersObject = null; this.addFormatTableOptionsObj = null; this.moveFrom = null; this.moveTo = null; this.bWithoutFilter = null; this.displayName = null; this.val = null; this.ShowColumnStripes = null; this.ShowFirstColumn = null; this.ShowLastColumn = null; this.ShowRowStripes = null; this.HeaderRowCount = null; this.TotalsRowCount = null; this.color = null; this.tablePart = null; this.nCol = null; this.nRow = null; this.formula = null; this.totalFunction = null; this.viewId = null; this.redoColumnName = null; } UndoRedoData_AutoFilter.prototype.Properties = { activeCells: 0, styleName: 1, type: 2, cellId: 3, autoFiltersObject: 4, addFormatTableOptionsObj: 5, moveFrom: 6, moveTo: 7, bWithoutFilter: 8, displayName: 9, val: 10, ShowColumnStripes: 11, ShowFirstColumn: 12, ShowLastColumn: 13, ShowRowStripes: 14, HeaderRowCount: 15, TotalsRowCount: 16, color: 17, tablePart: 18, nCol: 19, nRow: 20, formula: 21, totalFunction: 22, viewId: 23, redoColumnName: 24 }; UndoRedoData_AutoFilter.prototype.getType = function () { return UndoRedoDataTypes.AutoFilter; }; UndoRedoData_AutoFilter.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_AutoFilter.prototype.getProperty = function (nType, nSheetId) { switch (nType) { case this.Properties.activeCells: return new UndoRedoData_BBox(this.activeCells); case this.Properties.styleName: return this.styleName; case this.Properties.type: return this.type; case this.Properties.cellId: return this.cellId; case this.Properties.autoFiltersObject: return this.autoFiltersObject; case this.Properties.addFormatTableOptionsObj: return this.addFormatTableOptionsObj; case this.Properties.moveFrom: return new UndoRedoData_BBox(this.moveFrom); case this.Properties.moveTo: return new UndoRedoData_BBox(this.moveTo); case this.Properties.bWithoutFilter: return this.bWithoutFilter; case this.Properties.displayName: return this.displayName; case this.Properties.val: return this.val; case this.Properties.ShowColumnStripes: return this.ShowColumnStripes; case this.Properties.ShowFirstColumn: return this.ShowFirstColumn; case this.Properties.ShowLastColumn: return this.ShowLastColumn; case this.Properties.ShowRowStripes: return this.ShowRowStripes; case this.Properties.HeaderRowCount: return this.HeaderRowCount; case this.Properties.TotalsRowCount: return this.TotalsRowCount; case this.Properties.color: return this.color; case this.Properties.tablePart: { var tablePart = this.tablePart; if (tablePart) { var memory = new AscCommon.CMemory(); var wb = window["Asc"]["editor"].wb; var initSaveManager = new AscCommonExcel.InitSaveManager(wb && wb.model); var oBinaryTableWriter = new AscCommonExcel.BinaryTableWriter(memory, initSaveManager, false, {}); var ws = wb ? wb.getWorksheetById(nSheetId) : null; oBinaryTableWriter.WriteTable(tablePart, ws ? ws.model : null); tablePart = memory.GetBase64Memory(); } return tablePart; } case this.Properties.nCol: return this.nCol; case this.Properties.nRow: return this.nRow; case this.Properties.formula: return this.formula; case this.Properties.totalFunction: return this.totalFunction; case this.Properties.viewId: return this.viewId; case this.Properties.redoColumnName: return this.redoColumnName; } return null; }; UndoRedoData_AutoFilter.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.activeCells: this.activeCells = new Asc.Range(value.c1, value.r1, value.c2, value.r2); break; case this.Properties.styleName: this.styleName = value; break; case this.Properties.type: this.type = value; break; case this.Properties.cellId: this.cellId = value; break; case this.Properties.autoFiltersObject: this.autoFiltersObject = value; break; case this.Properties.addFormatTableOptionsObj: return this.addFormatTableOptionsObj = value; case this.Properties.moveFrom: this.moveFrom = value; break; case this.Properties.moveTo: this.moveTo = value; break; case this.Properties.bWithoutFilter: this.bWithoutFilter = value; break; case this.Properties.displayName: this.displayName = value; break; case this.Properties.val: this.val = value; break; case this.Properties.ShowColumnStripes: this.ShowColumnStripes = value; break; case this.Properties.ShowFirstColumn: this.ShowFirstColumn = value; break; case this.Properties.ShowLastColumn: this.ShowLastColumn = value; break; case this.Properties.ShowRowStripes: this.ShowRowStripes = value; break; case this.Properties.HeaderRowCount: this.HeaderRowCount = value; break; case this.Properties.TotalsRowCount: this.TotalsRowCount = value; break; case this.Properties.color: this.color = value; break; case this.Properties.tablePart: { var table; if (value) { //TODO длину скорее всего нужно записывать var dstLen = 0; dstLen += value.length; var pointer = g_memory.Alloc(dstLen); var stream = new AscCommon.FT_Stream2(pointer.data, dstLen); stream.obj = pointer.obj; var nCurOffset = 0; var oBinaryFileReader = new AscCommonExcel.BinaryFileReader(); nCurOffset = oBinaryFileReader.getbase64DecodedData2(value, 0, stream, nCurOffset); var initOpenManager = new AscCommonExcel.InitOpenManager(); var oBinaryTableReader = new AscCommonExcel.Binary_TableReader(stream, initOpenManager); oBinaryTableReader.stream = stream; oBinaryTableReader.oReadResult = { tableCustomFunc: [] }; table = new AscCommonExcel.TablePart(); var res = oBinaryTableReader.bcr.Read1(dstLen, function (t, l) { return oBinaryTableReader.ReadTable(t, l, table); }); } if (table) { this.tablePart = table; } break; } case this.Properties.nCol: this.nCol = value; break; case this.Properties.nRow: this.nRow = value; break; case this.Properties.formula: this.formula = value; break; case this.Properties.totalFunction: this.totalFunction = value; break; case this.Properties.viewId: this.viewId = value; break; case this.Properties.redoColumnName: this.redoColumnName = value; break; } return null; }; UndoRedoData_AutoFilter.prototype.applyCollaborative = function (nSheetId, collaborativeEditing) { let res = false; let r1old = this.activeCells.r1; let r2old = this.activeCells.r2; let c1old = this.activeCells.c1; let c2old = this.activeCells.c2; this.activeCells.c1 = collaborativeEditing.getLockMeColumn2(nSheetId, this.activeCells.c1); this.activeCells.c2 = collaborativeEditing.getLockMeColumn2(nSheetId, this.activeCells.c2); this.activeCells.r1 = collaborativeEditing.getLockMeRow2(nSheetId, this.activeCells.r1); this.activeCells.r2 = collaborativeEditing.getLockMeRow2(nSheetId, this.activeCells.r2); res = this.activeCells.r1 !== r1old || this.activeCells.r2 !== r2old || this.activeCells.c1 !== c1old || this.activeCells.c2 !== c2old; if (this.autoFiltersObject && this.autoFiltersObject.cellId !== undefined) { var curCellId = this.autoFiltersObject.cellId.split('af')[0]; var range; AscCommonExcel.executeInR1C1Mode(false, function () { range = AscCommonExcel.g_oRangeCache.getAscRange(curCellId).clone(); }); let nRowOld = range.r1; let nColOld = range.c1; var nRow = collaborativeEditing.getLockMeRow2(nSheetId, range.r1); var nCol = collaborativeEditing.getLockMeColumn2(nSheetId, range.c1); res = res || range.r1 !== nRowOld || range.c1 !== nColOld; this.autoFiltersObject.cellId = new AscCommon.CellBase(nRow, nCol).getName(); } return res; }; //***array-formula*** function UndoRedoData_ArrayFormula(range, formula) { this.range = range; this.formula = formula; } UndoRedoData_ArrayFormula.prototype.Properties = { range: 0, formula: 1 }; UndoRedoData_ArrayFormula.prototype.getType = function () { return UndoRedoDataTypes.ArrayFormula; }; UndoRedoData_ArrayFormula.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_ArrayFormula.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.range: return new UndoRedoData_BBox(this.range); case this.Properties.formula: return this.formula; } return null; }; UndoRedoData_ArrayFormula.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.range: this.range = new Asc.Range(value.c1, value.r1, value.c2, value.r2); break; case this.Properties.formula: this.formula = value; break; } return null; }; function UndoRedoData_SingleProperty(elem) { this.elem = elem; } UndoRedoData_SingleProperty.prototype.Properties = { elem: 0 }; UndoRedoData_SingleProperty.prototype.getType = function () { return UndoRedoDataTypes.SingleProperty; }; UndoRedoData_SingleProperty.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_SingleProperty.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.elem: return this.elem; } return null; }; UndoRedoData_SingleProperty.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.elem: this.elem = value; break; } }; function UndoRedoData_SortState(from, to, bFilter, tableName) { this.from = from; this.to = to; this.bFilter = bFilter; this.tableName = tableName; } UndoRedoData_SortState.prototype.CreateReverseChangeSpreadsheet = function () { return new UndoRedoData_SortState(this.to, this.from, this.bFilter, this.tableName); } UndoRedoData_SortState.prototype.Properties = { from: 0, to: 1, bFilter: 2, tableName: 3 }; UndoRedoData_SortState.prototype.getType = function () { return UndoRedoDataTypes.SortStateData; }; UndoRedoData_SortState.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_SortState.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.from: return this.from; case this.Properties.to: return this.to; case this.Properties.bFilter: return this.bFilter; case this.Properties.tableName: return this.tableName; } return null; }; UndoRedoData_SortState.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.from: this.from = value; break; case this.Properties.to: this.to = value; break; case this.Properties.bFilter: this.bFilter = value; break; case this.Properties.tableName: this.tableName = value; break; } }; function UndoRedoData_Slicer(name, from, to) { this.name = name; this.from = from; this.to = to; } UndoRedoData_Slicer.prototype.CreateReverseChangeSpreadsheet = function () { return new UndoRedoData_Slicer(this.to, this.from); } UndoRedoData_Slicer.prototype.Properties = { name: 0, from: 1, to: 2 }; UndoRedoData_Slicer.prototype.getType = function () { return UndoRedoDataTypes.SlicerData; }; UndoRedoData_Slicer.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_Slicer.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.name: return this.name; case this.Properties.from: return this.from; case this.Properties.to: return this.to; } return null; }; UndoRedoData_Slicer.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.name: this.name = value; break; case this.Properties.from: this.from = value; break; case this.Properties.to: this.to = value; break; } }; function UndoRedoData_DataValidation(id, from, to) { this.id = id; this.from = from; this.to = to; } UndoRedoData_DataValidation.prototype.CreateReverseChangeSpreadsheet = function () { return new UndoRedoData_DataValidation(this.id, this.to, this.from); } UndoRedoData_DataValidation.prototype.Properties = { id: 0, to: 2 }; UndoRedoData_DataValidation.prototype.getType = function () { return UndoRedoDataTypes.DataValidation; }; UndoRedoData_DataValidation.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_DataValidation.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.id: return this.id; case this.Properties.from: return this.from; case this.Properties.to: return this.to; } return null; }; UndoRedoData_DataValidation.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.from: this.from = value; break; case this.Properties.to: this.to = value; break; case this.Properties.id: this.id = value; break; } }; UndoRedoData_DataValidation.prototype.applyCollaborative = function (nSheetId, collaborativeEditing) { if (this.to) { for (var i = 0; i < this.to.ranges.length; i++) { var range = this.to.ranges[i]; range.r1 = collaborativeEditing.getLockMeRow2(nSheetId, range.r1); range.r2 = collaborativeEditing.getLockMeRow2(nSheetId, range.r2); range.c1 = collaborativeEditing.getLockMeColumn2(nSheetId, range.c1); range.c2 = collaborativeEditing.getLockMeColumn2(nSheetId, range.c2); } } }; function UndoRedoData_CF(id, from, to) { this.id = id; this.from = from; this.to = to; } UndoRedoData_CF.prototype.CreateReverseChangeSpreadsheet = function () { return new UndoRedoData_CF(this.id, this.to, this.from); } UndoRedoData_CF.prototype.Properties = { id: 0, to: 2 }; UndoRedoData_CF.prototype.getType = function () { return UndoRedoDataTypes.CFData; }; UndoRedoData_CF.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_CF.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.id: return this.id; case this.Properties.from: return this.from; case this.Properties.to: return this.to; } return null; }; UndoRedoData_CF.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.id: this.id = value; break; case this.Properties.from: this.from = value; break; case this.Properties.to: this.to = value; break; } }; function UndoRedoData_ProtectedRange(id, from, to) { this.id = id; this.from = from; this.to = to; } UndoRedoData_ProtectedRange.prototype.CreateReverseChangeSpreadsheet = function () { return new UndoRedoData_ProtectedRange(this.id, this.to, this.from); } UndoRedoData_ProtectedRange.prototype.Properties = { id: 0, to: 2 }; UndoRedoData_ProtectedRange.prototype.getType = function () { return UndoRedoDataTypes.ProtectedRangeData; }; UndoRedoData_ProtectedRange.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_ProtectedRange.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.id: return this.id; case this.Properties.from: return this.from; case this.Properties.to: return this.to; } return null; }; UndoRedoData_ProtectedRange.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.id: this.id = value; break; case this.Properties.from: this.from = value; break; case this.Properties.to: this.to = value; break; } }; function UndoRedoData_NamedSheetView(sheetView, from, to) { this.sheetView = sheetView; this.from = from; this.to = to; } UndoRedoData_NamedSheetView.prototype.CreateReverseChangeSpreadsheet = function () { return new UndoRedoData_NamedSheetView(this.sheetView, this.to, this.from); } UndoRedoData_NamedSheetView.prototype.Properties = { sheetView: 0, from: 1, to: 2 }; UndoRedoData_NamedSheetView.prototype.getType = function () { return window['AscCommonExcel'].UndoRedoDataTypes.NamedSheetViewChange; }; UndoRedoData_NamedSheetView.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_NamedSheetView.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.sheetView: return this.sheetView; case this.Properties.from: return this.from; case this.Properties.to: return this.to; } return null; }; UndoRedoData_NamedSheetView.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.sheetView: this.sheetView = value; break; case this.Properties.from: this.from = value; break; case this.Properties.to: this.to = value; break; } }; function UndoRedoData_NamedSheetViewRedo(sheetView, from, to) { this.sheetView = sheetView; this.from = from; this.to = to; } UndoRedoData_NamedSheetViewRedo.prototype = Object.create(UndoRedoData_NamedSheetView.prototype); UndoRedoData_NamedSheetViewRedo.prototype.Properties = { sheetView: 0, to: 2 }; function UndoRedoData_UserProtectedRange(id, from, to) { this.id = id; this.from = from; this.to = to; } UndoRedoData_UserProtectedRange.prototype.CreateReverseChangeSpreadsheet = function () { return new UndoRedoData_UserProtectedRange(this.id, this.to, this.from); } UndoRedoData_UserProtectedRange.prototype.Properties = { id: 0, from: 1, to: 2 }; UndoRedoData_UserProtectedRange.prototype.getType = function () { return UndoRedoDataTypes.UserProtectedRangeChange; }; UndoRedoData_UserProtectedRange.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_UserProtectedRange.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.id: return this.id; case this.Properties.from: return this.from; case this.Properties.to: return this.to; } return null; }; UndoRedoData_UserProtectedRange.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.id: this.id = value; break; case this.Properties.from: this.from = value; break; case this.Properties.to: this.to = value; break; } }; function UndoRedoData_RowColBreaks(id, min, max, man, pt, byCol) { this.id = id; this.min = min; this.max = max; this.man = man; this.pt = pt; this.byCol = byCol; } UndoRedoData_RowColBreaks.prototype.Properties = { id: 0, min: 1, max: 2, man: 3, pt: 4, byCol: 5 }; UndoRedoData_RowColBreaks.prototype.getType = function () { return UndoRedoDataTypes.RowColBreaks; }; UndoRedoData_RowColBreaks.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_RowColBreaks.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.id: return this.id; case this.Properties.min: return this.min; case this.Properties.max: return this.max; case this.Properties.man: return this.man; case this.Properties.pt: return this.pt; case this.Properties.byCol: return this.byCol; } return null; }; UndoRedoData_RowColBreaks.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.id: this.id = value; break; case this.Properties.min: this.min = value; break; case this.Properties.max: this.max = value; break; case this.Properties.man: this.man = value; break; case this.Properties.pt: this.pt = value; break; case this.Properties.byCol: this.byCol = value; break; } }; function UndoRedoData_LegacyDrawingHFDrawing(id, graphicId) { this.id = id; this.graphicId = graphicId; } UndoRedoData_LegacyDrawingHFDrawing.prototype.Properties = { id: 0, graphicId: 1 }; UndoRedoData_LegacyDrawingHFDrawing.prototype.getType = function () { return UndoRedoDataTypes.LegacyDrawingHFDrawing; }; UndoRedoData_LegacyDrawingHFDrawing.prototype.getProperties = function () { return this.Properties; }; UndoRedoData_LegacyDrawingHFDrawing.prototype.getProperty = function (nType) { switch (nType) { case this.Properties.id: return this.id; case this.Properties.graphicId: return this.graphicId; } return null; }; UndoRedoData_LegacyDrawingHFDrawing.prototype.setProperty = function (nType, value) { switch (nType) { case this.Properties.id: this.id = value; break; case this.Properties.graphicId: this.graphicId = value; break; } }; //для применения изменений var UndoRedoClassTypes = new function () { this.aTypes = []; this.offset = 0; this.Add = function (fCreate) { var nRes = this.aTypes.length; this.aTypes.push(fCreate); return nRes + this.offset; }; this.Create = function (nType) { const nTypeIndex = nType - this.offset; if (0 <= nTypeIndex && nTypeIndex < this.aTypes.length) { return this.aTypes[nTypeIndex](); } return null; }; this.SetOffset = function (offset) { this.offset = offset || 0; }; this.Clean = function () { this.aTypes = []; }; }; function UndoRedoClassBase() { } UndoRedoClassBase.prototype.Get_Id = function () { //for CCollaborativeHistory.prototype.UndoOwnPoint }; UndoRedoClassBase.prototype.IsNeedRecalculate = function () { //for CHistory.prototype.Add return false; }; UndoRedoClassBase.prototype.IsNeedRecalculateLineNumbers = function () { //for CHistory.prototype.Add return false; }; UndoRedoClassBase.prototype.GetClass = function () { //for CChangesBaseContentChange.prototype.IsRelated return undefined; }; function UndoRedoWorkbook(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoWorkbook; }); } UndoRedoWorkbook.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoWorkbook.prototype.getClassType = function () { return this.nType; }; UndoRedoWorkbook.prototype.IsContentChangeSpreadsheet = function (Type) { return AscCH.historyitem_Workbook_SheetAdd === Type || AscCH.historyitem_Workbook_SheetRemove === Type; }; UndoRedoWorkbook.prototype.IsRelatedSpreadsheet = function (oChanges, Type) { return this === oChanges && oChanges.IsContentChangeSpreadsheet(Type); }; UndoRedoWorkbook.prototype.ConvertToSimpleActionsSpreadsheet = function(Type, Data) { let isAdd = AscCH.historyitem_Workbook_SheetAdd === Type; let index = isAdd ? Data.insertBefore : Data.index; return [{ Item : this, Pos : index, Add : isAdd }]; }; UndoRedoWorkbook.prototype.ConvertToSimpleChangesSpreadsheet = function(SerializableItem) { const oItem = new UndoRedoItemSerializable(SerializableItem.oClass, SerializableItem.nActionType, SerializableItem.nSheetId, SerializableItem.oRange, SerializableItem.oData, SerializableItem.LocalChange); return [oItem]; }; UndoRedoWorkbook.prototype.ConvertFromSimpleActionsSpreadsheet = function(arrActions, Data) { let action = arrActions[0]; if (action) { if (action.Add) { Data.insertBefore = action.Pos; } else { Data.index = action.Pos; } } }; UndoRedoWorkbook.prototype.CreateReverseChangeSpreadsheet = function (ToClass, Type, nSheetId, oRange, Data, LocalChange) { if (AscCH.historyitem_Workbook_SheetAdd === Type) { Type = AscCH.historyitem_Workbook_SheetRemove; Data = new AscCommonExcel.UndoRedoData_SheetRemove(Data.insertBefore, Data.sheetid, Data.opt_sheet); } else if (AscCH.historyitem_Workbook_SheetRemove === Type) { Type = AscCH.historyitem_Workbook_SheetAdd; let ws = AscCommon.g_oTableId.Get_ById(Data.sheetId); if (ws) { Data = new UndoRedoData_SheetAdd(Data.index, ws.getName(), null, Data.sheetId, null, null, Data.sheetId); } else { return; } } else { return; } return new UndoRedoItemSerializable(ToClass, Type, nSheetId, oRange, Data, LocalChange); }; UndoRedoWorkbook.prototype.CommuteRelatedRemoveSheet = function (sheetId, oActionOther) { return !(AscCH.historyitem_Workbook_SheetRemove === oActionOther.nActionType && oActionOther.oData && sheetId === oActionOther.oData.sheetId); } UndoRedoWorkbook.prototype.CommuteRelated = function (oActionToUndo, oActionOther) { return true; } UndoRedoWorkbook.prototype.Undo = function (Type, Data, nSheetId, opt_wb) { this.UndoRedo(Type, Data, nSheetId, true, opt_wb); }; UndoRedoWorkbook.prototype.Redo = function (Type, Data, nSheetId, opt_wb) { this.UndoRedo(Type, Data, nSheetId, false, opt_wb); }; UndoRedoWorkbook.prototype.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) { if (null == Data.insertBefore) { Data.insertBefore = 0; } if (bUndo) { var outputParams = {sheet: null}; wb.removeWorksheet(Data.insertBefore, outputParams); //сохраняем тот sheet который удалили, иначе может возникнуть ошибка, если какой-то обьект запоминал ссылку на sheet(например): //Добавляем лист -> Добавляем ссылку -> undo -> undo -> redo -> redo Data.sheet = outputParams.sheet; } else { if (Data.opt_sheet) { /*var api = window["Asc"]["editor"]; api.wb.pasteSheet(Data.opt_sheet, 0, Data.name); api.asc_EndMoveSheet2(Data.opt_sheet, 0, Data.name);*/ var tempWorkbook = new AscCommonExcel.Workbook(undefined, undefined, false); tempWorkbook.DrawingDocument = Asc.editor.wbModel.DrawingDocument; tempWorkbook.setCommonIndexObjectsFrom(wb); AscCommonExcel.g_clipboardExcel.pasteProcessor._readExcelBinary(Data.opt_sheet.split('xslData;')[1], tempWorkbook, true); /*var api = window["Asc"]["editor"]; //api.wb.pasteSheet(Data.opt_sheet, 0, Data.name); api.asc_EndMoveSheet(Data.insertBefore, [Data.name], [Data.opt_sheet]);*/ wb.copyWorksheet(0, Data.insertBefore, Data.name, Data.sheetid, true, Data.tableNames, tempWorkbook.aWorksheets[0]); //var renameParams = t.model.copyWorksheet(0, insertBefore, name, undefined, undefined, undefined, pastedWs); //wb.copyWorksheet(0, Data.insertBefore, Data.name, Data.sheetid, true, Data.tableNames, tempWorkbook.aWorksheets[0]); } else if (null != Data.sheet) { //сюда заходим только если до этого было сделано Undo wb.insertWorksheet(Data.insertBefore, Data.sheet); } else if (null != Data.opt_sheetidToAdd) { let ws = AscCommon.g_oTableId.Get_ById(Data.opt_sheetidToAdd); if (ws) { wb.insertWorksheet(Data.insertBefore, ws); } } else { if (null == Data.sheetidfrom) { wb.createWorksheet(Data.insertBefore, Data.name, Data.sheetid); } else { var oCurWorksheet = wb.getWorksheetById(Data.sheetidfrom); var nIndex = oCurWorksheet.getIndex(); wb.copyWorksheet(nIndex, Data.insertBefore, Data.name, Data.sheetid, true, Data.tableNames); } } } wb.handlers.trigger("updateWorksheetByModel"); wb.handlers.trigger("changeCellWatches"); } else if (AscCH.historyitem_Workbook_SheetRemove == Type) { if (bUndo) { wb.insertWorksheet(Data.index, Data.sheet); } else { var nIndex = Data.index; if (null == nIndex) { var oCurWorksheet = wb.getWorksheetById(Data.sheetId); if (oCurWorksheet) { nIndex = oCurWorksheet.getIndex(); } } if (null != nIndex) { wb.removeWorksheet(nIndex); } } wb.handlers.trigger("updateWorksheetByModel"); wb.handlers.trigger("changeCellWatches"); } else if (AscCH.historyitem_Workbook_DefinedNamesChange === Type || AscCH.historyitem_Workbook_DefinedNamesChangeUndo === Type) { var oldName, newName; if (bUndo) { oldName = Data.to; newName = Data.from; } else { if (wb.bCollaborativeChanges) { wb.handlers.trigger("asc_onLockDefNameManager", Asc.c_oAscDefinedNameReason.OK); } oldName = Data.from; newName = Data.to; } if (bUndo || AscCH.historyitem_Workbook_DefinedNamesChangeUndo !== Type) { if (null == newName) { wb.delDefinesNamesUndoRedo(oldName); wb.handlers.trigger("asc_onDelDefName") } else { wb.editDefinesNamesUndoRedo(oldName, newName, true); wb.handlers.trigger("asc_onEditDefName", oldName, newName); } // clear traces wb.oApi.asc_RemoveTraceArrows(Asc.c_oAscRemoveArrowsType.all); } } else if (AscCH.historyitem_Workbook_Calculate === Type) { if (!bUndo && wb.bCollaborativeChanges) { wb.calculate(Data.elem, nSheetId); } } else if (bUndo && AscCH.historyitem_Workbook_PivotWorksheetSource === Type) { var wrapper = bUndo ? Data.from : Data.to; var worksheetSource = AscCommon.g_oTableId.Get_ById(wrapper.Id); if (worksheetSource) { wrapper.readData(worksheetSource); worksheetSource.fromWorksheetSource(worksheetSource, true); } } else if (AscCH.historyitem_Workbook_Date1904 === Type) { wb.setDate1904(bUndo ? Data.from : Data.to); AscCommon.oNumFormatCache.cleanCache(); } else if (AscCH.historyitem_Workbook_ChangeExternalReference === Type) { var from = bUndo ? Data.from : Data.to; var to = bUndo ? Data.to : Data.from; var externalReferenceIndex; if (from && !to) {//удаление from.initExternalReference(); /* the first call is a search by referenceData, if we get null, we make a second call to search by Id below and then add or re-assign the link */ externalReferenceIndex = wb.getExternalReferenceByReferenceData(from.referenceData, true); if (!externalReferenceIndex) { externalReferenceIndex = wb.getExternalLinkIndexById(from._id); } if (externalReferenceIndex !== null) { wb.externalReferences[externalReferenceIndex - 1] = from; } else { wb.externalReferences.push(from); } } else if (!from && to) { //добавление /* the first call is a search by referenceData, if we get null, we make a second call to search by Id below and then delete the link */ externalReferenceIndex = wb.getExternalReferenceByReferenceData(to.referenceData, true); if (!externalReferenceIndex) { externalReferenceIndex = wb.getExternalLinkIndexById(to._id); } if (externalReferenceIndex !== null) { wb._removeExternalReference(externalReferenceIndex - 1); } } else if (from && to) { //изменение //TODO нужно сохранить ссылки на текущий лист /* the first call is a search by referenceData, if we get null, we make a second call to search by Id below and then change the link */ externalReferenceIndex = wb.getExternalReferenceByReferenceData(to.referenceData, true); if (!externalReferenceIndex) { externalReferenceIndex = wb.getExternalLinkIndexById(to._id); } if (externalReferenceIndex !== null) { for (let ws in to.worksheets) { let externalSheet = to.worksheets[ws]; if (externalSheet) { let externalSheetId = externalSheet.getId(); wb.dependencyFormulas.forEachSheetListeners(externalSheetId, function (parsed) { let cell = parsed && parsed.parent; if (cell && cell && cell.nCol != null && cell.nRow != null) { // endListeningRange for previous external source let bbox = new Asc.Range(cell.nCol, cell.nRow, cell.nCol, cell.nRow); parsed._buildDependenciesRef(externalSheetId, bbox, null, null); } }); } } from.worksheets = wb.externalReferences[externalReferenceIndex - 1].worksheets; from.initExternalReference(); from.putToChangedCells(); wb.externalReferences[externalReferenceIndex - 1] = from; } } wb.handlers.trigger("asc_onUpdateExternalReferenceList"); } else if (AscCH.historyitem_Workbook_TimelineCacheDelete === Type) { if (bUndo) { wb.timelineCaches.push(Data.from); } else { wb.onTimelineCacheDelete(Data.from.name); } } else if (AscCH.historyitem_Workbook_CalcPr_iterate === Type) { wb.calcPr.setIterate(bUndo ? Data.from : Data.to); AscCommonExcel.g_cCalcRecursion.initCalcProperties(wb.calcPr); } else if (AscCH.historyitem_Workbook_CalcPr_iterateCount === Type) { wb.calcPr.setIterateCount(bUndo ? Data.from : Data.to); AscCommonExcel.g_cCalcRecursion.initCalcProperties(wb.calcPr); } else if (AscCH.historyitem_Workbook_CalcPr_iterateDelta === Type) { wb.calcPr.setIterateDelta(bUndo ? Data.from : Data.to); AscCommonExcel.g_cCalcRecursion.initCalcProperties(wb.calcPr); } else if(AscCH.historyitem_Workbook_UpdateLinks === Type) { wb.setUpdateLinks(bUndo ? Data.from : Data.to, null, null, !wb.oApi.isDocumentLoadComplete && wb.bCollaborativeChanges); } else if (AscCH.historyitem_Workbook_ShowVerticalScroll === Type) { wb.setShowVerticalScroll(bUndo ? Data.from : Data.to); } else if (AscCH.historyitem_Workbook_ShowHorizontalScroll === Type) { wb.setShowHorizontalScroll(bUndo ? Data.from : Data.to); } else if (AscCH.historyitem_Workbook_SetCustomFunctions === Type) { wb.oApi["pluginMethod_SetCustomFunctions"] && wb.oApi["pluginMethod_SetCustomFunctions"](bUndo ? Data.from : Data.to); } }; UndoRedoWorkbook.prototype.forwardTransformationIsAffect = function (Type) { //todo parserFormula.prototype.processNotify return AscCH.historyitem_Workbook_SheetAdd === Type || AscCH.historyitem_Workbook_SheetRemove === Type || AscCH.historyitem_Workbook_DefinedNamesChange === Type; }; UndoRedoWorkbook.prototype.forwardTransformationGet = function (Type, Data, nSheetId) { if (AscCH.historyitem_Workbook_DefinedNamesChange === Type) { if (Data.newName && Data.newName.Ref) { return {formula: Data.newName.Ref}; } else if (Data.to && Data.to.ref) { return {formula: Data.to.ref}; } } else if (AscCH.historyitem_Workbook_SheetAdd === Type) { return {name: Data.name}; } return null; }; UndoRedoWorkbook.prototype.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; } } else if (AscCH.historyitem_Workbook_DefinedNamesChange === Type) { if (Data.to && Data.to.ref) { Data.to.ref = getRes.formula; } } return null; }; function UndoRedoCell(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoCell; }); } UndoRedoCell.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoCell.prototype.getClassType = function () { return this.nType; }; UndoRedoCell.prototype.Undo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, true); }; UndoRedoCell.prototype.Redo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, false); }; UndoRedoCell.prototype.CreateReverseChangeSpreadsheet = function (ToClass, nActionType, nSheetId, oRange, oData, LocalChange) { oData = oData.CreateReverseChangeSpreadsheet(); return new UndoRedoItemSerializable(ToClass, nActionType, nSheetId, oRange, oData, LocalChange, null) }; UndoRedoCell.prototype.CommuteRelated = function (oActionToUndo, oActionOther) { if (AscCH.historyitem_Unknown === oActionToUndo.nActionType) { //CChangesPointChange oActionToUndo.oData.CommuteRelated(oActionToUndo, oActionOther); return true; } return AscCommonExcel.g_oUndoRedoWorksheet.CommuteRelatedCell(oActionToUndo.oData, oActionOther); }; UndoRedoCell.prototype.UndoRedo = function (Type, Data, nSheetId, bUndo) { let ws = this.wb.getWorksheetById(nSheetId), t = this; if (null == ws) { return; } var nRow = Data.nRow; var nCol = Data.nCol; if (this.wb.bCollaborativeChanges) { var collaborativeEditing = this.wb.oApi.collaborativeEditing; nRow = collaborativeEditing.getLockOtherRow2(nSheetId, nRow); nCol = collaborativeEditing.getLockOtherColumn2(nSheetId, nCol); var oLockInfo = new AscCommonExcel.asc_CLockInfo(); oLockInfo["sheetId"] = nSheetId; oLockInfo["type"] = c_oAscLockTypeElem.Range; oLockInfo["rangeOrObjectId"] = new Asc.Range(nCol, nRow, nCol, nRow); this.wb.aCollaborativeChangeElements.push(oLockInfo); } ws._getCell(nRow, nCol, function (cell) { var Val = bUndo ? Data.oOldVal : Data.oNewVal; if (AscCH.historyitem_Cell_Fontname == Type) { cell.setFontname(Val); } else if (AscCH.historyitem_Cell_Fontsize == Type) { cell.setFontsize(Val); } else if (AscCH.historyitem_Cell_Fontcolor == Type) { cell.setFontcolor(Val); } else if (AscCH.historyitem_Cell_Bold == Type) { cell.setBold(Val); } else if (AscCH.historyitem_Cell_Italic == Type) { cell.setItalic(Val); } else if (AscCH.historyitem_Cell_Underline == Type) { cell.setUnderline(Val); } else if (AscCH.historyitem_Cell_Strikeout == Type) { cell.setStrikeout(Val); } else if (AscCH.historyitem_Cell_FontAlign == Type) { cell.setFontAlign(Val); } else if (AscCH.historyitem_Cell_AlignVertical == Type) { cell.setAlignVertical(Val); } else if (AscCH.historyitem_Cell_AlignHorizontal == Type) { cell.setAlignHorizontal(Val); } else if (AscCH.historyitem_Cell_ReadingOrder == Type) { cell.setReadingOrder(Val); } else if (AscCH.historyitem_Cell_Fill == Type) { cell.setFill(Val); } else if (AscCH.historyitem_Cell_Border == Type) { if (null != Val) { cell.setBorder(Val.clone()); } else { cell.setBorder(null); } } else if (AscCH.historyitem_Cell_ShrinkToFit == Type) { cell.setShrinkToFit(Val); } else if (AscCH.historyitem_Cell_Wrap == Type) { cell.setWrap(Val); } else if (AscCH.historyitem_Cell_Num == Type) { cell.setNum(Val); } else if (AscCH.historyitem_Cell_Angle == Type) { cell.setAngle(Val); } else if (AscCH.historyitem_Cell_Indent == Type) { cell.setIndent(Val); } else if (AscCH.historyitem_Cell_ChangeArrayValueFormat == Type) { var multiText = []; for (var i = 0, length = Val.length; i < length; ++i) { multiText.push(Val[i].clone()); } cell.setValueMultiTextInternal(multiText); } else if (AscCH.historyitem_Cell_ChangeValue === Type || AscCH.historyitem_Cell_ChangeValueUndo === Type) { if (bUndo || AscCH.historyitem_Cell_ChangeValueUndo !== Type) { cell.setValueData(Val); } } else if (AscCH.historyitem_Cell_SetStyle == Type) { if (null != Val) { cell.setStyle(Val); } else { cell.setStyle(null); } } else if (AscCH.historyitem_Cell_SetFont == Type) { cell.setFont(Val); } else if (AscCH.historyitem_Cell_SetQuotePrefix == Type) { cell.setQuotePrefix(Val); } else if (AscCH.historyitem_Cell_SetPivotButton == Type) { cell.setPivotButton(Val); } else if (AscCH.historyitem_Cell_Style == Type) { cell.setCellStyle(Val); } else if (AscCH.historyitem_Cell_RemoveSharedFormula == Type) { if (null !== Val && bUndo) { var parsed = ws.workbook.workbookFormulas.get(Val); if (parsed) { cell.setFormulaParsed(parsed); } } } else if (AscCH.historyitem_Cell_SetApplyProtection == Type) { cell.setApplyProtection(Val); } else if (AscCH.historyitem_Cell_SetLocked == Type) { cell.setLocked(Val); } else if (AscCH.historyitem_Cell_SetHidden == Type) { cell.setHiddenFormulas(Val); } }); }; UndoRedoCell.prototype.forwardTransformationGet = function (Type, Data, nSheetId) { if (AscCH.historyitem_Cell_ChangeValue === Type && Data.oNewVal && Data.oNewVal.formula) { return {formula: Data.oNewVal.formula}; } return null; }; UndoRedoCell.prototype.forwardTransformationSet = function (Type, Data, nSheetId, getRes) { if (AscCH.historyitem_Cell_ChangeValue === Type) { if (Data && Data.oNewVal) { Data.oNewVal.formula = getRes.formula; } } return null; }; function UndoRedoWoorksheet(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoWorksheet; }); this.tmpCell = new AscCommon.CellBase(0, 0); this.tmpRange = new Asc.Range(0,0,0,0); } UndoRedoWoorksheet.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoWoorksheet.prototype.getClassType = function () { return this.nType; }; UndoRedoWoorksheet.prototype.CreateReverseChangeSpreadsheet = function (ToClass, Type, nSheetId, oRange, Data, LocalChange) { if (AscCH.historyitem_Worksheet_RemoveCell === Type || AscCH.historyitem_Worksheet_ColProp === Type || AscCH.historyitem_Worksheet_RowProp === Type) { Data = Data.CreateReverseChangeSpreadsheet(); } else if (AscCH.historyitem_Worksheet_RowHide === Type) { Data = Data.CreateReverseChangeSpreadsheet(); } else if (AscCH.historyitem_Worksheet_AddRows === Type) { Type = AscCH.historyitem_Worksheet_RemoveRows; } else if (AscCH.historyitem_Worksheet_RemoveRows === Type) { Type = AscCH.historyitem_Worksheet_AddRows; } else if (AscCH.historyitem_Worksheet_AddCols === Type) { Type = AscCH.historyitem_Worksheet_RemoveCols; } else if (AscCH.historyitem_Worksheet_RemoveCols === Type) { Type = AscCH.historyitem_Worksheet_AddCols; } else if (AscCH.historyitem_Worksheet_ShiftCellsLeft === Type) { Type = AscCH.historyitem_Worksheet_ShiftCellsRight; } else if (AscCH.historyitem_Worksheet_ShiftCellsRight === Type) { Type = AscCH.historyitem_Worksheet_ShiftCellsLeft; } else if (AscCH.historyitem_Worksheet_ShiftCellsTop === Type) { Type = AscCH.historyitem_Worksheet_ShiftCellsBottom; } else if (AscCH.historyitem_Worksheet_ShiftCellsBottom === Type) { Type = AscCH.historyitem_Worksheet_ShiftCellsTop; } else if (AscCH.historyitem_Worksheet_Sort === Type) { ; } else if (AscCH.historyitem_Worksheet_MoveRange === Type || AscCH.historyitem_Worksheet_Rename === Type || AscCH.historyitem_Worksheet_Hide === Type || AscCH.historyitem_Worksheet_SetDisplayGridlines === Type || AscCH.historyitem_Worksheet_SetDisplayHeadings === Type || AscCH.historyitem_Worksheet_ChangeMerge === Type || AscCH.historyitem_Worksheet_ChangeHyperlink === Type || AscCH.historyitem_Worksheet_ChangeFrozenCell === Type || AscCH.historyitem_Worksheet_SetTabColor === Type || AscCH.historyitem_Worksheet_SetSummaryRight === Type || AscCH.historyitem_Worksheet_SetSummaryBelow === Type || AscCH.historyitem_Worksheet_GroupRow === Type || AscCH.historyitem_Worksheet_GroupCol === Type || AscCH.historyitem_Worksheet_CollapsedRow === Type || AscCH.historyitem_Worksheet_CollapsedCol === Type || AscCH.historyitem_Worksheet_SetFitToPage === Type || AscCH.historyitem_Worksheet_SetTopLeftCell === Type) { Data = Data.CreateReverseChangeSpreadsheet(); } else { return; } return new UndoRedoItemSerializable(ToClass, Type, nSheetId, oRange, Data, LocalChange); }; UndoRedoWoorksheet.prototype.CommuteRelated = function (oActionToUndo, oActionOther) { let isAddRowUndo = AscCH.historyitem_Worksheet_AddRows === oActionToUndo.nActionType; let isAddColUndo = AscCH.historyitem_Worksheet_AddCols === oActionToUndo.nActionType; let isRemoveRowUndo = AscCH.historyitem_Worksheet_RemoveRows === oActionToUndo.nActionType; let isRemoveColUndo = AscCH.historyitem_Worksheet_RemoveCols === oActionToUndo.nActionType; let isAddRowOther = AscCommonExcel.g_oUndoRedoWorksheet === oActionOther.oClass && AscCH.historyitem_Worksheet_AddRows === oActionOther.nActionType; let isAddColOther = AscCommonExcel.g_oUndoRedoWorksheet === oActionOther.oClass && AscCH.historyitem_Worksheet_AddCols === oActionOther.nActionType; let isRemoveRowOther = AscCommonExcel.g_oUndoRedoWorksheet === oActionOther.oClass && AscCH.historyitem_Worksheet_RemoveRows === oActionOther.nActionType; let isRemoveColOther = AscCommonExcel.g_oUndoRedoWorksheet === oActionOther.oClass && AscCH.historyitem_Worksheet_RemoveCols === oActionOther.nActionType; let isAddUndo = isAddRowUndo || isAddColUndo; let isAddOther = isAddRowOther || isAddColOther; let isRemoveUndo = isRemoveRowUndo || isRemoveColUndo; let isRemoveOther = isRemoveRowOther || isRemoveColOther; let res = true; if ((isAddRowUndo || isRemoveRowUndo) && (isAddRowOther || isRemoveRowOther) || (isAddColUndo || isRemoveColUndo) && (isAddColOther || isRemoveColOther)) { if(isAddUndo) { if(isAddOther) { let heightUndo = oActionOther.oData.to - oActionOther.oData.from + 1; let heightOther = oActionOther.oData.to - oActionOther.oData.from + 1; if (oActionToUndo.oData.from >= oActionOther.oData.from) { oActionToUndo.oData.from += heightOther; oActionToUndo.oData.to += heightOther; } else if (oActionToUndo.oData.from < oActionOther.oData.from && oActionOther.oData.from <= oActionToUndo.oData.to) { oActionToUndo.oData.to += heightOther; } else { oActionOther.oData.from -= heightUndo; oActionOther.oData.to -= heightUndo; } } else if(isRemoveOther){ //todo let heightUndo = oActionOther.oData.to - oActionOther.oData.from + 1; let heightOther = oActionOther.oData.to - oActionOther.oData.from + 1; if (oActionToUndo.oData.from > oActionOther.oData.to) { oActionToUndo.oData.from -= heightOther; oActionToUndo.oData.to -= heightOther; } else if (oActionToUndo.oData.to < oActionOther.oData.from) { oActionOther.oData.from += heightUndo; oActionOther.oData.to += heightUndo; } else { return false; } } } else if(isRemoveUndo){ if(isAddOther) { //todo let heightUndo = oActionOther.oData.to - oActionOther.oData.from + 1; let heightOther = oActionOther.oData.to - oActionOther.oData.from + 1; if (oActionToUndo.oData.from >= oActionOther.oData.from) { oActionToUndo.oData.from += heightOther; oActionToUndo.oData.to += heightOther; } else if (oActionToUndo.oData.from < oActionOther.oData.from && oActionOther.oData.from <= oActionToUndo.oData.to) { oActionToUndo.oData.to += heightOther; } else { oActionOther.oData.from -= heightUndo; oActionOther.oData.to -= heightUndo; } } else if(isRemoveOther){ let heightUndo = oActionOther.oData.to - oActionOther.oData.from + 1; let heightOther = oActionOther.oData.to - oActionOther.oData.from + 1; if (oActionToUndo.oData.from > oActionOther.oData.to) { oActionToUndo.oData.from -= heightOther; oActionToUndo.oData.to -= heightOther; } else if (oActionToUndo.oData.to < oActionOther.oData.from) { oActionOther.oData.from += heightUndo; oActionOther.oData.to += heightUndo; } else { return false; } } } } if (AscCH.historyitem_Worksheet_RemoveCell === oActionToUndo.nActionType) { res = AscCommonExcel.g_oUndoRedoWorksheet.CommuteRelatedCell(oActionToUndo.oData, oActionOther); } else if (AscCH.historyitem_Worksheet_ColProp === oActionToUndo.nActionType || AscCH.historyitem_Worksheet_GroupCol === oActionToUndo.nActionType || AscCH.historyitem_Worksheet_CollapsedCol === oActionToUndo.nActionType) { res = AscCommonExcel.g_oUndoRedoWorksheet.CommuteRelatedRowCol(oActionToUndo.oData, false, oActionOther); } else if (AscCH.historyitem_Worksheet_RowProp === oActionToUndo.nActionType || AscCH.historyitem_Worksheet_GroupRow === oActionToUndo.nActionType || AscCH.historyitem_Worksheet_CollapsedRow === oActionToUndo.nActionType) { res = AscCommonExcel.g_oUndoRedoWorksheet.CommuteRelatedRowCol(oActionToUndo.oData, true, oActionOther); } else if (AscCH.historyitem_Worksheet_RowHide === oActionToUndo.nActionType) { res = AscCommonExcel.g_oUndoRedoWorksheet.CommuteRelatedRowColFromTo(oActionToUndo.oData, true, oActionOther); } else if (AscCH.historyitem_Worksheet_Sort === oActionToUndo.nActionType) { res = AscCommonExcel.g_oUndoRedoWorksheet.CommuteRelatedRange(oActionToUndo.oData.bbox, oActionOther); } else if (AscCH.historyitem_Worksheet_MoveRange === oActionToUndo.nActionType || AscCH.historyitem_Worksheet_ChangeMerge === oActionToUndo.nActionType || AscCH.historyitem_Worksheet_ChangeHyperlink === oActionToUndo.nActionType || AscCH.historyitem_Worksheet_ChangeFrozenCell === oActionToUndo.nActionType || AscCH.historyitem_Worksheet_SetTopLeftCell === oActionToUndo.nActionType) { res = AscCommonExcel.g_oUndoRedoWorksheet.CommuteRelatedRange(oActionToUndo.oData.from, oActionOther); res = res && AscCommonExcel.g_oUndoRedoWorksheet.CommuteRelatedRange(oActionToUndo.oData.to, oActionOther); } return res; }; UndoRedoWoorksheet.prototype.Undo = function (Type, Data, nSheetId, opt_wb) { this.UndoRedo(Type, Data, nSheetId, true, opt_wb); }; UndoRedoWoorksheet.prototype.Redo = function (Type, Data, nSheetId, opt_wb) { this.UndoRedo(Type, Data, nSheetId, false, opt_wb); }; UndoRedoWoorksheet.prototype.UndoRedo = function (Type, Data, nSheetId, bUndo, opt_wb) { var wb = opt_wb ? opt_wb : this.wb; var worksheetView, nRow, nCol, oLockInfo, index, from, to, range, r1, c1, r2, c2, temp, i, length, data; var bInsert, operType; // ToDo избавиться от этого var ws = wb.getWorksheetById(nSheetId); if (null == ws) { return; } var collaborativeEditing = wb.oApi.collaborativeEditing; var changeFreezePane; if (AscCH.historyitem_Worksheet_RemoveCell === Type) { nRow = Data.nRow; nCol = Data.nCol; if (wb.bCollaborativeChanges) { nRow = collaborativeEditing.getLockOtherRow2(nSheetId, nRow); nCol = collaborativeEditing.getLockOtherColumn2(nSheetId, nCol); oLockInfo = new AscCommonExcel.asc_CLockInfo(); oLockInfo["sheetId"] = nSheetId; oLockInfo["type"] = c_oAscLockTypeElem.Range; oLockInfo["rangeOrObjectId"] = new Asc.Range(nCol, nRow, nCol, nRow); wb.aCollaborativeChangeElements.push(oLockInfo); } let oValue, oStyle; if (bUndo) { oValue = Data.oOldVal.value; oStyle = Data.oOldVal.style; ws._getCell(nRow, nCol, function (cell) { cell.setValueData(oValue); if (null != oStyle) { cell.setStyle(oStyle); } else { cell.setStyle(null); } }); } else { if (Data.oNewVal) { oValue = Data.oNewVal.value; oStyle = Data.oNewVal.style; ws._getCell(nRow, nCol, function (cell) { cell.setValueData(oValue); if (null != oStyle) { cell.setStyle(oStyle); } else { cell.setStyle(null); } }); } else { ws._removeCell(nRow, nCol); } } } else if (AscCH.historyitem_Worksheet_ColProp === Type) { index = Data.index; if (wb.bCollaborativeChanges) { if (AscCommonExcel.g_nAllColIndex === index) { range = new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0); } else { index = collaborativeEditing.getLockOtherColumn2(nSheetId, index); range = new Asc.Range(index, 0, index, gc_nMaxRow0); } oLockInfo = new AscCommonExcel.asc_CLockInfo(); oLockInfo["sheetId"] = nSheetId; oLockInfo["type"] = c_oAscLockTypeElem.Range; oLockInfo["rangeOrObjectId"] = range; wb.aCollaborativeChangeElements.push(oLockInfo); } var col = ws._getCol(index); col.setWidthProp(bUndo ? Data.oOldVal : Data.oNewVal); ws.initColumn(col); } else if (AscCH.historyitem_Worksheet_RowProp === Type) { index = Data.index; if (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); wb.aCollaborativeChangeElements.push(oLockInfo); } ws._getRow(index, function (row) { if (bUndo) { row.setHeightProp(Data.oOldVal); } else { row.setHeightProp(Data.oNewVal); } }); //нужно для того, чтобы грамотно выставлялись цвета в ф/т при ручном скрытии строк, затрагивающих ф/т(undo/redo) //TODO для случая скрытия строк фильтром(undo), может два раза вызываться функция setColorStyleTable - пересмотреть worksheetView = wb.oApi.wb.getWorksheetById(nSheetId); if (worksheetView) { worksheetView.model.autoFilters.reDrawFilter(null, index); } } else if (AscCH.historyitem_Worksheet_RowHide === Type) { from = Data.from; to = Data.to; nRow = Data.bRow; if (wb.bCollaborativeChanges) { from = collaborativeEditing.getLockOtherRow2(nSheetId, from); to = collaborativeEditing.getLockOtherRow2(nSheetId, to); oLockInfo = new AscCommonExcel.asc_CLockInfo(); oLockInfo["sheetId"] = nSheetId; oLockInfo["type"] = c_oAscLockTypeElem.Range; oLockInfo["rangeOrObjectId"] = new Asc.Range(0, from, gc_nMaxCol0, to); wb.aCollaborativeChangeElements.push(oLockInfo); } if (bUndo) { nRow = !nRow; } ws.setRowHidden(nRow, from, to); worksheetView = wb.oApi.wb.getWorksheetById(nSheetId); if (worksheetView) { worksheetView.model.autoFilters.reDrawFilter(new Asc.Range(0, from, ws.nColsCount - 1, to)); } } else if (AscCH.historyitem_Worksheet_AddRows === Type || AscCH.historyitem_Worksheet_RemoveRows === Type) { from = Data.from; to = Data.to; if (wb.bCollaborativeChanges) { from = collaborativeEditing.getLockOtherRow2(nSheetId, from); to = collaborativeEditing.getLockOtherRow2(nSheetId, to); if (false == ((true == bUndo && AscCH.historyitem_Worksheet_AddRows === Type) || (false == bUndo && AscCH.historyitem_Worksheet_RemoveRows === Type))) { oLockInfo = new AscCommonExcel.asc_CLockInfo(); oLockInfo["sheetId"] = nSheetId; oLockInfo["type"] = c_oAscLockTypeElem.Range; oLockInfo["rangeOrObjectId"] = new Asc.Range(0, from, gc_nMaxCol0, to); wb.aCollaborativeChangeElements.push(oLockInfo); } } range = new Asc.Range(0, from, gc_nMaxCol0, to); if ((true == bUndo && AscCH.historyitem_Worksheet_AddRows === Type) || (false == bUndo && AscCH.historyitem_Worksheet_RemoveRows === Type)) { ws.removeRows(from, to); bInsert = false; operType = c_oAscDeleteOptions.DeleteRows; } else { ws.insertRowsBefore(from, to - from + 1); bInsert = true; operType = c_oAscInsertOptions.InsertRows; } // Нужно поменять пересчетные индексы для совместного редактирования (lock-элементы), но только если это не изменения от другого пользователя if (!wb.bCollaborativeChanges) { ws.workbook.handlers.trigger("undoRedoAddRemoveRowCols", nSheetId, Type, range, bUndo); } // ToDo Так делать неправильно, нужно поправить (перенести логику в model, а отрисовку отделить) worksheetView = wb.oApi.wb.getWorksheetById(nSheetId); if (worksheetView) { worksheetView.cellCommentator.updateCommentsDependencies(bInsert, operType, range); worksheetView.shiftCellWatches(bInsert, operType, range); if (wb.bCollaborativeChanges) { changeFreezePane = worksheetView._getFreezePaneOffset(operType, range, bInsert); if (changeFreezePane) { worksheetView._updateFreezePane(changeFreezePane.col, changeFreezePane.row, true); } } } //ws.shiftDataValidation(bInsert, operType, range); } else if (AscCH.historyitem_Worksheet_AddCols === Type || AscCH.historyitem_Worksheet_RemoveCols === Type) { from = Data.from; to = Data.to; if (wb.bCollaborativeChanges) { from = collaborativeEditing.getLockOtherColumn2(nSheetId, from); to = collaborativeEditing.getLockOtherColumn2(nSheetId, to); if (false == ((true == bUndo && AscCH.historyitem_Worksheet_AddCols === Type) || (false == bUndo && AscCH.historyitem_Worksheet_RemoveCols === Type))) { oLockInfo = new AscCommonExcel.asc_CLockInfo(); oLockInfo["sheetId"] = nSheetId; oLockInfo["type"] = c_oAscLockTypeElem.Range; oLockInfo["rangeOrObjectId"] = new Asc.Range(from, 0, to, gc_nMaxRow0); wb.aCollaborativeChangeElements.push(oLockInfo); } } range = new Asc.Range(from, 0, to, gc_nMaxRow0); if ((true == bUndo && AscCH.historyitem_Worksheet_AddCols === Type) || (false == bUndo && AscCH.historyitem_Worksheet_RemoveCols === Type)) { ws.removeCols(from, to); bInsert = false; operType = c_oAscDeleteOptions.DeleteColumns; } else { ws.insertColsBefore(from, to - from + 1); bInsert = true; operType = c_oAscInsertOptions.InsertColumns; } // Нужно поменять пересчетные индексы для совместного редактирования (lock-элементы), но только если это не изменения от другого пользователя if (!wb.bCollaborativeChanges) { ws.workbook.handlers.trigger("undoRedoAddRemoveRowCols", nSheetId, Type, range, bUndo); } // ToDo Так делать неправильно, нужно поправить (перенести логику в model, а отрисовку отделить) worksheetView = wb.oApi.wb.getWorksheetById(nSheetId); if (worksheetView) { worksheetView.cellCommentator.updateCommentsDependencies(bInsert, operType, range); worksheetView.shiftCellWatches(bInsert, operType, range); if (wb.bCollaborativeChanges) { changeFreezePane = worksheetView._getFreezePaneOffset(operType, range, bInsert); if (changeFreezePane) { worksheetView._updateFreezePane(changeFreezePane.col, changeFreezePane.row, true); } } } //ws.shiftDataValidation(bInsert, operType, range) } else if (AscCH.historyitem_Worksheet_ShiftCellsLeft === Type || AscCH.historyitem_Worksheet_ShiftCellsRight === Type) { r1 = Data.r1; c1 = Data.c1; r2 = Data.r2; c2 = Data.c2; if (wb.bCollaborativeChanges) { r1 = collaborativeEditing.getLockOtherRow2(nSheetId, r1); c1 = collaborativeEditing.getLockOtherColumn2(nSheetId, c1); r2 = collaborativeEditing.getLockOtherRow2(nSheetId, r2); c2 = collaborativeEditing.getLockOtherColumn2(nSheetId, c2); if (false == ((true == bUndo && AscCH.historyitem_Worksheet_ShiftCellsLeft === Type) || (false == bUndo && AscCH.historyitem_Worksheet_ShiftCellsRight === Type))) { oLockInfo = new AscCommonExcel.asc_CLockInfo(); oLockInfo["sheetId"] = nSheetId; oLockInfo["type"] = c_oAscLockTypeElem.Range; oLockInfo["rangeOrObjectId"] = new Asc.Range(c1, r1, c2, r2); wb.aCollaborativeChangeElements.push(oLockInfo); } } range = ws.getRange3(r1, c1, r2, c2); if ((true == bUndo && AscCH.historyitem_Worksheet_ShiftCellsLeft === Type) || (false == bUndo && AscCH.historyitem_Worksheet_ShiftCellsRight === Type)) { range.addCellsShiftRight(); bInsert = true; operType = c_oAscInsertOptions.InsertCellsAndShiftRight; } else { range.deleteCellsShiftLeft(); bInsert = false; operType = c_oAscDeleteOptions.DeleteCellsAndShiftLeft; } // ToDo Так делать неправильно, нужно поправить (перенести логику в model, а отрисовку отделить) worksheetView = wb.oApi.wb.getWorksheetById(nSheetId); if (worksheetView) { worksheetView.cellCommentator.updateCommentsDependencies(bInsert, operType, range.bbox); worksheetView.shiftCellWatches(bInsert, operType, range.bbox); } } else if (AscCH.historyitem_Worksheet_ShiftCellsTop === Type || AscCH.historyitem_Worksheet_ShiftCellsBottom === Type) { r1 = Data.r1; c1 = Data.c1; r2 = Data.r2; c2 = Data.c2; if (wb.bCollaborativeChanges) { r1 = collaborativeEditing.getLockOtherRow2(nSheetId, r1); c1 = collaborativeEditing.getLockOtherColumn2(nSheetId, c1); r2 = collaborativeEditing.getLockOtherRow2(nSheetId, r2); c2 = collaborativeEditing.getLockOtherColumn2(nSheetId, c2); if (false == ((true == bUndo && AscCH.historyitem_Worksheet_ShiftCellsTop === Type) || (false == bUndo && AscCH.historyitem_Worksheet_ShiftCellsBottom === Type))) { oLockInfo = new AscCommonExcel.asc_CLockInfo(); oLockInfo["sheetId"] = nSheetId; oLockInfo["type"] = c_oAscLockTypeElem.Range; oLockInfo["rangeOrObjectId"] = new Asc.Range(c1, r1, c2, r2); wb.aCollaborativeChangeElements.push(oLockInfo); } } range = ws.getRange3(r1, c1, r2, c2); if ((true == bUndo && AscCH.historyitem_Worksheet_ShiftCellsTop === Type) || (false == bUndo && AscCH.historyitem_Worksheet_ShiftCellsBottom === Type)) { range.addCellsShiftBottom(); bInsert = true; operType = c_oAscInsertOptions.InsertCellsAndShiftDown; } else { range.deleteCellsShiftUp(); bInsert = false; operType = c_oAscDeleteOptions.DeleteCellsAndShiftTop; } // ToDo Так делать неправильно, нужно поправить (перенести логику в model, а отрисовку отделить) worksheetView = wb.oApi.wb.getWorksheetById(nSheetId); if (worksheetView) { worksheetView.cellCommentator.updateCommentsDependencies(bInsert, operType, range.bbox); worksheetView.shiftCellWatches(bInsert, operType, range.bbox); } } else if (AscCH.historyitem_Worksheet_Sort == Type) { var bbox = Data.bbox; var places = Data.places; var sortByRow = Data.sortByRow; if (wb.bCollaborativeChanges) { bbox.r1 = collaborativeEditing.getLockOtherRow2(nSheetId, bbox.r1); bbox.c1 = collaborativeEditing.getLockOtherColumn2(nSheetId, bbox.c1); bbox.r2 = collaborativeEditing.getLockOtherRow2(nSheetId, bbox.r2); bbox.c2 = collaborativeEditing.getLockOtherColumn2(nSheetId, bbox.c2); for (i = 0, length = Data.places.length; i < length; ++i) { var place = Data.places[i]; place.from = sortByRow ? collaborativeEditing.getLockOtherColumn2(nSheetId, place.from) : collaborativeEditing.getLockOtherRow2(nSheetId, place.from); place.to = sortByRow ? collaborativeEditing.getLockOtherColumn2(nSheetId, place.to) : collaborativeEditing.getLockOtherRow2(nSheetId, place.to); oLockInfo = new AscCommonExcel.asc_CLockInfo(); oLockInfo["sheetId"] = nSheetId; oLockInfo["type"] = c_oAscLockTypeElem.Range; oLockInfo["rangeOrObjectId"] = new Asc.Range(bbox.c1, place.from, bbox.c2, place.from); wb.aCollaborativeChangeElements.push(oLockInfo); } } range = ws.getRange3(bbox.r1, bbox.c1, bbox.r2, bbox.c2); range._sortByArray(bbox, places, null, sortByRow); worksheetView = wb.oApi.wb.getWorksheetById(nSheetId); if (worksheetView) { worksheetView.model.autoFilters.resetTableStyles(bbox); } } else if (AscCH.historyitem_Worksheet_MoveRange == Type) { //todo worksheetView.autoFilters._moveAutoFilters(worksheetView ,null, null, g_oUndoRedoAutoFiltersMoveData); from = new Asc.Range(Data.from.c1, Data.from.r1, Data.from.c2, Data.from.r2); to = new Asc.Range(Data.to.c1, Data.to.r1, Data.to.c2, Data.to.r2); var copyRange = Data.copyRange; var wsTo = wb.getWorksheetById(Data.sheetIdTo); if (wsTo) { if (bUndo) { temp = from; from = to; to = temp; if (wsTo) { temp = wsTo; wsTo = ws; ws = temp; } } if (wb.bCollaborativeChanges) { var coBBoxTo = new Asc.Range(0, 0, 0, 0), coBBoxFrom = new Asc.Range(0, 0, 0, 0); coBBoxTo.r1 = collaborativeEditing.getLockOtherRow2(nSheetId, to.r1); coBBoxTo.c1 = collaborativeEditing.getLockOtherColumn2(nSheetId, to.c1); coBBoxTo.r2 = collaborativeEditing.getLockOtherRow2(nSheetId, to.r2); coBBoxTo.c2 = collaborativeEditing.getLockOtherColumn2(nSheetId, to.c2); coBBoxFrom.r1 = collaborativeEditing.getLockOtherRow2(nSheetId, from.r1); coBBoxFrom.c1 = collaborativeEditing.getLockOtherColumn2(nSheetId, from.c1); coBBoxFrom.r2 = collaborativeEditing.getLockOtherRow2(nSheetId, from.r2); coBBoxFrom.c2 = collaborativeEditing.getLockOtherColumn2(nSheetId, from.c2); ws._moveRange(coBBoxFrom, coBBoxTo, copyRange, wsTo); } else { ws._moveRange(from, to, copyRange, wsTo); } } worksheetView = wb.oApi.wb.getWorksheetById(nSheetId); if (worksheetView) { if (bUndo)//если на Undo перемещается диапазон из форматированной таблицы - стиль форматированной таблицы не должен цепляться { worksheetView.model.autoFilters._cleanStyleTable(to); } worksheetView.model.autoFilters.reDrawFilter(to); worksheetView.model.autoFilters.reDrawFilter(from); // clear traces if (worksheetView.traceDependentsManager) { worksheetView.traceDependentsManager.clearAll(); } } } else if (AscCH.historyitem_Worksheet_Rename == Type) { if (bUndo) { ws.setName(Data.from); } else { ws.setName(Data.to); } } else if (AscCH.historyitem_Worksheet_Hide == Type) { if (bUndo) { ws.setHidden(Data.from); } else { ws.setHidden(Data.to); } } else if (AscCH.historyitem_Worksheet_SetDisplayGridlines === Type) { ws.setDisplayGridlines(bUndo ? Data.from : Data.to); } else if (AscCH.historyitem_Worksheet_SetDisplayHeadings === Type) { ws.setDisplayHeadings(bUndo ? Data.from : Data.to); } else if (AscCH.historyitem_Worksheet_ChangeMerge === Type) { 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 (wb.bCollaborativeChanges) { from.r1 = collaborativeEditing.getLockOtherRow2(nSheetId, from.r1); from.c1 = collaborativeEditing.getLockOtherColumn2(nSheetId, from.c1); from.r2 = collaborativeEditing.getLockOtherRow2(nSheetId, from.r2); from.c2 = collaborativeEditing.getLockOtherColumn2(nSheetId, from.c2); } } 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 (wb.bCollaborativeChanges) { to.r1 = collaborativeEditing.getLockOtherRow2(nSheetId, to.r1); to.c1 = collaborativeEditing.getLockOtherColumn2(nSheetId, to.c1); to.r2 = collaborativeEditing.getLockOtherRow2(nSheetId, to.r2); to.c2 = collaborativeEditing.getLockOtherColumn2(nSheetId, to.c2); } } if (bUndo) { temp = from; from = to; to = temp; } if (null != from) { var aMerged = ws.mergeManager.get(from); for (i in aMerged.inner) { var merged = aMerged.inner[i]; if (merged.bbox.isEqual(from)) { ws.mergeManager.removeElement(merged); break; } } } data = 1; if (null != to) { ws.mergeManager.add(to, data); ws.workbook.handlers.trigger("changeDocument", AscCommonExcel.docChangedType.mergeRange, null, to, ws.getId()); } } else if (AscCH.historyitem_Worksheet_ChangeHyperlink === Type) { 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 (wb.bCollaborativeChanges) { from.r1 = collaborativeEditing.getLockOtherRow2(nSheetId, from.r1); from.c1 = collaborativeEditing.getLockOtherColumn2(nSheetId, from.c1); from.r2 = collaborativeEditing.getLockOtherRow2(nSheetId, from.r2); from.c2 = collaborativeEditing.getLockOtherColumn2(nSheetId, from.c2); } } 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 (wb.bCollaborativeChanges) { to.r1 = collaborativeEditing.getLockOtherRow2(nSheetId, to.r1); to.c1 = collaborativeEditing.getLockOtherColumn2(nSheetId, to.c1); to.r2 = collaborativeEditing.getLockOtherRow2(nSheetId, to.r2); to.c2 = collaborativeEditing.getLockOtherColumn2(nSheetId, to.c2); } } if (bUndo) { temp = from; from = to; to = temp; } //не делаем clone потому что предполагаем, что здесь могут быть только операции изменения рзмеров, перемещение или удаления одной ссылки data = null; if (null != from) { var aHyperlinks = ws.hyperlinkManager.get(from); for (i in aHyperlinks.inner) { var hyp = aHyperlinks.inner[i]; if (hyp.bbox.isEqual(from)) { data = hyp.data; ws.hyperlinkManager.removeElement(hyp); break; } } } if (null == data) { data = Data.hyperlink; } if (null != data && null != to) { data.Ref = ws.getRange3(to.r1, to.c1, to.r2, to.c2); ws.hyperlinkManager.add(to, data); } } else if (AscCH.historyitem_Worksheet_ChangeFrozenCell === Type) { var updateData = bUndo ? Data.from : Data.to; var _r1 = updateData.r1 > 0 ? collaborativeEditing.getLockOtherRow2(nSheetId, updateData.r1 - 1) : null; var _c1 = updateData.c1 > 0 ? collaborativeEditing.getLockOtherColumn2(nSheetId, updateData.c1 - 1) : null; if (_r1 !== null && _r1 !== updateData.r1 - 1) { _r1++; } else { _r1 = updateData.r1; } if (_c1 !== null && _c1 !== updateData.c1 - 1) { _c1++; } else { _c1 = updateData.c1; } worksheetView = wb.oApi.wb.getWorksheetById(nSheetId); if (worksheetView) { worksheetView._updateFreezePane(_c1, _r1, /*lockDraw*/true); } } else if (AscCH.historyitem_Worksheet_SetTabColor === Type) { ws.setTabColor(bUndo ? Data.from : Data.to); } else if (AscCH.historyitem_Worksheet_SetSummaryRight === Type) { ws.setSummaryRight(bUndo ? Data.from : Data.to); } else if (AscCH.historyitem_Worksheet_SetSummaryBelow === Type) { ws.setSummaryBelow(bUndo ? Data.from : Data.to); } else if (AscCH.historyitem_Worksheet_GroupRow == Type) { index = Data.index; if (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); wb.aCollaborativeChangeElements.push(oLockInfo); } ws._getRow(index, function (row) { if (bUndo) { row.setOutlineLevel(Data.oOldVal); } else { row.setOutlineLevel(Data.oNewVal); } }); } else if (AscCH.historyitem_Worksheet_GroupCol == Type) { index = Data.index; if (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); wb.aCollaborativeChangeElements.push(oLockInfo); } col = ws._getCol(index); if (col) { if (bUndo) { col.setOutlineLevel(Data.oOldVal); } else { col.setOutlineLevel(Data.oNewVal); } } } else if (AscCH.historyitem_Worksheet_CollapsedRow == Type) { index = Data.index; if (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); wb.aCollaborativeChangeElements.push(oLockInfo); } if (bUndo) { ws.setCollapsedRow(Data.oOldVal, index); } else { ws.setCollapsedRow(Data.oNewVal, index); } } else if (AscCH.historyitem_Worksheet_CollapsedCol == Type) { index = Data.index; if (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); wb.aCollaborativeChangeElements.push(oLockInfo); } if (bUndo) { ws.setCollapsedCol(Data.oOldVal, index); } else { ws.setCollapsedCol(Data.oNewVal, index); } } else if (AscCH.historyitem_Worksheet_SetFitToPage === Type) { ws.setFitToPage(bUndo ? Data.from : Data.to); } else if (AscCH.historyitem_Worksheet_PivotAdd === Type) { if (bUndo) { ws.deletePivotTable(Data.Id); } else { var pivot = Data.getData(); pivot.init(); ws.insertPivotTable(pivot, false, true); } } else if (AscCH.historyitem_Worksheet_PivotDelete === Type) { if (bUndo) { ws.insertPivotTable(Data.from, false, true); } else { ws.deletePivotTable(Data.pivot); } } else if (AscCH.historyitem_Worksheet_PivotReplace === Type) { var data = bUndo ? Data.from : Data.to; var pivot = data.getData(); pivot.init(); var oldPivot = ws.getPivotTableById(Data.pivot); if (oldPivot) { pivot.replaceSlicersPivotCacheDefinition(oldPivot.cacheDefinition, pivot.cacheDefinition); } ws.deletePivotTable(Data.pivot); ws.insertPivotTable(pivot, false, false); } else if (AscCH.historyitem_Worksheet_PivotReplaceKeepRecords === Type) { var data = bUndo ? Data.from : Data.to; var pivot = data.getData(); pivot.init(); var oldPivot = ws.getPivotTableById(Data.pivot); if (oldPivot) { pivot.cacheDefinition.cacheRecords = oldPivot.cacheDefinition.cacheRecords; pivot.replaceSlicersPivotCacheDefinition(oldPivot.cacheDefinition, pivot.cacheDefinition); ws.deletePivotTable(Data.pivot); ws.insertPivotTable(pivot, false, false); } } else if (AscCH.historyitem_Worksheet_SlicerAdd === Type) { if (bUndo) { ws.deleteSlicer(Data.to.name); } else { ws.aSlicers.push(Data.to); Data.to.init(null, null, null, ws); wb.onSlicerUpdate(Data.to.name); } } else if (AscCH.historyitem_Worksheet_SlicerDelete === Type) { if (bUndo) { ws.aSlicers.push(Data.from); Data.from.init(null, null, null, ws); wb.onSlicerUpdate(Data.from.name); } else { ws.deleteSlicer(Data.from.name); } } else if (AscCH.historyitem_Worksheet_SetActiveNamedSheetView === Type) { if (ws.aNamedSheetViews) { var activeId = bUndo ? Data.from : Data.to; var namedSheetView = ws.getNamedSheetViewById(activeId); for (i = 0; i < ws.aNamedSheetViews.length; i++) { ws.aNamedSheetViews[i]._isActive = false; } ws.setActiveNamedSheetView(activeId); if (namedSheetView) { namedSheetView._isActive = true; } ws.autoFilters.reapplyAllFilters(true, ws.getActiveNamedSheetViewId() !== null, true); } } else if (AscCH.historyitem_Worksheet_SheetViewAdd === Type) { if (bUndo) { ws.deleteNamedSheetViews([ws.getNamedSheetViewById(Data.Id)], true); } else { ws.addNamedSheetView(Data.getData(), true); } } else if (AscCH.historyitem_Worksheet_SheetViewDelete === Type) { if (bUndo) { ws.addNamedSheetView(Data.from); } else { ws.deleteNamedSheetViews([ws.getNamedSheetViewById(Data.sheetView)], true); } } else if (AscCH.historyitem_Worksheet_DataValidationAdd === Type) { if (bUndo) { ws.deleteDataValidationById(Data.id); } else { var _dataValidation = Data.to; _dataValidation.Id = Data.id; if (wb.bCollaborativeChanges) { if (_dataValidation.ranges) { for (i = 0; i < _dataValidation.ranges.length; i++) { _dataValidation.ranges[i].r1 = collaborativeEditing.getLockOtherRow2(nSheetId, _dataValidation.ranges[i].r1); _dataValidation.ranges[i].c1 = collaborativeEditing.getLockOtherColumn2(nSheetId, _dataValidation.ranges[i].c1); _dataValidation.ranges[i].r2 = collaborativeEditing.getLockOtherRow2(nSheetId, _dataValidation.ranges[i].r2); _dataValidation.ranges[i].c2 = collaborativeEditing.getLockOtherColumn2(nSheetId, _dataValidation.ranges[i].c2); } } } ws.addDataValidation(_dataValidation); _dataValidation._init(ws); } } else if (AscCH.historyitem_Worksheet_DataValidationChange === Type) { var dataValidationTo = bUndo ? Data.from : Data.to; var dataValidationFrom = ws.getDataValidationById(Data.id); if (dataValidationFrom) { dataValidationTo.Id = Data.id; if (wb.bCollaborativeChanges) { if (dataValidationTo.ranges) { for (i = 0; i < dataValidationTo.ranges.length; i++) { dataValidationTo.ranges[i].r1 = collaborativeEditing.getLockOtherRow2(nSheetId, dataValidationTo.ranges[i].r1); dataValidationTo.ranges[i].c1 = collaborativeEditing.getLockOtherColumn2(nSheetId, dataValidationTo.ranges[i].c1); dataValidationTo.ranges[i].r2 = collaborativeEditing.getLockOtherRow2(nSheetId, dataValidationTo.ranges[i].r2); dataValidationTo.ranges[i].c2 = collaborativeEditing.getLockOtherColumn2(nSheetId, dataValidationTo.ranges[i].c2); } } } ws.dataValidations.elems[dataValidationFrom.index] = dataValidationTo; } } else if (AscCH.historyitem_Worksheet_DataValidationDelete === Type) { if (bUndo) { ws.addDataValidation(Data.from); } else { ws.deleteDataValidationById(Data.id); } } else if (AscCH.historyitem_Worksheet_CFRuleAdd === Type) { if (bUndo) { ws.deleteCFRule(Data.id); } else { Data.to.id = Data.id; ws.addCFRule(Data.to); } } else if (AscCH.historyitem_Worksheet_CFRuleDelete === Type) { if (bUndo) { ws.addCFRule(Data.from); } else { ws.deleteCFRule(Data.id); } } else if (AscCH.historyitem_Worksheet_SetShowZeros === Type) { ws.setShowZeros(bUndo ? Data.from : Data.to); } else if (AscCH.historyitem_Worksheet_SetShowFormulas === Type) { //except - apply changes in other user if (window["NATIVE_EDITOR_ENJINE"] || !wb.oApi.isDocumentLoadComplete || !wb.bCollaborativeChanges) { ws.setShowFormulas(bUndo ? Data.from : Data.to); } } else if (AscCH.historyitem_Worksheet_SetTopLeftCell === Type) { ws.setTopLeftCell(Data.to ? new Asc.Range(Data.to.c1, Data.to.r1, Data.to.c2, Data.to.r2) : null); } else if (AscCH.historyitem_Worksheet_AddProtectedRange === Type) { if (bUndo) { ws.deleteProtectedRange(Data.id); } else { Data.to.Id = Data.id; ws.addProtectedRange(Data.to); } } else if (AscCH.historyitem_Worksheet_DelProtectedRange === Type) { if (bUndo) { ws.addProtectedRange(Data.from); } else { ws.deleteProtectedRange(Data.id); } } else if (AscCH.historyitem_Worksheet_AddCellWatch === Type) { if (Data.to) { range = new Asc.Range(Data.to.c1, Data.to.r1, Data.to.c2, Data.to.r2); if (bUndo) { ws.deleteCellWatch(range); } else { ws.addCellWatch(range); } wb.handlers.trigger("changeCellWatches"); } } else if (AscCH.historyitem_Worksheet_DelCellWatch === Type) { if (Data.from) { range = new Asc.Range(Data.from.c1, Data.from.r1, Data.from.c2, Data.from.r2); if (bUndo) { ws.addCellWatch(range); } else { ws.deleteCellWatch(range); } wb.handlers.trigger("changeCellWatches"); } } else if (AscCH.historyitem_Worksheet_ChangeUserProtectedRange === Type) { //TODO lock ? //var _r1 = updateData.r1 > 0 ? collaborativeEditing.getLockOtherRow2(nSheetId, updateData.r1 - 1) : null; //var _c1 = updateData.c1 > 0 ? collaborativeEditing.getLockOtherColumn2(nSheetId, updateData.c1 - 1) : null; if (bUndo) { ws.editUserProtectedRanges(Data.to, Data.from); } else { ws.editUserProtectedRanges(Data.from, Data.to); } } else if (AscCH.historyitem_Worksheet_SetSheetViewType === Type) { //накатываем только при открытии /*if (this.wb.bCollaborativeChanges) { ws.setTopLeftCell(Data.to ? new Asc.Range(Data.to.c1, Data.to.r1, Data.to.c2, Data.to.r2) : null); }*/ //except - apply changes in other user if (window["NATIVE_EDITOR_ENJINE"] || !wb.oApi.isDocumentLoadComplete || !wb.bCollaborativeChanges) { ws.setSheetViewType(bUndo ? Data.from : Data.to); } } else if (AscCH.historyitem_Worksheet_ChangeRowColBreaks === Type) { let from, to, min, max, man, pt, byCol; if (bUndo) { from = Data.to && Data.to.id; to = Data.from && Data.from.id; min = Data.from && Data.from.min; max = Data.from && Data.from.max; man = Data.from && Data.from.man; pt = Data.from && Data.from.pt; byCol = (Data.from && Data.from.byCol) || (Data.to && Data.to.byCol); } else { from = Data.from && Data.from.id; to = Data.to && Data.to.id; min = Data.to && Data.to.min; max = Data.to && Data.to.max; man = Data.to && Data.to.man; pt = Data.to && Data.to.pt; byCol = (Data.from && Data.from.byCol) || (Data.to && Data.to.byCol); } ws._changeRowColBreaks(from, to, min, max, man, pt, byCol); } else if (AscCH.historyitem_Worksheet_ChangeLegacyDrawingHFDrawing === Type) { let from, to; if (bUndo) { let fromId = Data.to && Data.to.id; if (fromId) { from = new AscCommonExcel.CLegacyDrawingHFDrawing(); from.id = fromId; from.graphicObject = AscCommon.g_oTableId.Get_ById(Data.to.graphicId); } let toId = Data.from && Data.from.id; if (toId) { to = new AscCommonExcel.CLegacyDrawingHFDrawing(); to.id = toId; to.graphicObject = AscCommon.g_oTableId.Get_ById(Data.from.graphicId); } } else { let fromId = Data.from && Data.from.id; if (fromId) { from = new AscCommonExcel.CLegacyDrawingHFDrawing(); from.id = fromId; from.graphicObject = AscCommon.g_oTableId.Get_ById(Data.from.graphicId); } let toId = Data.to && Data.to.id; if (toId) { to = new AscCommonExcel.CLegacyDrawingHFDrawing(); to.id = toId; to.graphicObject = AscCommon.g_oTableId.Get_ById(Data.to.graphicId); } } if (!ws.legacyDrawingHF) { ws.legacyDrawingHF = new AscCommonExcel.CLegacyDrawingHF(ws); } ws.legacyDrawingHF.changePicture(from, to); } else if (AscCH.historyitem_Worksheet_TimelineDelete === Type) { if (bUndo) { ws.timelines.push(Data.from); } else { wb.onTimelinesDelete(Data.from.name); } } else if (AscCH.historyitem_Worksheet_SetRightToLeft === Type) { //накатываем только при открытии if (!bUndo && this.wb.bCollaborativeChanges) { ws.setRightToLeft(bUndo ? Data.from : Data.to); } } }; UndoRedoWoorksheet.prototype.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 || AscCH.historyitem_Worksheet_RemoveCell === Type; }; UndoRedoWoorksheet.prototype.forwardTransformationGet = function (Type, Data, nSheetId) { if (AscCH.historyitem_Worksheet_Rename === Type) { return {from: Data.from, name: Data.to}; } else if (AscCH.historyitem_Worksheet_RemoveCell === Type && Data.oNewVal && Data.oNewVal.value && Data.oNewVal.value.formula) { return {formula: Data.oNewVal.value.formula}; } return null; }; UndoRedoWoorksheet.prototype.forwardTransformationSet = function (Type, Data, nSheetId, getRes) { if (AscCH.historyitem_Worksheet_Rename === Type) { Data.from = getRes.from; Data.to = getRes.name; } else if (AscCH.historyitem_Worksheet_RemoveCell === Type) { if (Data && Data.oNewVal && Data.oNewVal.value) { Data.oNewVal.value.formula = getRes.formula; } } return null; }; UndoRedoWoorksheet.prototype.CommuteRelatedCell = function (oData, oActionOther) { if (!oData) { return true; } let res = this.CommuteRelatedCell2(oData.nRow, oData.nCol, oActionOther); if (res) { oData.nRow = this.tmpCell.nRow; oData.nCol = this.tmpCell.nCol; } return res; } UndoRedoWoorksheet.prototype.CommuteRelatedCell2 = function (nRow, nCol, oActionOther) { if (AscCommonExcel.g_oUndoRedoWorksheet !== oActionOther.oClass) { this.tmpCell.nRow = nRow; this.tmpCell.nCol = nCol; return true; } let isAddRow = AscCH.historyitem_Worksheet_AddRows === oActionOther.nActionType; let isAddCol = AscCH.historyitem_Worksheet_AddCols === oActionOther.nActionType; let isRemoveRow = AscCH.historyitem_Worksheet_RemoveRows === oActionOther.nActionType; let isRemoveCol = AscCH.historyitem_Worksheet_RemoveCols === oActionOther.nActionType; let isAdd = isAddRow || isAddCol; let isRemove = isRemoveRow || isRemoveCol; let isShiftLeft = AscCH.historyitem_Worksheet_ShiftCellsLeft === oActionOther.nActionType; let isShiftRight = AscCH.historyitem_Worksheet_ShiftCellsRight === oActionOther.nActionType; let isShiftTop = AscCH.historyitem_Worksheet_ShiftCellsTop === oActionOther.nActionType; let isShiftBottom = AscCH.historyitem_Worksheet_ShiftCellsBottom === oActionOther.nActionType; let isShiftMove = AscCH.historyitem_Worksheet_MoveRange === oActionOther.nActionType; let isShift = isShiftRight || isShiftBottom; let isUnShift = isShiftLeft || isShiftTop; if (isAdd || isRemove) { let from = oActionOther.oData.from; let to = oActionOther.oData.to; let len = to - from + 1; let index = (isAddRow || isRemoveRow) ? nRow : nCol; if (isAdd) { if (index >= from) { index += len; } } else if (isRemove) { if (index > from){ index -= len; } else if (from <= index && index <= to) { //не восстанавливаем действия внутри диапазона который уже удален. как google drive return false; } } (isAddRow || isRemoveRow) ? nRow = index : nCol = index; } else if (isShift || isUnShift) { let r1 = oActionOther.oData.r1; let c1 = oActionOther.oData.c1; let r2 = oActionOther.oData.r2; let c2 = oActionOther.oData.c2; let width = c2 - c1 + 1; let height = r2 - r1 + 1; if (isShiftLeft) { if (r1 <= nRow && nRow <= r2) { if (c2 < nCol) { nCol -= width; } else if (c1 <= nCol) { return false; } } } else if (isShiftRight) { if (r1 <= nRow && nRow <= r2) { if (c1 <= nCol) { nCol += width; } } } else if (isShiftTop) { if (c1 <= nCol && nCol <= c2) { if (r2 < nRow) { nRow -= height; } else if (r1 <= nRow) { return false; } } } else if (isShiftBottom) { if (c1 <= nCol && nCol <= c2) { if (r1 <= nRow) { nRow += height; } } } } else if (isShiftMove) { if (oActionOther.oData.from.r1 <= nRow && nRow <= oActionOther.oData.from.r2 && oActionOther.oData.from.c1 <= nCol && nCol <= oActionOther.oData.from.c2) { nRow += oActionOther.oData.to.r1 - oActionOther.oData.from.r1; nCol += oActionOther.oData.to.c1 - oActionOther.oData.from.c1; } } this.tmpCell.nRow = nRow; this.tmpCell.nCol = nCol; return true; } UndoRedoWoorksheet.prototype.CommuteRelatedRange = function (oData, oActionOther) { if (!oData) { return true; } let res = this.CommuteRelatedRange2(oData.r1, oData.c1, oData.r2, oData.c2, oActionOther); if (res) { oData.r1 = this.tmpRange.r1; oData.c1 = this.tmpRange.c1; oData.r2 = this.tmpRange.r2; oData.c2 = this.tmpRange.c2; } return res; } UndoRedoWoorksheet.prototype.CommuteRelatedRange2 = function (r1, c1, r2, c2, oActionOther) { if (AscCommonExcel.g_oUndoRedoWorksheet !== oActionOther.oClass) { this.tmpRange.r1 = r1; this.tmpRange.c1 = c1; this.tmpRange.r2 = r2; this.tmpRange.c2 = c2; return true; } let nActionType = oActionOther.nActionType; let oData = oActionOther.oData; if (AscCH.historyitem_Worksheet_AddRows === nActionType || AscCH.historyitem_Worksheet_AddCols === nActionType || AscCH.historyitem_Worksheet_RemoveRows === nActionType || AscCH.historyitem_Worksheet_RemoveCols === nActionType) { let from = oData.from; let to = oData.to; let len = to - from + 1; if (AscCH.historyitem_Worksheet_AddRows === nActionType) { if (from <= r1) { r1 += len; r2 += len; } else if (from <= r2) { r2 += len; } } else if (AscCH.historyitem_Worksheet_AddCols === nActionType) { if (from <= c1) { c1 += len; c2 += len; } else if (from <= c2) { c2 += len; } } else if (AscCH.historyitem_Worksheet_RemoveRows === nActionType) { if (to < r1) { r1 -= len; r2 -= len; } else if (from <= r1 && to < r2) { r1 = to + 1; } else if (r1 < from && to < r2) { r2 -= len; } else if (from <= r1 && r2 <= to) { return false; } else if (r1 < from && from <= r2) { r2 = from - 1; } } else if (AscCH.historyitem_Worksheet_RemoveCols === nActionType) { if (to < c1) { c1 -= len; c2 -= len; } else if (from <= c1 && to < c2) { c1 = to + 1; } else if (c1 < from && to < c2) { c2 -= len; } else if (from <= c1 && c2 <= to) { return false; } else if (c1 < from && from <= c2) { c2 = from - 1; } } } else if (AscCH.historyitem_Worksheet_ShiftCellsLeft === nActionType || AscCH.historyitem_Worksheet_ShiftCellsRight === nActionType || AscCH.historyitem_Worksheet_ShiftCellsTop === nActionType || AscCH.historyitem_Worksheet_ShiftCellsBottom === nActionType) { let r1Shift = oData.r1; let c1Shift = oData.c1; let r2Shift = oData.r2; let c2Shift = oData.c2; let width = c2Shift - c1Shift + 1; let height = r2Shift - r1Shift + 1; if (AscCH.historyitem_Worksheet_ShiftCellsLeft === nActionType) { if (r1Shift <= r1 && r2 <= r2Shift) { if (c2Shift < c1) { c1 -= width; c2 -= width; } else if (c1Shift <= c1 && c2Shift < c2) { c1 = c2Shift + 1; } else if (c1 < c1Shift && c2Shift < c2) { c2 -= width; } else if (c1Shift <= c1 && c2 <= c2Shift) { return false; } else if (c1 < c1Shift && c1Shift <= c2) { c2 = c1Shift - 1; } } else if ((r1 <= r1Shift && r1Shift <= r2) || (r1 <= r2Shift && r2Shift <= r2)) { return false; } } else if (AscCH.historyitem_Worksheet_ShiftCellsRight === nActionType) { if (r1Shift <= r1 && r2 <= r2Shift) { if (c1Shift <= c1) { c1 += width; c2 += width; } else if (c1Shift <= c2) { c2 += width; } } else if ((r1 <= r1Shift && r1Shift <= r2) || (r1 <= r2Shift && r2Shift <= r2)) { return false; } } else if (AscCH.historyitem_Worksheet_ShiftCellsTop === nActionType) { if (c1Shift <= c1 && c2 <= c2Shift) { if (r2Shift < r1) { r1 -= height; r2 -= height; } else if (r1Shift <= r1 && r2Shift < r2) { r1 = r2Shift + 1; } else if (r1 < r1Shift && r2Shift < r2) { r2 -= height; } else if (r1Shift <= r1 && r2 <= r2Shift) { return false; } else if (r1 < r1Shift && r1Shift <= r2) { r2 = r1Shift - 1; } } else if ((c1 <= c1Shift && c1Shift <= c2) || (c1 <= c2Shift && c2Shift <= c2)) { return false; } } else if (AscCH.historyitem_Worksheet_ShiftCellsBottom === nActionType) { if (c1Shift <= c1 && c2 <= c2Shift) { if (r1Shift <= r1) { r1 += height; r2 += height; } else if (r1Shift <= r2) { r2 += height; } } else if ((c1 <= c1Shift && c1Shift <= c2) || (c1 <= c2Shift && c2Shift <= c2)) { return false; } } } else if (AscCH.historyitem_Worksheet_MoveRange === nActionType) { if (oData.from.r1 <= r1 && r2 <= oData.from.r2 && oData.from.c1 <= c1 && c2 <= oData.from.c2) { r1 += oData.to.r1 - oData.from.r1; r2 += oData.to.r1 - oData.from.r1; c1 += oData.to.c1 - oData.from.c1; c2 += oData.to.c1 - oData.from.c1; } else if(oData.to.r1 <= r1 && r2 <= oData.to.r2 && oData.to.c1 <= c1 && c2 <= oData.to.c2) { return false; } } this.tmpRange.r1 = r1; this.tmpRange.c1 = c1; this.tmpRange.r2 = r2; this.tmpRange.c2 = c2; return true; } UndoRedoWoorksheet.prototype.CommuteRelatedRowCol = function (oData, isRow, oActionOther) { let res = this.CommuteRelatedRowCol2(oData.index, oData.index, isRow, oActionOther); if (res) { oData.index = isRow ? this.tmpRange.r1 : this.tmpRange.c1; } return res; } UndoRedoWoorksheet.prototype.CommuteRelatedRowColFromTo = function (oData, isRow, oActionOther) { let res = this.CommuteRelatedRowCol2(oData.from, oData.to, isRow, oActionOther); if (res) { if (isRow) { oData.from = this.tmpRange.r1; oData.to = this.tmpRange.r2; } else { oData.from = this.tmpRange.c1; oData.to = this.tmpRange.c2; } } return res; } UndoRedoWoorksheet.prototype.CommuteRelatedRowCol2 = function (from, to, isRow, oActionOther) { let r1 = 0; let c1 = 0; let r2 = gc_nMaxRow0; let c2 = gc_nMaxCol0; if (isRow) { r1 = from; r2 = to; } else { c1 = from; c2 = to; } return this.CommuteRelatedRange2(r1, c1, r2, c2, oActionOther); } function UndoRedoRowCol(wb, bRow) { UndoRedoClassBase.call(this); this.wb = wb; this.bRow = bRow; this.nTypeRow = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoRow; }); this.nTypeCol = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoCol; }); } UndoRedoRowCol.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoRowCol.prototype.getClassType = function () { if (this.bRow) { return this.nTypeRow; } else { return this.nTypeCol; } }; UndoRedoRowCol.prototype.CreateReverseChangeSpreadsheet = function (ToClass, Type, nSheetId, oRange, Data, LocalChange) { Data = Data.CreateReverseChangeSpreadsheet(); return new UndoRedoItemSerializable(ToClass, Type, nSheetId, oRange, Data, LocalChange); }; UndoRedoRowCol.prototype.CommuteRelated = function (oActionToUndo, oActionOther) { return AscCommonExcel.g_oUndoRedoWorksheet.CommuteRelatedRowCol(oActionToUndo.oData, this.bRow, oActionOther); } UndoRedoRowCol.prototype.Undo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, true); }; UndoRedoRowCol.prototype.Redo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, false); }; UndoRedoRowCol.prototype.UndoRedo = function (Type, Data, nSheetId, bUndo) { var ws = this.wb.getWorksheetById(nSheetId); if (null == ws) { return; } var nIndex = Data.index; if (this.wb.bCollaborativeChanges) { var collaborativeEditing = this.wb.oApi.collaborativeEditing; var oLockInfo = new AscCommonExcel.asc_CLockInfo(); oLockInfo["sheetId"] = nSheetId; oLockInfo["type"] = c_oAscLockTypeElem.Range; if (this.bRow) { nIndex = collaborativeEditing.getLockOtherRow2(nSheetId, nIndex); oLockInfo["rangeOrObjectId"] = new Asc.Range(0, nIndex, gc_nMaxCol0, nIndex); } else { if (AscCommonExcel.g_nAllColIndex == nIndex) { oLockInfo["rangeOrObjectId"] = new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0); } else { nIndex = collaborativeEditing.getLockOtherColumn2(nSheetId, nIndex); oLockInfo["rangeOrObjectId"] = new Asc.Range(nIndex, 0, nIndex, gc_nMaxRow0); } } this.wb.aCollaborativeChangeElements.push(oLockInfo); } var Val; if (bUndo) { Val = Data.oOldVal; } else { Val = Data.oNewVal; } function fAction(row) { if (AscCH.historyitem_RowCol_SetFont == Type) { row.setFont(Val); } else if (AscCH.historyitem_RowCol_Fontname == Type) { row.setFontname(Val); } else if (AscCH.historyitem_RowCol_Fontsize == Type) { row.setFontsize(Val); } else if (AscCH.historyitem_RowCol_Fontcolor == Type) { row.setFontcolor(Val); } else if (AscCH.historyitem_RowCol_Bold == Type) { row.setBold(Val); } else if (AscCH.historyitem_RowCol_Italic == Type) { row.setItalic(Val); } else if (AscCH.historyitem_RowCol_Underline == Type) { row.setUnderline(Val); } else if (AscCH.historyitem_RowCol_Strikeout == Type) { row.setStrikeout(Val); } else if (AscCH.historyitem_RowCol_FontAlign == Type) { row.setFontAlign(Val); } else if (AscCH.historyitem_RowCol_AlignVertical == Type) { row.setAlignVertical(Val); } else if (AscCH.historyitem_RowCol_AlignHorizontal == Type) { row.setAlignHorizontal(Val); } else if (AscCH.historyitem_RowCol_ReadingOrder == Type) { row.setReadingOrder(Val); } else if (AscCH.historyitem_RowCol_Fill == Type) { row.setFill(Val); } else if (AscCH.historyitem_RowCol_Border == Type) { if (null != Val) { row.setBorder(Val.clone()); } else { row.setBorder(null); } } else if (AscCH.historyitem_RowCol_ShrinkToFit == Type) { row.setShrinkToFit(Val); } else if (AscCH.historyitem_RowCol_Wrap == Type) { row.setWrap(Val); } else if (AscCH.historyitem_RowCol_Num == Type) { row.setNum(Val); } else if (AscCH.historyitem_RowCol_Angle == Type) { row.setAngle(Val); } else if (AscCH.historyitem_RowCol_SetStyle == Type) { row.setStyle(Val); } else if (AscCH.historyitem_RowCol_SetCellStyle == Type) { row.setCellStyle(Val); } else if (AscCH.historyitem_RowCol_Indent == Type) { row.setIndent(Val); } else if (AscCH.historyitem_RowCol_ApplyProtection == Type) { row.setApplyProtection(Val); } else if (AscCH.historyitem_RowCol_Locked == Type) { row.setLocked(Val); } else if (AscCH.historyitem_RowCol_HiddenFormulas == Type) { row.setHiddenFormulas(Val); } } if (this.bRow) { ws._getRow(nIndex, fAction); } else { var row = ws._getCol(nIndex); fAction(row); } }; function UndoRedoComment(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoComment; }); } UndoRedoComment.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoComment.prototype.getClassType = function () { return this.nType; }; UndoRedoComment.prototype.CreateReverseChangeSpreadsheet = function (ToClass, Type, nSheetId, oRange, Data, LocalChange) { if (Type === AscCH.historyitem_Comment_Add) { Type = AscCH.historyitem_Comment_Remove; } else if (Type === AscCH.historyitem_Comment_Remove) { Type = AscCH.historyitem_Comment_Add; } else if (Type === AscCH.historyitem_Comment_Change || Type === AscCH.historyitem_Comment_Coords) { Data = Data.CreateReverseChangeSpreadsheet(); } return new AscCommonExcel.UndoRedoItemSerializable(ToClass, Type, nSheetId, oRange, Data, LocalChange); }; UndoRedoComment.prototype.CommuteRelated = function (oActionToUndo, oActionOther) { let res = true; if (AscCH.historyitem_Comment_Add === oActionToUndo.nActionType || AscCH.historyitem_Comment_Add === oActionToUndo.nActionType) { res = AscCommonExcel.g_oUndoRedoWorksheet.CommuteRelatedCell(oActionToUndo.oData, oActionOther); if(oActionToUndo.oData.coords) { res = res && AscCommonExcel.g_oUndoRedoWorksheet.CommuteRelatedCell(oActionToUndo.oData.coords, oActionOther); } } else if (AscCH.historyitem_Comment_Change === oActionToUndo.nActionType || AscCH.historyitem_Comment_Coords === oActionToUndo.nActionType) { res = AscCommonExcel.g_oUndoRedoWorksheet.CommuteRelatedCell(oActionToUndo.oData.from, oActionOther); res = res && AscCommonExcel.g_oUndoRedoWorksheet.CommuteRelatedCell(oActionToUndo.oData.to, oActionOther); } return res; } UndoRedoComment.prototype.Undo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, true); }; UndoRedoComment.prototype.Redo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, false); }; UndoRedoComment.prototype.UndoRedo = function (Type, Data, nSheetId, bUndo) { var collaborativeEditing, to; var oModel = (null == nSheetId) ? this.wb : this.wb.getWorksheetById(nSheetId); var api = window["Asc"]["editor"]; if (!api.wb || !oModel) { return; } var ws = (null == nSheetId) ? api.wb : api.wb.getWorksheetById(nSheetId); Data.worksheet = ws; var cellCommentator = ws.cellCommentator; if (bUndo) { cellCommentator.Undo(Type, Data); } else { to = (Data.from || Data.to) ? Data.to : Data; if (to && !to.bDocument && this.wb.bCollaborativeChanges) { collaborativeEditing = this.wb.oApi.collaborativeEditing; to.nRow = collaborativeEditing.getLockOtherRow2(nSheetId, to.nRow); to.nCol = collaborativeEditing.getLockOtherColumn2(nSheetId, to.nCol); } cellCommentator.Redo(Type, Data); } }; function UndoRedoSortState(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoSortState; }); } UndoRedoSortState.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoSortState.prototype.getClassType = function () { return this.nType; }; UndoRedoSortState.prototype.CreateReverseChangeSpreadsheet = function (ToClass, Type, nSheetId, oRange, Data, LocalChange) { if (AscCH.historyitem_SortState_Add === Type) { Data = Data.CreateReverseChangeSpreadsheet(); } else { return; } return new UndoRedoItemSerializable(ToClass, Type, nSheetId, oRange, Data, LocalChange); }; UndoRedoSortState.prototype.CommuteRelated = function (oActionToUndo, oActionOther) { return true; } UndoRedoSortState.prototype.Undo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, true); }; UndoRedoSortState.prototype.Redo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, false); }; UndoRedoSortState.prototype.UndoRedo = function (Type, Data, nSheetId, bUndo) { var collaborativeEditing, to; var oModel = (null == nSheetId) ? this.wb : this.wb.getWorksheetById(nSheetId); var api = window["Asc"]["editor"]; if (!api.wb || !oModel) { return; } var ws = (null == nSheetId) ? api.wb : api.wb.getWorksheetById(nSheetId); Data.worksheet = ws; if (Data.bFilter) { if (Data.tableName) { var table = ws.model.autoFilters._getFilterByDisplayName(Data.tableName); table.SortState = bUndo ? Data.from : Data.to; } else { ws.model.AutoFilter.SortState = bUndo ? Data.from : Data.to; } } else { ws.model.sortState = bUndo ? Data.from : Data.to; } }; function UndoRedoAutoFilters(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoAutoFilters; }); } UndoRedoAutoFilters.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoAutoFilters.prototype.getClassType = function () { return this.nType; }; UndoRedoAutoFilters.prototype.Undo = function (Type, Data, nSheetId, opt_wb) { this.UndoRedo(Type, Data, nSheetId, true, opt_wb); }; UndoRedoAutoFilters.prototype.Redo = function (Type, Data, nSheetId, opt_wb) { this.UndoRedo(Type, Data, nSheetId, false, opt_wb); }; UndoRedoAutoFilters.prototype.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 { var collaborativeEditing = this.wb.oApi.collaborativeEditing; if (AscCH.historyitem_AutoFilter_ChangeColumnName === Type || AscCH.historyitem_AutoFilter_ChangeTotalRow === Type) { if (this.wb.bCollaborativeChanges) { Data.nRow = collaborativeEditing.getLockOtherRow2(nSheetId, Data.nRow); Data.nCol = collaborativeEditing.getLockOtherColumn2(nSheetId, Data.nCol); } } else if (AscCH.historyitem_AutoFilter_Apply === Type || AscCH.historyitem_AutoFilter_ClearFilterColumn === Type) { var _obj = Data.autoFiltersObject ? Data.autoFiltersObject : Data; if (_obj.cellId !== undefined) { var curCellId = _obj.cellId.split('af')[0]; var range; AscCommonExcel.executeInR1C1Mode(false, function () { range = AscCommonExcel.g_oRangeCache.getAscRange(curCellId).clone(); }); var nRow = collaborativeEditing.getLockOtherRow2(nSheetId, range.r1); var nCol = collaborativeEditing.getLockOtherColumn2(nSheetId, range.c1); if (nCol !== range.c1 || nRow !== range.r1) { _obj.cellId = new AscCommon.CellBase(nRow, nCol).getName(); } } } autoFilters.Redo(Type, Data); } } }; UndoRedoAutoFilters.prototype.forwardTransformationIsAffect = function (Type) { return AscCH.historyitem_AutoFilter_Add === Type || AscCH.historyitem_AutoFilter_ChangeTableName === Type || AscCH.historyitem_AutoFilter_Empty === Type || AscCH.historyitem_AutoFilter_ChangeColumnName === Type; }; UndoRedoAutoFilters.prototype.CreateReverseChangeSpreadsheet = function (ToClass, nActionType, nSheetId, oRange, oData, LocalChange) { let type, data; if (AscCH.historyitem_AutoFilter_Add === nActionType) { type = AscCH.historyitem_AutoFilter_Empty; data = new AscCommonExcel.UndoRedoData_AutoFilter(); data.activeCells = oData.activeCells; } else { return; } return new UndoRedoItemSerializable(ToClass, type, nSheetId, oRange, data, LocalChange); }; UndoRedoAutoFilters.prototype.CommuteRelated = function (oActionToUndo, oActionOther) { if (AscCommonExcel.g_oUndoRedoAutoFilters === oActionOther.oClass) { //изменения в форматированной таблице. например добавление total return false; } let res = true; if (AscCH.historyitem_AutoFilter_Empty === oActionToUndo.nActionType) { if(oActionToUndo.oData.activeCells) { res = AscCommonExcel.g_oUndoRedoWorksheet.CommuteRelatedRange(oActionToUndo.oData.activeCells, oActionOther); } } return res; } function UndoRedoSparklines(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoSparklines; }); } UndoRedoSparklines.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoSparklines.prototype.getClassType = function () { return this.nType; }; UndoRedoSparklines.prototype.Undo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, true); }; UndoRedoSparklines.prototype.Redo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, false); }; UndoRedoSparklines.prototype.UndoRedo = function (Type, Data, nSheetId, bUndo) { }; function UndoRedoSharedFormula(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoSharedFormula; }); } UndoRedoSharedFormula.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoSharedFormula.prototype.getClassType = function () { return this.nType; }; UndoRedoSharedFormula.prototype.Undo = function (Type, Data, nSheetId, opt_wb) { this.UndoRedo(Type, Data, nSheetId, true, opt_wb); }; UndoRedoSharedFormula.prototype.Redo = function (Type, Data, nSheetId, opt_wb) { this.UndoRedo(Type, Data, nSheetId, false, opt_wb); }; UndoRedoSharedFormula.prototype.UndoRedo = function (Type, Data, nSheetId, bUndo, opt_wb) { var wb = opt_wb ? opt_wb : this.wb; var parsed = wb.workbookFormulas.get(Data.index); if (parsed && bUndo) { var val = bUndo ? Data.oOldVal : Data.oNewVal; if (AscCH.historyitem_SharedFormula_ChangeFormula == Type) { parsed.removeDependencies(); parsed.setFormula(val); wb.dependencyFormulas.addToBuildDependencyShared(parsed); } else if (AscCH.historyitem_SharedFormula_ChangeShared == Type) { parsed.setSharedRef(val, Data.bRow); } } }; function UndoRedoRedoLayout(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoLayout; }); } UndoRedoRedoLayout.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoRedoLayout.prototype.getClassType = function () { return this.nType; }; UndoRedoRedoLayout.prototype.Undo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, true); }; UndoRedoRedoLayout.prototype.Redo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, false); }; UndoRedoRedoLayout.prototype.UndoRedo = function (Type, Data, nSheetId, bUndo) { var ws = this.wb.getWorksheetById(nSheetId); if (!ws) { return; } var pageOptions = ws.PagePrintOptions; var pageSetup = pageOptions.asc_getPageSetup(); var pageMargins = pageOptions.asc_getPageMargins(); var value = bUndo ? Data.from : Data.to; switch (Type) { case AscCH.historyitem_Layout_Left: pageMargins.asc_setLeft(value); break; case AscCH.historyitem_Layout_Right: pageMargins.asc_setRight(value); break; case AscCH.historyitem_Layout_Top: pageMargins.asc_setTop(value); break; case AscCH.historyitem_Layout_Bottom: pageMargins.asc_setBottom(value); break; case AscCH.historyitem_Layout_Width: pageSetup.asc_setWidth(value); break; case AscCH.historyitem_Layout_Height: pageSetup.asc_setHeight(value); break; case AscCH.historyitem_Layout_FitToWidth: pageSetup.asc_setFitToWidth(value); break; case AscCH.historyitem_Layout_FitToHeight: pageSetup.asc_setFitToHeight(value); break; case AscCH.historyitem_Layout_GridLines: pageOptions.asc_setGridLines(value); break; case AscCH.historyitem_Layout_Headings: pageOptions.asc_setHeadings(value); break; case AscCH.historyitem_Layout_Orientation: pageSetup.asc_setOrientation(value); break; case AscCH.historyitem_Layout_Scale: pageSetup.asc_setScale(value); break; case AscCH.historyitem_Layout_FirstPageNumber: pageSetup.asc_setFirstPageNumber(value); break; case AscCH.historyitem_Layout_HorizontalCentered: pageOptions.asc_setHorizontalCentered(value); break; case AscCH.historyitem_Layout_VerticalCentered: pageOptions.asc_setVerticalCentered(value); break; } this.wb.oApi._onUpdateLayoutMenu(nSheetId); }; //***array-formula*** function UndoRedoArrayFormula(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoArrayFormula; }); } UndoRedoArrayFormula.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoArrayFormula.prototype.getClassType = function () { return this.nType; }; UndoRedoArrayFormula.prototype.Undo = function (Type, Data, nSheetId, opt_wb) { this.UndoRedo(Type, Data, nSheetId, true, opt_wb); }; UndoRedoArrayFormula.prototype.Redo = function (Type, Data, nSheetId, opt_wb) { this.UndoRedo(Type, Data, nSheetId, false, opt_wb); }; UndoRedoArrayFormula.prototype.UndoRedo = function (Type, Data, nSheetId, bUndo, opt_wb) { var ws = this.wb.getWorksheetById(nSheetId); if (null == ws) { return; } var bbox = Data.range; var formula = Data.formula; var range = ws.getRange3(bbox.r1, bbox.c1, bbox.r2, bbox.c2); switch (Type) { case AscCH.historyitem_ArrayFromula_AddFormula: if (!bUndo) { AscCommonExcel.executeInR1C1Mode(false, function () { range.setValue(formula, null, null, bbox); }); } break; case AscCH.historyitem_ArrayFromula_DeleteFormula: if (bUndo) { range.setValue(formula, null, null, bbox); } break; } }; function UndoRedoHeaderFooter(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoHeaderFooter; }); } UndoRedoHeaderFooter.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoHeaderFooter.prototype.getClassType = function () { return this.nType; }; UndoRedoHeaderFooter.prototype.Undo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, true); }; UndoRedoHeaderFooter.prototype.Redo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, false); }; UndoRedoHeaderFooter.prototype.UndoRedo = function (Type, Data, nSheetId, bUndo) { var ws = this.wb.getWorksheetById(nSheetId); if (!ws) { return; } var headerFooter = ws.headerFooter; var value = bUndo ? Data.from : Data.to; switch (Type) { case AscCH.historyitem_Header_First: headerFooter.setFirstHeader(value); break; case AscCH.historyitem_Header_Even: headerFooter.setEvenHeader(value); break; case AscCH.historyitem_Header_Odd: headerFooter.setOddHeader(value); break; case AscCH.historyitem_Footer_First: headerFooter.setFirstFooter(value); break; case AscCH.historyitem_Footer_Even: headerFooter.setEvenFooter(value); break; case AscCH.historyitem_Footer_Odd: headerFooter.setOddFooter(value); break; case AscCH.historyitem_Align_With_Margins: headerFooter.setAlignWithMargins(value); break; case AscCH.historyitem_Scale_With_Doc: headerFooter.setScaleWithDoc(value); break; case AscCH.historyitem_Different_First: headerFooter.setDifferentFirst(value); break; case AscCH.historyitem_Different_Odd_Even: headerFooter.setDifferentOddEven(value); break; } }; function UndoRedoPivotTables(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoPivotTables; }); } UndoRedoPivotTables.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoPivotTables.prototype.getClassType = function () { return this.nType; }; UndoRedoPivotTables.prototype.Undo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, true); }; UndoRedoPivotTables.prototype.Redo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, false); }; UndoRedoPivotTables.prototype.UndoRedo = function (Type, Data, nSheetId, bUndo) { var ws = this.wb.getWorksheetById(nSheetId); if (!ws) { return; } var pivotTable = ws.getPivotTableById(Data.pivot); if (!pivotTable) { return; } pivotTable.stashCurReportRange(); var value = bUndo ? Data.from : Data.to; var valueFrom = bUndo ? Data.to : Data.from; switch (Type) { case AscCH.historyitem_PivotTable_StyleName: pivotTable.asc_getStyleInfo()._setName(value, pivotTable, ws); break; case AscCH.historyitem_PivotTable_StyleShowRowHeaders: pivotTable.asc_getStyleInfo()._setShowRowHeaders(value, pivotTable, ws); break; case AscCH.historyitem_PivotTable_StyleShowColHeaders: pivotTable.asc_getStyleInfo()._setShowColHeaders(value, pivotTable, ws); break; case AscCH.historyitem_PivotTable_StyleShowRowStripes: pivotTable.asc_getStyleInfo()._setShowRowStripes(value, pivotTable, ws); break; case AscCH.historyitem_PivotTable_StyleShowColStripes: pivotTable.asc_getStyleInfo()._setShowColStripes(value, pivotTable, ws); break; case AscCH.historyitem_PivotTable_SetName: pivotTable.asc_setName(value); break; case AscCH.historyitem_PivotTable_SetRowHeaderCaption: pivotTable.asc_setRowHeaderCaption(value); break; case AscCH.historyitem_PivotTable_SetColHeaderCaption: pivotTable.asc_setColHeaderCaption(value); break; case AscCH.historyitem_PivotTable_SetDataCaption: pivotTable.asc_setDataCaption(value); break; case AscCH.historyitem_PivotTable_SetRowGrandTotals: pivotTable.asc_setRowGrandTotals(value); break; case AscCH.historyitem_PivotTable_SetColGrandTotals: pivotTable.asc_setColGrandTotals(value); break; case AscCH.historyitem_PivotTable_SetPageOverThenDown: pivotTable.asc_setPageOverThenDown(value); break; case AscCH.historyitem_PivotTable_SetPageWrap: pivotTable.asc_setPageWrap(value); break; case AscCH.historyitem_PivotTable_SetShowHeaders: pivotTable.asc_setShowHeaders(value); break; case AscCH.historyitem_PivotTable_SetGrandTotalCaption: pivotTable.asc_setGrandTotalCaption(value); break; case AscCH.historyitem_PivotTable_SetCompact: pivotTable.asc_setCompact(value); break; case AscCH.historyitem_PivotTable_SetOutline: pivotTable.asc_setOutline(value); break; case AscCH.historyitem_PivotTable_SetGridDropZones: pivotTable.asc_setGridDropZones(value); break; case AscCH.historyitem_PivotTable_UseAutoFormatting: pivotTable.asc_setUseAutoFormatting(value); break; case AscCH.historyitem_PivotTable_SetFillDownLabelsDefault: pivotTable.setFillDownLabelsDefault(value, false); break; case AscCH.historyitem_PivotTable_SetDataOnRows: pivotTable.setDataOnRows(value); break; case AscCH.historyitem_PivotTable_SetDataPosition: pivotTable.setDataPosition(value); break; case AscCH.historyitem_PivotTable_SetAltText: pivotTable.setTitle(value); break; case AscCH.historyitem_PivotTable_SetAltTextSummary: pivotTable.setDescription(value); break; case AscCH.historyitem_PivotTable_HideValuesRow: pivotTable.setHideValuesRow(value); break; case AscCH.historyitem_PivotTable_AddPageField: if (bUndo) { pivotTable.removeNoDataField(Data.from); } else { pivotTable.addPageField(Data.from, Data.to); } break; case AscCH.historyitem_PivotTable_AddRowField: if (bUndo) { pivotTable.removeNoDataField(Data.from); } else { pivotTable.addRowField(Data.from, Data.to); } break; case AscCH.historyitem_PivotTable_AddColField: if (bUndo) { pivotTable.removeNoDataField(Data.from); } else { pivotTable.addColField(Data.from, Data.to); } break; case AscCH.historyitem_PivotTable_AddDataField: if (bUndo) { pivotTable.removeDataField(Data.from, Data.to); } else { pivotTable.addDataField({ pivotIndex: Data.from, insertIndex: Data.to, name: Data.name }); } break; case AscCH.historyitem_PivotTable_RemovePageField: if (bUndo) { pivotTable.addPageField(Data.from, Data.to); } else { pivotTable.removeNoDataField(Data.from); } break; case AscCH.historyitem_PivotTable_RemoveRowField: if (bUndo) { pivotTable.addRowField(Data.from, Data.to); } else { pivotTable.removeNoDataField(Data.from); } break; case AscCH.historyitem_PivotTable_RemoveColField: if (bUndo) { pivotTable.addColField(Data.from, Data.to); } else { pivotTable.removeNoDataField(Data.from); } break; case AscCH.historyitem_PivotTable_RemoveDataField: if (bUndo) { for (var i = Data.to.length - 1; i >= 0; --i) { pivotTable.addDataField({ pivotIndex: Data.from, insertIndex: Data.to[i], name: Data.name[i] }); } } else { for (var i = 0; i < Data.to.length; ++i) { pivotTable.removeDataField(Data.from, Data.to[i]); } } break; case AscCH.historyitem_PivotTable_MovePageField: pivotTable.moveField(pivotTable.asc_getPageFields(), valueFrom, value); break; case AscCH.historyitem_PivotTable_MoveRowField: pivotTable.moveField(pivotTable.asc_getRowFields(), valueFrom, value); break; case AscCH.historyitem_PivotTable_MoveColField: pivotTable.moveField(pivotTable.asc_getColumnFields(), valueFrom, value); break; case AscCH.historyitem_PivotTable_MoveDataField: pivotTable.moveField(pivotTable.asc_getDataFields(), valueFrom, value); break; case AscCH.historyitem_PivotTable_RowItems: pivotTable.setRowItems(value); break; case AscCH.historyitem_PivotTable_ColItems: pivotTable.setColItems(value); break; case AscCH.historyitem_PivotTable_Location: pivotTable.setLocation(value); break; case AscCH.historyitem_PivotTable_CacheField: var cacheFields = pivotTable.asc_getCacheFields(); if (cacheFields && cacheFields[Data.index]) { cacheFields[Data.index].checkSharedItems(pivotTable, Data.index, pivotTable.getRecords()); } break; case AscCH.historyitem_PivotTable_PivotField: var pivotFields = pivotTable.asc_getPivotFields(); if (pivotFields[Data.index]) { pivotFields[Data.index] = value; } break; case AscCH.historyitem_PivotTable_PivotFilter: if (value) { if (!pivotTable.filters) { pivotTable.filters = new CT_PivotFilters(); } pivotTable.filters.filter.splice(Data.index, 0, value); } else if (pivotTable.filters) { pivotTable.filters.filter.splice(Data.index, 1); if (pivotTable.filters.filter.length == 0) { pivotTable.filters = null; } } break; case AscCH.historyitem_PivotTable_PivotFilterDataField: var pivotFilters = pivotTable.asc_getPivotFilters(); if (pivotFilters && Data.index < pivotFilters.length) { pivotFilters[Data.index].dataField = value; } break; case AscCH.historyitem_PivotTable_PivotFilterMeasureFld: var pivotFilters = pivotTable.asc_getPivotFilters(); if (pivotFilters && Data.index < pivotFilters.length) { pivotFilters[Data.index].setMeasureFld(value); } break; case AscCH.historyitem_PivotTable_PageFilter: var pageField = pivotTable.getPageFieldByFieldIndex(Data.index); if (pageField) { pageField.item = value; } break; case AscCH.historyitem_PivotTable_PivotCacheId: pivotTable.setPivotCacheId(value); break; case AscCH.historyitem_PivotTable_FormatsReindex: if (bUndo) { pivotTable.formats = value; } else { pivotTable.formatsManager.reIndexDataFields(value, false); } break; case AscCH.historyitem_PivotTable_FormatsRemoveField: if (bUndo) { pivotTable.formats = value; } else { pivotTable.formatsManager.removeField(value, false); } break; case AscCH.historyitem_PivotTable_FormatsAddRowField: if (bUndo) { pivotTable.formats = value; } else { pivotTable.formatsManager.addRowField(value, false); } break; case AscCH.historyitem_PivotTable_FormatsAddColField: if (bUndo) { pivotTable.formats = value; } else { pivotTable.formatsManager.addColField(value, false); } break; } }; function UndoRedoPivotCache(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoPivotCache; }); } UndoRedoPivotCache.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoPivotCache.prototype.getClassType = function () { return this.nType; }; UndoRedoPivotCache.prototype.Undo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, true); }; UndoRedoPivotCache.prototype.Redo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, false); }; UndoRedoPivotCache.prototype.UndoRedo = function (Type, Data, nSheetId, bUndo) { const cacheDefinition = this.wb.getPivotTableById(Data.pivot).cacheDefinition; switch (Type) { case AscCH.historyitem_PivotCache_SetCalculatedItems: bUndo ? cacheDefinition.setCalculatedItems(Data.from) : cacheDefinition.setCalculatedItems(Data.to); break; } }; function UndoRedoCacheFields(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoCacheFields; }); } UndoRedoCacheFields.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoCacheFields.prototype.getClassType = function () { return this.nType; }; UndoRedoCacheFields.prototype.Undo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, true); }; UndoRedoCacheFields.prototype.Redo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, false); }; UndoRedoCacheFields.prototype.UndoRedo = function (Type, Data, nSheetId, bUndo) { const cacheDefinition = this.wb.getPivotTableById(Data.pivot).cacheDefinition; switch (Type) { case AscCH.historyitem_PivotCacheFields_SetCacheField: bUndo ? cacheDefinition.setCacheField(Data.index, Data.from) : cacheDefinition.setCacheField(Data.index, Data.to); break; } }; function UndoRedoPivotFields(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoPivotFields; }); } UndoRedoPivotFields.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoPivotFields.prototype.getClassType = function () { return this.nType; }; UndoRedoPivotFields.prototype.Undo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, true); }; UndoRedoPivotFields.prototype.Redo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, false); }; UndoRedoPivotFields.prototype.UndoRedo = function (Type, Data, nSheetId, bUndo) { var ws = this.wb.getWorksheetById(nSheetId); if (!ws) { return; } var pivotTable = ws.getPivotTableById(Data.pivot); if (!pivotTable) { return; } var fields; if (Type === AscCH.historyitem_PivotTable_DataFieldSetName || Type === AscCH.historyitem_PivotTable_DataFieldSetSubtotal || Type === AscCH.historyitem_PivotTable_DataFieldSetShowDataAs || Type === AscCH.historyitem_PivotTable_DataFieldSetBaseField || Type === AscCH.historyitem_PivotTable_DataFieldSetBaseItem || Type === AscCH.historyitem_PivotTable_DataFieldSetNumFormat) { fields = pivotTable.asc_getDataFields(); } else { fields = pivotTable.asc_getPivotFields(); } var index = AscCH.historyitem_PivotTable_PivotFieldVisible === Type ? Data.index.from : Data.index; if (!fields || !fields[index]) { return; } var field = fields[index]; pivotTable.stashCurReportRange(); var value = bUndo ? Data.from : Data.to; var valueFrom = bUndo ? Data.to : Data.from; switch (Type) { case AscCH.historyitem_PivotTable_PivotFieldSetName: field.asc_setName(value, pivotTable, index); break; case AscCH.historyitem_PivotTable_PivotFieldSetOutline: field.asc_setOutline(value, pivotTable, index); break; case AscCH.historyitem_PivotTable_PivotFieldSetCompact: field.asc_setCompact(value, pivotTable, index); break; case AscCH.historyitem_PivotTable_PivotFieldFillDownLabelsDefault: field.setFillDownLabelsDefault(value, pivotTable, index); break; case AscCH.historyitem_PivotTable_PivotFieldSetInsertBlankRow: field.asc_setInsertBlankRow(value, pivotTable, index); break; case AscCH.historyitem_PivotTable_PivotFieldSetDefaultSubtotal: field.asc_setDefaultSubtotal(value, pivotTable, index); field.checkSubtotal(); break; case AscCH.historyitem_PivotTable_PivotFieldSetSubtotalTop: field.asc_setSubtotalTop(value, pivotTable, index); break; case AscCH.historyitem_PivotTable_PivotFieldSetSubtotalCaption: field.asc_setSubtotalCaption(value, pivotTable, index); break; case AscCH.historyitem_PivotTable_PivotFieldSetShowAll: field.asc_setShowAll(value, pivotTable, index); break; case AscCH.historyitem_PivotTable_PivotFieldVisible: field.asc_setVisible(value, pivotTable, index, Data.index.to); break; case AscCH.historyitem_PivotTable_PivotFieldSetSubtotals: field.setSubtotals(value, pivotTable, index); field.checkSubtotal(); break; case AscCH.historyitem_PivotTable_PivotFieldSetNumFormat: field.setNumFormat(value, pivotTable, index); break; case AscCH.historyitem_PivotTable_DataFieldSetName: field.asc_setName(value, pivotTable, index); break; case AscCH.historyitem_PivotTable_DataFieldSetSubtotal: field.asc_setSubtotal(value, pivotTable, index); break; case AscCH.historyitem_PivotTable_DataFieldSetShowDataAs: field.asc_setShowDataAs(value, pivotTable, index); break; case AscCH.historyitem_PivotTable_DataFieldSetBaseField: field.asc_setBaseField(value, pivotTable, index); break; case AscCH.historyitem_PivotTable_DataFieldSetBaseItem: field.asc_setBaseItem(value, pivotTable, index); break; case AscCH.historyitem_PivotTable_DataFieldSetNumFormat: field.setNumFormat(value, pivotTable, index); break; case AscCH.historyitem_PivotTable_PivotFieldMoveItem: field.moveItem(pivotTable, index, valueFrom, value); break; } }; function UndoRedoPivotFieldItems(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoPivotFieldItems; }); } UndoRedoPivotFieldItems.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoPivotFieldItems.prototype.getClassType = function () { return this.nType; }; UndoRedoPivotFieldItems.prototype.Undo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, true); }; UndoRedoPivotFieldItems.prototype.Redo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, false); }; UndoRedoPivotFieldItems.prototype.UndoRedo = function (Type, Data, nSheetId, bUndo) { var ws = this.wb.getWorksheetById(nSheetId); if (!ws) { return; } var pivotTable = ws.getPivotTableById(Data.pivot); if (!pivotTable) { return; } var field = pivotTable.asc_getPivotFields()[Data.pivotIndex]; var pivotFieldItem = field.getItem(Data.itemIndex) pivotTable.stashCurReportRange(); var value = bUndo ? Data.from : Data.to; switch (Type) { case AscCH.historyitem_PivotTable_PivotFieldItemSetName: pivotFieldItem.asc_setName(value, pivotTable, Data.pivotIndex, Data.itemIndex); break; } }; function UndoRedoSlicer(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoSlicer; }); } UndoRedoSlicer.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoSlicer.prototype.getClassType = function () { return this.nType; }; UndoRedoSlicer.prototype.Undo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, true); }; UndoRedoSlicer.prototype.Redo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, false); }; UndoRedoSlicer.prototype.UndoRedo = function (Type, Data, nSheetId, bUndo) { var oModel = (null == nSheetId) ? this.wb : this.wb.getWorksheetById(nSheetId); var api = window["Asc"]["editor"]; if (!api.wb || !oModel) { return; } var slicer, slicerCache; switch (Type) { case AscCH.historyitem_Slicer_SetCaption: { slicer = oModel.getSlicerByName(Data.name); if (slicer) { slicer.setCaption(bUndo ? Data.from : Data.to); } break; } case AscCH.historyitem_Slicer_SetCacheSourceName: { slicer = oModel.getSlicerByName(Data.name); if (slicer) { slicer.setSourceName(bUndo ? Data.from : Data.to); } break; } case AscCH.historyitem_Slicer_SetTableColName: { slicer = oModel.getSlicerByName(Data.name); if (slicer) { slicer.setTableCacheColName(bUndo ? Data.from : Data.to); } break; } case AscCH.historyitem_Slicer_SetTableName: { slicer = oModel.getSlicerByName(Data.name); if (slicer) { slicer.setTableName(bUndo ? Data.from : Data.to); } break; } case AscCH.historyitem_Slicer_SetCacheName: { slicer = oModel.getSlicerByName(Data.name); if (slicer) { slicer.setCacheName(bUndo ? Data.from : Data.to); } break; } case AscCH.historyitem_Slicer_SetName: { slicer = oModel.getSlicerByName(bUndo ? Data.to : Data.from); if (slicer) { slicer.setName(bUndo ? Data.from : Data.to); this.wb.onSlicerUpdate(bUndo ? Data.from : Data.to); } break; } case AscCH.historyitem_Slicer_SetStartItem: { slicer = oModel.getSlicerByName(Data.name); if (slicer) { slicer.startItem = bUndo ? Data.from : Data.to; } break; } case AscCH.historyitem_Slicer_SetColumnCount: { slicer = oModel.getSlicerByName(Data.name); if (slicer) { slicer.columnCount = bUndo ? Data.from : Data.to; } break; } case AscCH.historyitem_Slicer_SetShowCaption: { slicer = oModel.getSlicerByName(Data.name); if (slicer) { slicer.showCaption = bUndo ? Data.from : Data.to; } break; } case AscCH.historyitem_Slicer_SetLevel: { slicer = oModel.getSlicerByName(Data.name); if (slicer) { slicer.level = bUndo ? Data.from : Data.to; } break; } case AscCH.historyitem_Slicer_SetStyle: { slicer = oModel.getSlicerByName(Data.name); if (slicer) { slicer.style = bUndo ? Data.from : Data.to; } break; } case AscCH.historyitem_Slicer_SetLockedPosition: { slicer = oModel.getSlicerByName(Data.name); if (slicer) { slicer.lockedPosition = bUndo ? Data.from : Data.to; } break; } case AscCH.historyitem_Slicer_SetRowHeight: { slicer = oModel.getSlicerByName(Data.name); if (slicer) { slicer.rowHeight = bUndo ? Data.from : Data.to; } break; } case AscCH.historyitem_Slicer_SetCacheSortOrder: { slicerCache = oModel.getSlicerCacheByName(Data.name); if (slicerCache) { slicerCache.setSortOrder(bUndo ? Data.from : Data.to); } break; } case AscCH.historyitem_Slicer_SetCacheCustomListSort: { slicerCache = oModel.getSlicerCacheByName(Data.name); if (slicerCache) { slicerCache.setCustomListSort(bUndo ? Data.from : Data.to); } break; } case AscCH.historyitem_Slicer_SetCacheCrossFilter: { slicerCache = oModel.getSlicerCacheByName(Data.name); if (slicerCache) { slicerCache.setCrossFilter(bUndo ? Data.from : Data.to); } break; } case AscCH.historyitem_Slicer_SetCacheHideItemsWithNoData: { slicerCache = oModel.getSlicerCacheByName(Data.name); if (slicerCache) { slicerCache.setHideItemsWithNoData(bUndo ? Data.from : Data.to); } break; } case AscCH.historyitem_Slicer_SetCacheData: { slicerCache = oModel.getSlicerCacheByName(Data.name); if (slicerCache) { var wrapper = bUndo ? Data.from : Data.to; var cache = new Asc.CT_slicerCacheDefinition(); wrapper.initObject(cache); cache.initAfterSerialize(this.wb); slicerCache.copyFrom(cache); } break; } case AscCH.historyitem_Slicer_SetCacheMovePivot: { slicerCache = oModel.getSlicerCacheByName(Data.name); if (slicerCache) { var from = bUndo ? Data.to : Data.from; var to = bUndo ? Data.from : Data.to; slicerCache.movePivotTable(from.value, from.style, to.value, to.style); } break; } case AscCH.historyitem_Slicer_SetCacheCopySheet: { slicerCache = oModel.getSlicerCacheByName(Data.name); if (slicerCache) { var from = bUndo ? Data.to : Data.from; var to = bUndo ? Data.from : Data.to; slicerCache.forCopySheet(from, to); } break; } } }; function UndoRedoCF(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoCF; }); } UndoRedoCF.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoCF.prototype.getClassType = function () { return this.nType; }; UndoRedoCF.prototype.Undo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, true); }; UndoRedoCF.prototype.Redo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, false); }; UndoRedoCF.prototype.UndoRedo = function (Type, Data, nSheetId, bUndo) { var t = this; var oModel = (null == nSheetId) ? this.wb : this.wb.getWorksheetById(nSheetId); var api = window["Asc"]["editor"]; if (!api.wb || !oModel) { return; } var collaborativeEditing = this.wb.oApi.collaborativeEditing; let cfRule = oModel.getCFRuleById(Data.id, true) if (cfRule) { var value = bUndo ? Data.from : Data.to; switch (Type) { case AscCH.historyitem_CFRule_SetAboveAverage: { cfRule.asc_setAboveAverage(value); break; } case AscCH.historyitem_CFRule_SetActivePresent: { cfRule.activePresent = value; break; } case AscCH.historyitem_CFRule_SetBottom: { cfRule.asc_setBottom(value); break; } case AscCH.historyitem_CFRule_SetEqualAverage: { cfRule.asc_setEqualAverage(value); break; } case AscCH.historyitem_CFRule_SetOperator: { cfRule.asc_setOperator(value); break; } case AscCH.historyitem_CFRule_SetPercent: { cfRule.asc_setPercent(value); break; } case AscCH.historyitem_CFRule_SetPriority: { cfRule.asc_setPriority(value); break; } case AscCH.historyitem_CFRule_SetRank: { cfRule.asc_setRank(value); break; } case AscCH.historyitem_CFRule_SetStdDev: { cfRule.asc_setStdDev(value); break; } case AscCH.historyitem_CFRule_SetStopIfTrue: { cfRule.asc_setStopIfTrue(value); break; } case AscCH.historyitem_CFRule_SetText: { cfRule.asc_setText(value); break; } case AscCH.historyitem_CFRule_SetTimePeriod: { cfRule.asc_setTimePeriod(value); break; } case AscCH.historyitem_CFRule_SetType: { cfRule.asc_setType(value); break; } case AscCH.historyitem_CFRule_SetPivot: { cfRule.pivot = value; break; } case AscCH.historyitem_CFRule_SetDxf: { cfRule.asc_setDxf(value); break; } case AscCH.historyitem_CFRule_SetRanges: { var toAscRanges = function (_ranges) { var ascRanges = []; for (var i = 0; i < _ranges.length; i++) { var r1 = t.wb.bCollaborativeChanges ? collaborativeEditing.getLockOtherRow2(nSheetId, _ranges[i].r1) : _ranges[i].r1; var c1 = t.wb.bCollaborativeChanges ? collaborativeEditing.getLockOtherColumn2(nSheetId, _ranges[i].c1) : _ranges[i].c1; var r2 = t.wb.bCollaborativeChanges ? collaborativeEditing.getLockOtherRow2(nSheetId, _ranges[i].r2) : _ranges[i].r2; var c2 = t.wb.bCollaborativeChanges ? collaborativeEditing.getLockOtherColumn2(nSheetId, _ranges[i].c2) : _ranges[i].c2; ascRanges.push(new Asc.Range(c1, r1, c2, r2)); } return ascRanges; }; cfRule.ranges = toAscRanges(value); if (oModel) { oModel.cleanConditionalFormattingRangeIterator(); } break; } case AscCH.historyitem_CFRule_SetRuleElements: { cfRule.aRuleElements = value; break; } } } }; function UndoRedoProtectedRange(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoProtectedRange; }); } UndoRedoProtectedRange.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoProtectedRange.prototype.getClassType = function () { return this.nType; }; UndoRedoProtectedRange.prototype.Undo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, true); }; UndoRedoProtectedRange.prototype.Redo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, false); }; UndoRedoProtectedRange.prototype.UndoRedo = function (Type, Data, nSheetId, bUndo) { var oModel = (null == nSheetId) ? this.wb : this.wb.getWorksheetById(nSheetId); var api = window["Asc"]["editor"]; if (!api.wb || !oModel) { return; } var collaborativeEditing = this.wb.oApi.collaborativeEditing; var protectedRange = oModel.getProtectedRangeById(Data.id); if (protectedRange && protectedRange.val) { var value = bUndo ? Data.from : Data.to; protectedRange = protectedRange.val; switch (Type) { case AscCH.historyitem_Protected_SetName: { protectedRange.asc_setName(value); break; } case AscCH.historyitem_Protected_SetAlgorithmName: { protectedRange.asc_setAlgorithmName(value); break; } case AscCH.historyitem_Protected_SetHashValue: { protectedRange.asc_setHashValue(value); break; } case AscCH.historyitem_Protected_SetSaltValue: { protectedRange.asc_setSaltValue(value); break; } case AscCH.historyitem_Protected_SetSpinCount: { protectedRange.asc_setSpinCount(value); break; } case AscCH.historyitem_Protected_SetSqref: { var toAscRanges = function (_ranges) { var ascRanges = []; for (var i = 0; i < _ranges.length; i++) { var r1 = collaborativeEditing.getLockOtherRow2(nSheetId, _ranges[i].r1); var c1 = collaborativeEditing.getLockOtherColumn2(nSheetId, _ranges[i].c1); var r2 = collaborativeEditing.getLockOtherRow2(nSheetId, _ranges[i].r2); var c2 = collaborativeEditing.getLockOtherColumn2(nSheetId, _ranges[i].c2); ascRanges.push(new Asc.Range(c1, r1, c2, r2)); } return ascRanges; }; protectedRange.sqref = toAscRanges(value); break; } } } }; function UndoRedoProtectedSheet(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoProtectedSheet; }); } UndoRedoProtectedSheet.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoProtectedSheet.prototype.getClassType = function () { return this.nType; }; UndoRedoProtectedSheet.prototype.Undo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, true); }; UndoRedoProtectedSheet.prototype.Redo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, false); }; UndoRedoProtectedSheet.prototype.UndoRedo = function (Type, Data, nSheetId, bUndo) { var oModel = (null == nSheetId) ? this.wb : this.wb.getWorksheetById(nSheetId); var api = window["Asc"]["editor"]; if (!api.wb || !oModel) { return; } var protectedSheet = oModel.sheetProtection; if (!protectedSheet) { oModel.sheetProtection = protectedSheet = new window["Asc"].CSheetProtection(); oModel.sheetProtection.setDefaultInterface(); } if (protectedSheet) { var value = bUndo ? Data.from : Data.to; switch (Type) { case AscCH.historyitem_Protected_SetAlgorithmName: { protectedSheet.setAlgorithmName(value); break; } case AscCH.historyitem_Protected_SetHashValue: { protectedSheet.setHashValue(value); break; } case AscCH.historyitem_Protected_SetSaltValue: { protectedSheet.setSaltValue(value); break; } case AscCH.historyitem_Protected_SetSpinCount: { protectedSheet.setSpinCount(value); break; } case AscCH.historyitem_Protected_SetPassword: { protectedSheet.setPasswordXL(value); break; } case AscCH.historyitem_Protected_SetSheet: { protectedSheet.setSheet(value); break; } case AscCH.historyitem_Protected_SetObjects: { protectedSheet.setObjects(value); break; } case AscCH.historyitem_Protected_SetScenarios: { protectedSheet.setScenarios(value); break; } case AscCH.historyitem_Protected_SetFormatCells: { protectedSheet.setFormatCells(value); break; } case AscCH.historyitem_Protected_SetFormatColumns: { protectedSheet.setFormatColumns(value); break; } case AscCH.historyitem_Protected_SetInsertColumns: { protectedSheet.setInsertColumns(value); break; } case AscCH.historyitem_Protected_SetInsertRows: { protectedSheet.setInsertRows(value); break; } case AscCH.historyitem_Protected_SetFormatRows: { protectedSheet.setFormatRows(value); break; } case AscCH.historyitem_Protected_SetInsertHyperlinks: { protectedSheet.setInsertHyperlinks(value); break; } case AscCH.historyitem_Protected_SetDeleteRows: { protectedSheet.setDeleteRows(value); break; } case AscCH.historyitem_Protected_SetDeleteColumns: { protectedSheet.setDeleteColumns(value); break; } case AscCH.historyitem_Protected_SetSelectLockedCells: { protectedSheet.setSelectLockedCells(value); break; } case AscCH.historyitem_Protected_SetSort: { protectedSheet.setSort(value); break; } case AscCH.historyitem_Protected_SetAutoFilter: { protectedSheet.setAutoFilter(value); break; } case AscCH.historyitem_Protected_SetPivotTables: { protectedSheet.setPivotTables(value); break; } case AscCH.historyitem_Protected_SetSelectUnlockedCells: { protectedSheet.setSelectUnlockedCells(value); break; } } if (bUndo) { if (oModel.sheetProtection && oModel.sheetProtection.isDefault()) { oModel.sheetProtection = null; } } this.wb.handlers.trigger("asc_onChangeProtectWorksheet", oModel.index); } }; function UndoRedoProtectedWorkbook(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoProtectedWorkbook; }); } UndoRedoProtectedWorkbook.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoProtectedWorkbook.prototype.getClassType = function () { return this.nType; }; UndoRedoProtectedWorkbook.prototype.Undo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, true); }; UndoRedoProtectedWorkbook.prototype.Redo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, false); }; UndoRedoProtectedWorkbook.prototype.UndoRedo = function (Type, Data, nSheetId, bUndo) { var oModel = (null == nSheetId) ? this.wb : this.wb.getWorksheetById(nSheetId); var api = window["Asc"]["editor"]; if (!api.wb || !oModel) { return; } var protectedWorkbook = oModel.workbookProtection; if (!protectedWorkbook) { oModel.workbookProtection = protectedWorkbook = new window["Asc"].CWorkbookProtection(); } if (protectedWorkbook) { var value = bUndo ? Data.from : Data.to; switch (Type) { case AscCH.historyitem_Protected_SetLockStructure: { protectedWorkbook.setLockStructure(value); break; } case AscCH.historyitem_Protected_SetLockWindows: { protectedWorkbook.asc_setLockWindows(value); break; } case AscCH.historyitem_Protected_SetLockRevision: { protectedWorkbook.asc_setLockRevision(value); break; } case AscCH.historyitem_Protected_SetRevisionsAlgorithmName: { protectedWorkbook.asc_setRevisionsAlgorithmName(value); break; } case AscCH.historyitem_Protected_SetRevisionsHashValue: { protectedWorkbook.asc_setRevisionsHashValue(value); break; } case AscCH.historyitem_Protected_SetRevisionsSaltValue: { protectedWorkbook.asc_setRevisionsSaltValue(value); break; } case AscCH.historyitem_Protected_SetRevisionsSpinCount: { protectedWorkbook.asc_setRevisionsSpinCount(value); break; } case AscCH.historyitem_Protected_SetWorkbookAlgorithmName: { protectedWorkbook.asc_setWorkbookAlgorithmName(value); break; } case AscCH.historyitem_Protected_SetWorkbookHashValue: { protectedWorkbook.asc_setWorkbookHashValue(value); break; } case AscCH.historyitem_Protected_SetWorkbookSaltValue: { protectedWorkbook.asc_setWorkbookSaltValue(value); break; } case AscCH.historyitem_Protected_SetWorkbookSpinCount: { protectedWorkbook.asc_setWorkbookSpinCount(value); break; } case AscCH.historyitem_Protected_SetPassword: { protectedWorkbook.setPasswordXL(value); break; } } oModel.handlers.trigger("asc_onChangeProtectWorkbook"); } }; function UndoRedoNamedSheetViews(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoNamedSheetViews; }); } UndoRedoNamedSheetViews.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoNamedSheetViews.prototype.getClassType = function () { return this.nType; }; UndoRedoNamedSheetViews.prototype.Undo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, true); }; UndoRedoNamedSheetViews.prototype.Redo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, false); }; UndoRedoNamedSheetViews.prototype.UndoRedo = function (Type, Data, nSheetId, bUndo) { var ws = this.wb.getWorksheetById(nSheetId); if (!ws) { return; } var api = window["Asc"]["editor"]; var sheetView; switch (Type) { case AscCH.historyitem_NamedSheetView_SetName: { sheetView = ws.getNamedSheetViewById(Data.sheetView); if (sheetView) { sheetView.setName(bUndo ? Data.from : Data.to); } break; } case AscCH.historyitem_NamedSheetView_DeleteFilter: { sheetView = ws.getNamedSheetViewById(Data.sheetView); if (sheetView && bUndo) { sheetView.nsvFilters.push(Data.from); } break; } } }; function UndoRedoUserProtectedRange(wb) { UndoRedoClassBase.call(this); this.wb = wb; this.nType = UndoRedoClassTypes.Add(function () { return AscCommonExcel.g_oUndoRedoUserProtectedRange; }); } UndoRedoUserProtectedRange.prototype = Object.create(UndoRedoClassBase.prototype); UndoRedoUserProtectedRange.prototype.getClassType = function () { return this.nType; }; UndoRedoUserProtectedRange.prototype.Undo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, true); }; UndoRedoUserProtectedRange.prototype.Redo = function (Type, Data, nSheetId) { this.UndoRedo(Type, Data, nSheetId, false); }; UndoRedoUserProtectedRange.prototype.UndoRedo = function (Type, Data, nSheetId, bUndo) { var wb = this.wb; var ws = this.wb.getWorksheetById(nSheetId); if (!ws) { return; } var userProtectedRange = ws.getUserProtectedRangeById(Data.id); if (!userProtectedRange) { return; } var value = bUndo ? Data.from : Data.to; switch (Type) { case AscCH.historyitem_UserProtectedRange_Ref: var from = null, to = null, temp; var collaborativeEditing = this.wb.oApi.collaborativeEditing; 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 (wb.bCollaborativeChanges) { from.r1 = collaborativeEditing.getLockOtherRow2(nSheetId, from.r1); from.c1 = collaborativeEditing.getLockOtherColumn2(nSheetId, from.c1); from.r2 = collaborativeEditing.getLockOtherRow2(nSheetId, from.r2); from.c2 = collaborativeEditing.getLockOtherColumn2(nSheetId, from.c2); } } 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 (wb.bCollaborativeChanges) { to.r1 = collaborativeEditing.getLockOtherRow2(nSheetId, to.r1); to.c1 = collaborativeEditing.getLockOtherColumn2(nSheetId, to.c1); to.r2 = collaborativeEditing.getLockOtherRow2(nSheetId, to.r2); to.c2 = collaborativeEditing.getLockOtherColumn2(nSheetId, to.c2); } } if (bUndo) { temp = from; from = to; to = temp; } userProtectedRange.obj.setLocation(to); break; } }; //----------------------------------------------------------export---------------------------------------------------- window['AscCommonExcel'] = window['AscCommonExcel'] || {}; window['AscCommonExcel'].UndoRedoItemSerializable = UndoRedoItemSerializable; window['AscCommonExcel'].UndoRedoClassTypes = UndoRedoClassTypes; window['AscCommonExcel'].UndoRedoDataTypes = UndoRedoDataTypes; window['AscCommonExcel'].UndoRedoData_CellSimpleData = UndoRedoData_CellSimpleData; window['AscCommonExcel'].UndoRedoData_CellData = UndoRedoData_CellData; window['AscCommonExcel'].UndoRedoData_CellValueData = UndoRedoData_CellValueData; window['AscCommonExcel'].UndoRedoData_FromToRowCol = UndoRedoData_FromToRowCol; window['AscCommonExcel'].UndoRedoData_FromTo = UndoRedoData_FromTo; window['AscCommonExcel'].UndoRedoData_FromToHyperlink = UndoRedoData_FromToHyperlink; window['AscCommonExcel'].UndoRedoData_IndexSimpleProp = UndoRedoData_IndexSimpleProp; window['AscCommonExcel'].UndoRedoData_ColProp = UndoRedoData_ColProp; window['AscCommonExcel'].UndoRedoData_RowProp = UndoRedoData_RowProp; window['AscCommonExcel'].UndoRedoData_BBox = UndoRedoData_BBox; window['AscCommonExcel'].UndoRedoData_FrozenBBox = UndoRedoData_FrozenBBox; window['AscCommonExcel'].UndoRedoData_SortData = UndoRedoData_SortData; window['AscCommonExcel'].UndoRedoData_PivotTable = UndoRedoData_PivotTable; window['AscCommonExcel'].UndoRedoData_PivotCache = UndoRedoData_PivotCache; window['AscCommonExcel'].UndoRedoData_CacheFields = UndoRedoData_CacheFields; window['AscCommonExcel'].UndoRedoData_DataField = UndoRedoData_DataField; window['AscCommonExcel'].UndoRedoData_PivotTableRedo = UndoRedoData_PivotTableRedo; window['AscCommonExcel'].UndoRedoData_PivotField = UndoRedoData_PivotField; window['AscCommonExcel'].UndoRedoData_PivotFieldItem = UndoRedoData_PivotFieldItem; window['AscCommonExcel'].UndoRedoData_Layout = UndoRedoData_Layout; window['AscCommonExcel'].UndoRedoData_SheetAdd = UndoRedoData_SheetAdd; window['AscCommonExcel'].UndoRedoData_SheetRemove = UndoRedoData_SheetRemove; window['AscCommonExcel'].UndoRedoData_DefinedNames = UndoRedoData_DefinedNames; window['AscCommonExcel'].UndoRedoData_ClrScheme = UndoRedoData_ClrScheme; window['AscCommonExcel'].UndoRedoData_AutoFilter = UndoRedoData_AutoFilter; window['AscCommonExcel'].UndoRedoData_SingleProperty = UndoRedoData_SingleProperty; window['AscCommonExcel'].UndoRedoData_ArrayFormula = UndoRedoData_ArrayFormula; window['AscCommonExcel'].UndoRedoData_SortState = UndoRedoData_SortState; window['AscCommonExcel'].UndoRedoData_Slicer = UndoRedoData_Slicer; window['AscCommonExcel'].UndoRedoData_DataValidation = UndoRedoData_DataValidation; window['AscCommonExcel'].UndoRedoData_CF = UndoRedoData_CF; window['AscCommonExcel'].UndoRedoData_ProtectedRange = UndoRedoData_ProtectedRange; window['AscCommonExcel'].UndoRedoData_UserProtectedRange = UndoRedoData_UserProtectedRange; window['AscCommonExcel'].UndoRedoData_RowColBreaks = UndoRedoData_RowColBreaks; window['AscCommonExcel'].UndoRedoData_LegacyDrawingHFDrawing = UndoRedoData_LegacyDrawingHFDrawing; window['AscCommonExcel'].UndoRedoWorkbook = UndoRedoWorkbook; window['AscCommonExcel'].UndoRedoCell = UndoRedoCell; window['AscCommonExcel'].UndoRedoWoorksheet = UndoRedoWoorksheet; window['AscCommonExcel'].UndoRedoRowCol = UndoRedoRowCol; window['AscCommonExcel'].UndoRedoComment = UndoRedoComment; window['AscCommonExcel'].UndoRedoAutoFilters = UndoRedoAutoFilters; window['AscCommonExcel'].UndoRedoSparklines = UndoRedoSparklines; window['AscCommonExcel'].UndoRedoSharedFormula = UndoRedoSharedFormula; window['AscCommonExcel'].UndoRedoRedoLayout = UndoRedoRedoLayout; window['AscCommonExcel'].UndoRedoArrayFormula = UndoRedoArrayFormula; window['AscCommonExcel'].UndoRedoHeaderFooter = UndoRedoHeaderFooter; window['AscCommonExcel'].UndoRedoSortState = UndoRedoSortState; window['AscCommonExcel'].UndoRedoData_BinaryWrapper = UndoRedoData_BinaryWrapper; window['AscCommonExcel'].UndoRedoData_BinaryWrapper2 = UndoRedoData_BinaryWrapper2; window['AscCommonExcel'].UndoRedoPivotTables = UndoRedoPivotTables; window['AscCommonExcel'].UndoRedoPivotFields = UndoRedoPivotFields; window['AscCommonExcel'].UndoRedoPivotCache = UndoRedoPivotCache; window['AscCommonExcel'].UndoRedoCacheFields = UndoRedoCacheFields; window['AscCommonExcel'].UndoRedoPivotFieldItems = UndoRedoPivotFieldItems; window['AscCommonExcel'].UndoRedoSlicer = UndoRedoSlicer; window['AscCommonExcel'].UndoRedoCF = UndoRedoCF; window['AscCommonExcel'].UndoRedoProtectedRange = UndoRedoProtectedRange; window['AscCommonExcel'].UndoRedoProtectedSheet = UndoRedoProtectedSheet; window['AscCommonExcel'].UndoRedoProtectedWorkbook = UndoRedoProtectedWorkbook; window['AscCommonExcel'].UndoRedoUserProtectedRange = UndoRedoUserProtectedRange; window['AscCommonExcel'].g_oUndoRedoWorkbook = null; window['AscCommonExcel'].g_oUndoRedoCell = null; window['AscCommonExcel'].g_oUndoRedoWorksheet = null; window['AscCommonExcel'].g_oUndoRedoRow = null; window['AscCommonExcel'].g_oUndoRedoCol = null; window['AscCommonExcel'].g_oUndoRedoComment = null; window['AscCommonExcel'].g_oUndoRedoAutoFilters = null; window['AscCommonExcel'].g_oUndoRedoSparklines = null; window['AscCommonExcel'].g_oUndoRedoPivotTables = null; window['AscCommonExcel'].g_oUndoRedoPivotFields = null; window['AscCommonExcel'].g_oUndoRedoPivotCache = null; window['AscCommonExcel'].g_oUndoRedoCacheFields = null; window['AscCommonExcel'].g_oUndoRedoPivotFieldItems = null; window['AscCommonExcel'].g_oUndoRedoSharedFormula = null; window['AscCommonExcel'].g_oUndoRedoLayout = null; window['AscCommonExcel'].g_UndoRedoArrayFormula = null; window['AscCommonExcel'].g_oUndoRedoHeaderFooter = null; window['AscCommonExcel'].g_oUndoRedoSlicer = null; window['AscCommonExcel'].g_oUndoRedoNamedSheetViews = null; window['AscCommonExcel'].g_oUndoRedoCF = null; window['AscCommonExcel'].g_UndoRedoProtectedRange = null; window['AscCommonExcel'].g_UndoRedoProtectedSheet = null; window['AscCommonExcel'].g_UndoRedoProtectedWorkbook = null; window['AscCommonExcel'].UndoRedoNamedSheetViews = UndoRedoNamedSheetViews; window['AscCommonExcel'].UndoRedoData_NamedSheetView = UndoRedoData_NamedSheetView; window['AscCommonExcel'].UndoRedoData_NamedSheetViewRedo = UndoRedoData_NamedSheetViewRedo; })(window);