/* * (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) { //------------------------------------------------------------export-------------------------------------------------- window['AscCH'] = window['AscCH'] || {}; window['AscCH'].historyitem_Unknown = 0; window['AscCH'].historyitem_Workbook_SheetAdd = 1; window['AscCH'].historyitem_Workbook_SheetRemove = 2; window['AscCH'].historyitem_Workbook_ChangeColorScheme = 5; window['AscCH'].historyitem_Workbook_DefinedNamesChange = 7; window['AscCH'].historyitem_Workbook_DefinedNamesChangeUndo = 8; window['AscCH'].historyitem_Workbook_Calculate = 9; window['AscCH'].historyitem_Workbook_PivotWorksheetSource = 10; window['AscCH'].historyitem_Workbook_Date1904 = 11; window['AscCH'].historyitem_Workbook_ChangeExternalReference = 12; window['AscCH'].historyitem_Workbook_TimelineCacheDelete = 13; window['AscCH'].historyitem_Workbook_CalcPr_iterate = 14; window['AscCH'].historyitem_Workbook_CalcPr_iterateCount = 15; window['AscCH'].historyitem_Workbook_CalcPr_iterateDelta = 16; window['AscCH'].historyitem_Workbook_UpdateLinks = 17; window['AscCH'].historyitem_Workbook_ShowVerticalScroll = 18; window['AscCH'].historyitem_Workbook_ShowHorizontalScroll = 19; window['AscCH'].historyitem_Workbook_SetCustomFunctions = 20; window['AscCH'].historyitem_Worksheet_RemoveCell = 1; window['AscCH'].historyitem_Worksheet_RemoveRows = 2; window['AscCH'].historyitem_Worksheet_RemoveCols = 3; window['AscCH'].historyitem_Worksheet_AddRows = 4; window['AscCH'].historyitem_Worksheet_AddCols = 5; window['AscCH'].historyitem_Worksheet_ShiftCellsLeft = 6; window['AscCH'].historyitem_Worksheet_ShiftCellsTop = 7; window['AscCH'].historyitem_Worksheet_ShiftCellsRight = 8; window['AscCH'].historyitem_Worksheet_ShiftCellsBottom = 9; window['AscCH'].historyitem_Worksheet_ColProp = 10; window['AscCH'].historyitem_Worksheet_RowProp = 11; window['AscCH'].historyitem_Worksheet_Sort = 12; window['AscCH'].historyitem_Worksheet_MoveRange = 13; window['AscCH'].historyitem_Worksheet_Rename = 18; window['AscCH'].historyitem_Worksheet_Hide = 19; window['AscCH'].historyitem_Worksheet_Null = 20; window['AscCH'].historyitem_Worksheet_ChangeMerge = 25; window['AscCH'].historyitem_Worksheet_ChangeHyperlink = 26; window['AscCH'].historyitem_Worksheet_SetTabColor = 27; window['AscCH'].historyitem_Worksheet_RowHide = 28; window['AscCH'].historyitem_Worksheet_SetRightToLeft = 29; // Frozen cell window['AscCH'].historyitem_Worksheet_ChangeFrozenCell = 30; window['AscCH'].historyitem_Worksheet_SetDisplayGridlines = 31; window['AscCH'].historyitem_Worksheet_SetDisplayHeadings = 32; window['AscCH'].historyitem_Worksheet_GroupRow = 33; window['AscCH'].historyitem_Worksheet_CollapsedRow = 34; window['AscCH'].historyitem_Worksheet_CollapsedCol = 35; window['AscCH'].historyitem_Worksheet_GroupCol = 36; window['AscCH'].historyitem_Worksheet_SetSummaryRight = 37; window['AscCH'].historyitem_Worksheet_SetSummaryBelow = 38; window['AscCH'].historyitem_Worksheet_SetFitToPage = 39; window['AscCH'].historyitem_Worksheet_PivotAdd = 40; window['AscCH'].historyitem_Worksheet_PivotDelete = 41; window['AscCH'].historyitem_Worksheet_PivotReplace = 42; window['AscCH'].historyitem_Worksheet_SlicerAdd = 43; window['AscCH'].historyitem_Worksheet_SlicerDelete = 44; window['AscCH'].historyitem_Worksheet_SetActiveNamedSheetView = 45; window['AscCH'].historyitem_Worksheet_SheetViewAdd = 46; window['AscCH'].historyitem_Worksheet_SheetViewDelete = 47; window['AscCH'].historyitem_Worksheet_DataValidationAdd = 48; window['AscCH'].historyitem_Worksheet_DataValidationChange = 49; window['AscCH'].historyitem_Worksheet_DataValidationDelete = 50; window['AscCH'].historyitem_Worksheet_PivotReplaceKeepRecords = 51; window['AscCH'].historyitem_Worksheet_CFRuleAdd = 52; window['AscCH'].historyitem_Worksheet_CFRuleDelete = 53; window['AscCH'].historyitem_Worksheet_SetShowZeros = 54; window['AscCH'].historyitem_Worksheet_SetTopLeftCell = 55; window['AscCH'].historyitem_Worksheet_AddProtectedRange = 56; window['AscCH'].historyitem_Worksheet_DelProtectedRange = 57; window['AscCH'].historyitem_Worksheet_AddCellWatch = 58; window['AscCH'].historyitem_Worksheet_DelCellWatch = 59; window['AscCH'].historyitem_Worksheet_ChangeUserProtectedRange = 60; window['AscCH'].historyitem_Worksheet_SetSheetViewType = 61; window['AscCH'].historyitem_Worksheet_SetShowFormulas = 62; window['AscCH'].historyitem_Worksheet_ChangeRowColBreaks = 63; window['AscCH'].historyitem_Worksheet_ChangeLegacyDrawingHFDrawing = 64; window['AscCH'].historyitem_Worksheet_TimelineDelete = 65; window['AscCH'].historyitem_RowCol_Fontname = 1; window['AscCH'].historyitem_RowCol_Fontsize = 2; window['AscCH'].historyitem_RowCol_Fontcolor = 3; window['AscCH'].historyitem_RowCol_Bold = 4; window['AscCH'].historyitem_RowCol_Italic = 5; window['AscCH'].historyitem_RowCol_Underline = 6; window['AscCH'].historyitem_RowCol_Strikeout = 7; window['AscCH'].historyitem_RowCol_FontAlign = 8; window['AscCH'].historyitem_RowCol_AlignVertical = 9; window['AscCH'].historyitem_RowCol_AlignHorizontal = 10; window['AscCH'].historyitem_RowCol_Fill = 11; window['AscCH'].historyitem_RowCol_Border = 12; window['AscCH'].historyitem_RowCol_ShrinkToFit = 13; window['AscCH'].historyitem_RowCol_Wrap = 14; window['AscCH'].historyitem_RowCol_SetFont = 16; window['AscCH'].historyitem_RowCol_Angle = 17; window['AscCH'].historyitem_RowCol_SetStyle = 18; window['AscCH'].historyitem_RowCol_SetCellStyle = 19; window['AscCH'].historyitem_RowCol_Num = 20; window['AscCH'].historyitem_RowCol_Indent = 21; window['AscCH'].historyitem_RowCol_ApplyProtection = 22; window['AscCH'].historyitem_RowCol_Locked = 23; window['AscCH'].historyitem_RowCol_HiddenFormulas = 24; window['AscCH'].historyitem_RowCol_ReadingOrder = 25; window['AscCH'].historyitem_Cell_Fontname = 1; window['AscCH'].historyitem_Cell_Fontsize = 2; window['AscCH'].historyitem_Cell_Fontcolor = 3; window['AscCH'].historyitem_Cell_Bold = 4; window['AscCH'].historyitem_Cell_Italic = 5; window['AscCH'].historyitem_Cell_Underline = 6; window['AscCH'].historyitem_Cell_Strikeout = 7; window['AscCH'].historyitem_Cell_FontAlign = 8; window['AscCH'].historyitem_Cell_AlignVertical = 9; window['AscCH'].historyitem_Cell_AlignHorizontal = 10; window['AscCH'].historyitem_Cell_Fill = 11; window['AscCH'].historyitem_Cell_Border = 12; window['AscCH'].historyitem_Cell_ShrinkToFit = 13; window['AscCH'].historyitem_Cell_Wrap = 14; window['AscCH'].historyitem_Cell_ChangeValue = 16; window['AscCH'].historyitem_Cell_ChangeArrayValueFormat = 17; window['AscCH'].historyitem_Cell_SetStyle = 18; window['AscCH'].historyitem_Cell_SetFont = 19; window['AscCH'].historyitem_Cell_SetQuotePrefix = 20; window['AscCH'].historyitem_Cell_Angle = 21; window['AscCH'].historyitem_Cell_Style = 22; window['AscCH'].historyitem_Cell_ChangeValueUndo = 23; window['AscCH'].historyitem_Cell_Num = 24; window['AscCH'].historyitem_Cell_SetPivotButton = 25; window['AscCH'].historyitem_Cell_RemoveSharedFormula = 26; window['AscCH'].historyitem_Cell_Indent = 27; window['AscCH'].historyitem_Cell_SetApplyProtection = 28; window['AscCH'].historyitem_Cell_SetHidden = 29; window['AscCH'].historyitem_Cell_SetLocked = 30; window['AscCH'].historyitem_Cell_ReadingOrder = 31; window['AscCH'].historyitem_Comment_Add = 1; window['AscCH'].historyitem_Comment_Remove = 2; window['AscCH'].historyitem_Comment_Change = 3; window['AscCH'].historyitem_Comment_Coords = 4; window['AscCH'].historyitem_AutoFilter_Add = 1; window['AscCH'].historyitem_AutoFilter_Sort = 2; window['AscCH'].historyitem_AutoFilter_Empty = 3; window['AscCH'].historyitem_AutoFilter_Apply = 5; window['AscCH'].historyitem_AutoFilter_Move = 6; window['AscCH'].historyitem_AutoFilter_CleanAutoFilter = 7; window['AscCH'].historyitem_AutoFilter_Delete = 8; window['AscCH'].historyitem_AutoFilter_ChangeTableStyle = 9; window['AscCH'].historyitem_AutoFilter_Change = 10; window['AscCH'].historyitem_AutoFilter_ChangeTableInfo = 12; window['AscCH'].historyitem_AutoFilter_ChangeTableRef = 13; window['AscCH'].historyitem_AutoFilter_ChangeTableName = 14; window['AscCH'].historyitem_AutoFilter_ClearFilterColumn = 15; window['AscCH'].historyitem_AutoFilter_ChangeColumnName = 16; window['AscCH'].historyitem_AutoFilter_ChangeTotalRow = 17; window['AscCH'].historyitem_PivotTable_StyleName = 1; window['AscCH'].historyitem_PivotTable_StyleShowRowHeaders = 2; window['AscCH'].historyitem_PivotTable_StyleShowColHeaders = 3; window['AscCH'].historyitem_PivotTable_StyleShowRowStripes = 4; window['AscCH'].historyitem_PivotTable_StyleShowColStripes = 5; window['AscCH'].historyitem_PivotTable_SetName = 6; window['AscCH'].historyitem_PivotTable_SetRowGrandTotals = 7; window['AscCH'].historyitem_PivotTable_SetColGrandTotals = 8; window['AscCH'].historyitem_PivotTable_SetPageOverThenDown = 9; window['AscCH'].historyitem_PivotTable_SetPageWrap = 10; window['AscCH'].historyitem_PivotTable_SetShowHeaders = 11; window['AscCH'].historyitem_PivotTable_SetCompact = 12; window['AscCH'].historyitem_PivotTable_SetOutline = 13; window['AscCH'].historyitem_PivotTable_SetFillDownLabelsDefault = 14; window['AscCH'].historyitem_PivotTable_SetDataOnRows = 15; window['AscCH'].historyitem_PivotTable_SetAltText = 16; window['AscCH'].historyitem_PivotTable_SetAltTextSummary = 17; window['AscCH'].historyitem_PivotTable_AddPageField = 18; window['AscCH'].historyitem_PivotTable_AddRowField = 19; window['AscCH'].historyitem_PivotTable_AddColField = 20; window['AscCH'].historyitem_PivotTable_AddDataField = 21; window['AscCH'].historyitem_PivotTable_RemovePageField = 22; window['AscCH'].historyitem_PivotTable_RemoveRowField = 23; window['AscCH'].historyitem_PivotTable_RemoveColField = 24; window['AscCH'].historyitem_PivotTable_RemoveDataField = 25; window['AscCH'].historyitem_PivotTable_MovePageField = 26; window['AscCH'].historyitem_PivotTable_MoveRowField = 27; window['AscCH'].historyitem_PivotTable_MoveColField = 28; window['AscCH'].historyitem_PivotTable_MoveDataField = 29; window['AscCH'].historyitem_PivotTable_PivotFieldSetName = 30; window['AscCH'].historyitem_PivotTable_PivotFieldSetOutline = 31; window['AscCH'].historyitem_PivotTable_PivotFieldSetCompact = 32; window['AscCH'].historyitem_PivotTable_PivotFieldFillDownLabelsDefault = 33; window['AscCH'].historyitem_PivotTable_PivotFieldSetInsertBlankRow = 34; window['AscCH'].historyitem_PivotTable_PivotFieldSetDefaultSubtotal = 35; window['AscCH'].historyitem_PivotTable_PivotFieldSetSubtotalTop = 36; window['AscCH'].historyitem_PivotTable_PivotFieldSetShowAll = 37; window['AscCH'].historyitem_PivotTable_PivotFieldSetSubtotals = 38; window['AscCH'].historyitem_PivotTable_DataFieldSetName = 39; window['AscCH'].historyitem_PivotTable_DataFieldSetSubtotal = 40; window['AscCH'].historyitem_PivotTable_RowItems = 41; window['AscCH'].historyitem_PivotTable_ColItems = 42; window['AscCH'].historyitem_PivotTable_Location = 43; window['AscCH'].historyitem_PivotTable_SetDataPosition = 44; window['AscCH'].historyitem_PivotTable_CacheField = 45; window['AscCH'].historyitem_PivotTable_PivotField = 46; window['AscCH'].historyitem_PivotTable_PivotFilter = 47; window['AscCH'].historyitem_PivotTable_PivotFilterDataField = 48; window['AscCH'].historyitem_PivotTable_PivotFilterMeasureFld = 49; window['AscCH'].historyitem_PivotTable_PageFilter = 50; window['AscCH'].historyitem_PivotTable_SetGridDropZones = 51; window['AscCH'].historyitem_PivotTable_WorksheetSource = 52; window['AscCH'].historyitem_PivotTable_PivotCacheId = 53; window['AscCH'].historyitem_PivotTable_PivotFieldVisible = 54; window['AscCH'].historyitem_PivotTable_UseAutoFormatting = 55; window['AscCH'].historyitem_PivotTable_HideValuesRow = 56; window['AscCH'].historyitem_PivotTable_DataFieldSetShowDataAs = 57; window['AscCH'].historyitem_PivotTable_DataFieldSetBaseField = 58; window['AscCH'].historyitem_PivotTable_DataFieldSetBaseItem = 59; window['AscCH'].historyitem_PivotTable_DataFieldSetNumFormat = 60; window['AscCH'].historyitem_PivotTable_PivotFieldSetNumFormat = 61; window['AscCH'].historyitem_PivotTable_FormatsReindex = 62; window['AscCH'].historyitem_PivotTable_FormatsRemoveField = 63; window['AscCH'].historyitem_PivotTable_FormatsAddRowField = 64; window['AscCH'].historyitem_PivotTable_FormatsAddColField = 65; window['AscCH'].historyitem_PivotTable_SetGrandTotalCaption = 66; window['AscCH'].historyitem_PivotTable_PivotFieldSetSubtotalCaption = 67; window['AscCH'].historyitem_PivotTable_SetRowHeaderCaption = 68; window['AscCH'].historyitem_PivotTable_SetColHeaderCaption = 69; window['AscCH'].historyitem_PivotTable_SetDataCaption = 70; window['AscCH'].historyitem_PivotTable_PivotFieldItemSetName = 71; window['AscCH'].historyitem_PivotTable_PivotFieldMoveItem = 72; window['AscCH'].historyitem_PivotCache_SetCalculatedItems = 1; window['AscCH'].historyitem_PivotCacheFields_SetCacheField = 1; window['AscCH'].historyitem_SharedFormula_ChangeFormula = 1; window['AscCH'].historyitem_SharedFormula_ChangeShared = 2; window['AscCH'].historyitem_Layout_Left = 1; window['AscCH'].historyitem_Layout_Right = 2; window['AscCH'].historyitem_Layout_Top = 3; window['AscCH'].historyitem_Layout_Bottom = 4; window['AscCH'].historyitem_Layout_Width = 5; window['AscCH'].historyitem_Layout_Height = 6; window['AscCH'].historyitem_Layout_FitToWidth = 7; window['AscCH'].historyitem_Layout_FitToHeight = 8; window['AscCH'].historyitem_Layout_GridLines = 9; window['AscCH'].historyitem_Layout_Headings = 10; window['AscCH'].historyitem_Layout_Orientation = 11; window['AscCH'].historyitem_Layout_Scale = 12; window['AscCH'].historyitem_Layout_FirstPageNumber = 13; window['AscCH'].historyitem_Layout_HorizontalCentered = 14; window['AscCH'].historyitem_Layout_VerticalCentered = 15; window['AscCH'].historyitem_ArrayFromula_AddFormula = 1; window['AscCH'].historyitem_ArrayFromula_DeleteFormula = 2; window['AscCH'].historyitem_Header_First = 1; window['AscCH'].historyitem_Header_Even = 2; window['AscCH'].historyitem_Header_Odd = 3; window['AscCH'].historyitem_Footer_First = 4; window['AscCH'].historyitem_Footer_Even = 5; window['AscCH'].historyitem_Footer_Odd = 6; window['AscCH'].historyitem_Align_With_Margins = 7; window['AscCH'].historyitem_Scale_With_Doc = 8; window['AscCH'].historyitem_Different_First = 9; window['AscCH'].historyitem_Different_Odd_Even = 10; window['AscCH'].historyitem_SortState_Add = 1; window['AscCH'].historyitem_Slicer_SetCaption = 1; window['AscCH'].historyitem_Slicer_SetCacheSourceName = 2; window['AscCH'].historyitem_Slicer_SetTableColName = 3; window['AscCH'].historyitem_Slicer_SetTableName = 4; window['AscCH'].historyitem_Slicer_SetCacheName = 5; window['AscCH'].historyitem_Slicer_SetName = 6; window['AscCH'].historyitem_Slicer_SetStartItem = 7; window['AscCH'].historyitem_Slicer_SetColumnCount = 8; window['AscCH'].historyitem_Slicer_SetShowCaption = 9; window['AscCH'].historyitem_Slicer_SetLevel = 10; window['AscCH'].historyitem_Slicer_SetStyle = 11; window['AscCH'].historyitem_Slicer_SetLockedPosition = 12; window['AscCH'].historyitem_Slicer_SetRowHeight = 13; window['AscCH'].historyitem_Slicer_SetCacheSortOrder = 14; window['AscCH'].historyitem_Slicer_SetCacheCustomListSort = 15; window['AscCH'].historyitem_Slicer_SetCacheCrossFilter = 16; window['AscCH'].historyitem_Slicer_SetCacheHideItemsWithNoData = 17; window['AscCH'].historyitem_Slicer_SetCacheData = 18; window['AscCH'].historyitem_Slicer_SetCacheMovePivot = 19; window['AscCH'].historyitem_Slicer_SetCacheCopySheet = 20; window['AscCH'].historyitem_NamedSheetView_SetName = 1; window['AscCH'].historyitem_NamedSheetView_DeleteFilter = 2; window['AscCH'].historyitem_CFRule_SetAboveAverage = 1; window['AscCH'].historyitem_CFRule_SetActivePresent = 2; window['AscCH'].historyitem_CFRule_SetBottom = 3; window['AscCH'].historyitem_CFRule_SetEqualAverage = 4; window['AscCH'].historyitem_CFRule_SetOperator = 5; window['AscCH'].historyitem_CFRule_SetPercent = 6; window['AscCH'].historyitem_CFRule_SetPriority = 7; window['AscCH'].historyitem_CFRule_SetRank = 8; window['AscCH'].historyitem_CFRule_SetStdDev = 9; window['AscCH'].historyitem_CFRule_SetStopIfTrue = 10; window['AscCH'].historyitem_CFRule_SetText = 11; window['AscCH'].historyitem_CFRule_SetTimePeriod = 12; window['AscCH'].historyitem_CFRule_SetType = 13; window['AscCH'].historyitem_CFRule_SetPivot = 14; window['AscCH'].historyitem_CFRule_SetTimePeriod = 15; window['AscCH'].historyitem_CFRule_SetRuleElements = 16; window['AscCH'].historyitem_CFRule_SetDxf = 17; window['AscCH'].historyitem_CFRule_SetRanges = 18; window['AscCH'].historyitem_Protected_SetSqref = 1; window['AscCH'].historyitem_Protected_SetName = 2; window['AscCH'].historyitem_Protected_SetAlgorithmName = 3; window['AscCH'].historyitem_Protected_SetHashValue = 4; window['AscCH'].historyitem_Protected_SetSaltValue = 5; window['AscCH'].historyitem_Protected_SetSpinCount = 6; window['AscCH'].historyitem_Protected_SetSheet = 7; window['AscCH'].historyitem_Protected_SetObjects = 8; window['AscCH'].historyitem_Protected_SetScenarios = 9; window['AscCH'].historyitem_Protected_SetFormatCells = 10; window['AscCH'].historyitem_Protected_SetFormatColumns = 11; window['AscCH'].historyitem_Protected_SetFormatRows = 12; window['AscCH'].historyitem_Protected_SetInsertColumns = 13; window['AscCH'].historyitem_Protected_SetInsertRows = 14; window['AscCH'].historyitem_Protected_SetInsertHyperlinks = 15; window['AscCH'].historyitem_Protected_SetDeleteColumns = 16; window['AscCH'].historyitem_Protected_SetDeleteRows = 17; window['AscCH'].historyitem_Protected_SetSelectLockedCells = 18; window['AscCH'].historyitem_Protected_SetSort = 19; window['AscCH'].historyitem_Protected_SetAutoFilter = 20; window['AscCH'].historyitem_Protected_SetPivotTables = 21; window['AscCH'].historyitem_Protected_SetSelectUnlockedCells = 22; window['AscCH'].historyitem_Protected_SetLockStructure = 23; window['AscCH'].historyitem_Protected_SetLockWindows = 24; window['AscCH'].historyitem_Protected_SetLockRevision = 25; window['AscCH'].historyitem_Protected_SetRevisionsAlgorithmName = 26; window['AscCH'].historyitem_Protected_SetRevisionsHashValue = 27; window['AscCH'].historyitem_Protected_SetRevisionsSaltValue = 28; window['AscCH'].historyitem_Protected_SetRevisionsSpinCount = 29; window['AscCH'].historyitem_Protected_SetWorkbookAlgorithmName = 30; window['AscCH'].historyitem_Protected_SetWorkbookHashValue = 31; window['AscCH'].historyitem_Protected_SetWorkbookSaltValue = 32; window['AscCH'].historyitem_Protected_SetWorkbookSpinCount = 33; window['AscCH'].historyitem_Protected_SetPassword = 34; window['AscCH'].historyitem_UserProtectedRange_Ref = 1; let CHistoryWord = AscCommon.CHistory; function CHistory(Document) { CHistoryWord.call(this, Document); this.Index = -1; this.SavedIndex = null; // Номер точки отката, на которой произошло последнее сохранение this.ForceSave = false; // Нужно сохранение, случается, когда у нас точка SavedIndex смещается из-за объединения точек, и мы делаем Undo this.RecIndex = -1; this.Points = []; this.workbook = Document; this.Document = this.workbook; this.Api = null; this.CollaborativeEditing = null; this.CanNotAddChanges = false;//флаг для отслеживания ошибок добавления изменений без точки:Create_NewPoint->Add->Save_Changes->Add //this.CollectChanges = false; //this.UndoRedoInProgress = false; // // this.RecalculateData = { // Inline : { // Pos : -1, // PageNum : 0 // }, // Flow : [], // HdrFtr : [], // Drawings : { // All : false, // Map : {}, // ThemeInfo : null, // SlideMinIdx : null // }, // Tables : [], // NumPr : [], // NotesEnd : false, // NotesEndPage : 0, // LineNumbers : false, // Update : true // }; this.TurnOffHistory = 0; this.RegisterClasses = 0; //this.MinorChanges = false; // Данный параметр нужен, чтобы определить влияют ли добавленные изменения на пересчет this.BinaryWriter = this.memory = new AscCommon.CMemory(); // this.FileCheckSum = 0; // this.FileSize = 0; // Параметры для специального сохранения для локальной версии редактора this.UserSaveMode = false; this.UserSavedIndex = null; // Номер точки, на которой произошло последнее сохранение пользователем (не автосохранение) this.StoredData = []; this.LastState = null; //todo remove all below this.Transaction = 0; this.LocalChange = false;//если true все добавленный изменения не пойдут в совместное редактирование. this.lastDrawingObjects = null; this.PosInCurPoint = null; // position to roll back changes within the current point this.oRedoObjectParam = null; } CHistory.prototype = Object.create(CHistoryWord.prototype); CHistory.prototype.init = function(workbook) { this.workbook = workbook; }; CHistory.prototype.Set_LogicDocument = function(LogicDocument) { if (!LogicDocument) return; this.workbook = this.Document = LogicDocument; this.Api = LogicDocument.Get_Api(); this.CollaborativeEditing = LogicDocument.Get_CollaborativeEditing(); }; CHistory.prototype.Is_UserSaveMode = function() { return this.UserSaveMode; }; CHistory.prototype.Is_Clear = function() { if ( this.Points.length <= 0 ) return true; return false; }; CHistory.prototype.Clear = function() { var _isClear = this.Is_Clear(); this.Index = -1; this.Points.length = 0; this.TurnOffHistory = 0; this.Transaction = 0; this.SavedIndex = null; this.ForceSave= false; this.UserSavedIndex = null; window['AscCommon'].g_specialPasteHelper.SpecialPasteButton_Hide(); this.workbook.handlers.trigger("toggleAutoCorrectOptions", null, true); //this.workbook.handlers.trigger("cleanCutData"); this._sendCanUndoRedo(); }; /** @returns {boolean} */ CHistory.prototype.Can_Undo = function() { return this.Index >= 0; }; /** @returns {boolean} */ CHistory.prototype.Can_Redo = function() { return this.Points.length > 0 && this.Index < this.Points.length - 1; }; /** @returns {boolean} */ CHistory.prototype.Undo = function(Options) { // Проверяем можно ли сделать Undo if (true !== this.Can_Undo()) { return false; } if (this.Index === this.Points.length - 1) this.LastState = this.workbook.handlers.trigger("getSelectionState"); var oRedoObjectParam = this.oRedoObjectParam = new AscCommonExcel.RedoObjectParam(); this.UndoRedoPrepare(oRedoObjectParam, true); // Откатываем все действия в обратном порядке (относительно их выполенения) var Point = null; if (undefined !== Options && null !== Options && true === Options.All) { while (this.Index >= 0) { Point = this.Points[this.Index--]; this.private_UndoPoint(Point, oRedoObjectParam); } } else { Point = this.Points[this.Index--]; this.private_UndoPoint(Point, oRedoObjectParam); } this.UndoRedoEnd(Point, oRedoObjectParam, true); return true; }; CHistory.prototype.private_UndoPoint = function(Point, oRedoObjectParam) { for ( var Index = Point.Items.length - 1; Index >= 0; Index-- ) { var Item = Point.Items[Index]; if(!Item.Class.RefreshRecalcData) Item.Class.Undo( Item.Type, Item.Data, Item.SheetId ); else { if (Item.Class) { Item.Class.Undo(); Item.Class.RefreshRecalcData(); } } this._addRedoObjectParam(oRedoObjectParam, Item); } } CHistory.prototype.UndoRedoPrepare = function (oRedoObjectParam, bUndo, bKeepTurn) { if (this.Is_On() && !bKeepTurn) { oRedoObjectParam.bIsOn = true; this.TurnOff(); } /* отключаем отрисовку на случай необходимости пересчета ячеек, заносим ячейку, при необходимости в список перерисовываемых */ this.workbook.dependencyFormulas.lockRecal(); if (bUndo) this.workbook.bUndoChanges = true; else this.workbook.bRedoChanges = true; if (!window["NATIVE_EDITOR_ENJINE"]) { if(Asc["editor"].wb) { var wsViews = Asc["editor"].wb.wsViews; for (var i = 0; i < wsViews.length; ++i) { if (wsViews[i]) { if (wsViews[i].objectRender && wsViews[i].objectRender.controller) { wsViews[i].objectRender.controller.resetSelection(undefined, true); } wsViews[i].endEditChart(); } } } } if (window["NATIVE_EDITOR_ENJINE"] || !this.workbook.oApi.isDocumentLoadComplete) { oRedoObjectParam.bChangeActive = true; } }; CHistory.prototype.RedoAdd = function(oRedoObjectParam, Class, Type, sheetid, range, Data, LocalChange, undoRedoItemSerializable) { //todo сделать что-нибудь с Is_On var bNeedOff = false; if(false == this.Is_On()) { this.TurnOn(); bNeedOff = true; } var curPoint = this.Points[this.Index]; //if(Class) this.Add(Class, Type, sheetid, range, Data, LocalChange, true); if(bNeedOff) this.TurnOff(); var bChangeActive = oRedoObjectParam.bChangeActive && (AscCommonExcel.g_oUndoRedoWorkbook === Class || (AscCommonExcel.g_oUndoRedoWorksheet === Class && AscCH.historyitem_Worksheet_Hide === Type)); if (bChangeActive && null != oRedoObjectParam.activeSheet) { //it can be delete action, so set active and get after action this.workbook.setActiveById(oRedoObjectParam.activeSheet); } // ToDo Убрать это!!! if(Class && !Class.Load) { Class.Redo( Type, Data, sheetid ); } else { if(Class && Data && !Data.isDrawingCollaborativeData){ Class.Redo(Data); } else { if(!Class){ if(Data.isDrawingCollaborativeData){ Data.oBinaryReader.Seek2(Data.nPos); var nChangesType = Data.oBinaryReader.GetLong(); var changedObject = AscCommon.g_oTableId.Get_ById(Data.sChangedObjectId); if(changedObject){ var fChangesClass = AscDFH.changesFactory[nChangesType]; if (fChangesClass){ let color = null; if (AscCommon.CollaborativeEditing.isCollaboration()) color = new CDocumentColor(255, 255, 255); var oChange = new fChangesClass(changedObject); oChange.ReadFromBinary(Data.oBinaryReader); oChange.Load(color); if (curPoint) { curPoint.Items[curPoint.Items.length - 1].Class = oChange; undoRedoItemSerializable.oClass = oChange; } } } } } } } if (curPoint) { this._addRedoObjectParam(oRedoObjectParam, curPoint.Items[curPoint.Items.length - 1]); } if (bChangeActive) { oRedoObjectParam.activeSheet = this.workbook.getActiveWs().getId(); } }; CHistory.prototype.Remove_LastPoint = function() { if (this.Index > -1) { this.Index--; this.Points.length = this.Index + 1; } }; CHistory.prototype.RemoveLastPoint = function() { this.Remove_LastPoint(); }; CHistory.prototype.Clear_Redo = function() { // Удаляем ненужные точки this.Points.length = this.Index + 1; }; CHistory.prototype.RedoExecuteItem = function(Item, oRedoObjectParam, isLoad) { if(!Item.Class.RefreshRecalcData) Item.Class.Redo( Item.Type, Item.Data, Item.SheetId ); else { if (isLoad) { Item.Class.Load(); } else { Item.Class.Redo(); } Item.Class.RefreshRecalcData(); } this._addRedoObjectParam(oRedoObjectParam, Item); } CHistory.prototype.RedoExecute = function(Point, oRedoObjectParam) { // Выполняем все действия в прямом порядке for ( var Index = 0; Index < Point.Items.length; Index++ ) { var Item = Point.Items[Index]; this.RedoExecuteItem(Item, oRedoObjectParam); } AscCommon.CollaborativeEditing.Apply_LinkData(); }; CHistory.prototype.UndoRedoEnd = function (Point, oRedoObjectParam, bUndo) { var wsViews, i, oState = null, bCoaut = false, t = this; AscCommonExcel.executeInR1C1Mode(false, function () { AscCommonExcel.lockCustomFunctionRecalculate(true, function () { t.workbook.dependencyFormulas.unlockRecal(); }); }); if (!bUndo && null == Point) { Point = this.Points[this.Index]; AscCommon.CollaborativeEditing.Apply_LinkData(); bCoaut = true; if(!AscCommon.isFileBuild()) { Asc["editor"].wb.recalculateDrawingObjects(Point, true); } } if (null != Point) { if (oRedoObjectParam.bChangeColorScheme) { t.workbook.rebuildColors(); t.workbook.oApi.asc_AfterChangeColorScheme(); } //синхронизация index и id worksheet if (oRedoObjectParam.bUpdateWorksheetByModel) this.workbook.handlers.trigger("updateWorksheetByModel"); //important after updateWorksheetByModel t.workbook.oApi.updatePivotTables(); for (i in oRedoObjectParam.onSlicerCache) { const slicers = t.workbook.getSlicersByCacheName(i); if (slicers) { for (let i = 0; i < slicers.length; i++) { oRedoObjectParam.onSlicer[slicers[i].name] = true; } } } for (i in oRedoObjectParam.onSlicer) { this.workbook.onSlicerUpdate(i); } if (!AscCommon.isRealObject(Point.SelectionState)) { Point.SelectionState = null; } if(!bCoaut) { oState = bUndo ? Point.SelectionState : ((this.Index === this.Points.length - 1) ? this.LastState : this.Points[this.Index + 1].SelectionState); if (!AscCommon.isRealObject(oState)) { oState = null; } } if (this.workbook.bCollaborativeChanges) { //active может поменяться только при remove, hide листов var ws = this.workbook.getActiveWs(); this.workbook.handlers.trigger('showWorksheet', ws.getId()); } else { // ToDo какое-то не очень решение брать 0-й элемент и у него получать индекс! var nSheetId = (null !== oState) ? oState[0].worksheetId : ((this.workbook.bRedoChanges && null != Point.RedoSheetId) ? Point.RedoSheetId : Point.UndoSheetId); if (null !== nSheetId) this.workbook.handlers.trigger('showWorksheet', nSheetId); } //changeWorksheetUpdate before cleanCellCache to call _calcHeightRows for (i in oRedoObjectParam.oChangeWorksheetUpdate) this.workbook.handlers.trigger("changeWorksheetUpdate", oRedoObjectParam.oChangeWorksheetUpdate[i],{lockDraw: true, reinitRanges: true}); for (i in Point.UpdateRigions) { //последним параметром передаю resetCache, при добавлении/удаление строк/столбцов в случая прямого действия //всегда делается cache -> reset, здесь аналогично делаю this.workbook.handlers.trigger("cleanCellCache", i, [Point.UpdateRigions[i]], null, oRedoObjectParam.bAddRemoveRowCol); var curSheet = this.workbook.getWorksheetById(i); if (curSheet) this.workbook.getWorksheetById(i).updateSlicersByRange(Point.UpdateRigions[i]); //this.workbook.oApi.onWorksheetChange(Point.UpdateRigions[i]); } // So far, the event call has been removed when undo/redo, since UpdateRigions does not always have the right range and you need to pick it up from another place // if (Point.SelectRange) { // this.workbook.oApi.onWorksheetChange(Point.SelectRange); // } // if (Point.SelectRangeRedo && (!Point.SelectRange || (Point.SelectRange && !Point.SelectRange.isEqual(Point.SelectRangeRedo)))) { // this.workbook.oApi.onWorksheetChange(Point.SelectRangeRedo); // } if (oRedoObjectParam.bOnSheetsChanged) this.workbook.handlers.trigger("asc_onSheetsChanged"); for (i in oRedoObjectParam.oOnUpdateTabColor) { var curSheet = this.workbook.getWorksheetById(i); if (curSheet) this.workbook.handlers.trigger("asc_onUpdateTabColor", curSheet.getIndex()); } if(!AscCommon.isFileBuild()) { Asc["editor"].wb.recalculateDrawingObjects(Point, false); } for (i in oRedoObjectParam.UpdateRigions) { this.workbook.handlers.trigger("cleanCellCache", i, [oRedoObjectParam.UpdateRigions[i]], null, oRedoObjectParam.bAddRemoveRowCol); var curSheet = this.workbook.getWorksheetById(i); if (curSheet) this.workbook.getWorksheetById(i).updateSlicersByRange(oRedoObjectParam.UpdateRigions[i]); //this.workbook.oApi.onWorksheetChange(Point.UpdateRigions[i]); } if (oRedoObjectParam.oOnUpdateSheetViewSettings[this.workbook.getWorksheet(this.workbook.getActive()).getId()]) this.workbook.handlers.trigger("asc_onUpdateSheetViewSettings"); this.workbook.handlers.trigger("updateCellWatches"); this._sendCanUndoRedo(); if (bUndo) this.workbook.bUndoChanges = false; else this.workbook.bRedoChanges = false; //TODO вызывать только в случае, если были изменения строк/столбцов и отдельно для строк и столбцов this.workbook.handlers.trigger("updateGroupData"); this.workbook.handlers.trigger("drawWS"); if (bUndo) { if (Point.SelectionState) { this.workbook.handlers.trigger("setSelectionState", Point.SelectionState); } else { this.workbook.handlers.trigger("setSelection", Point.SelectRange.clone()); } } else { if (null !== oState && oState[0] && oState[0].focus) { this.workbook.handlers.trigger("setSelectionState", oState); } else { var oSelectRange = null; if (null != Point.SelectRangeRedo) oSelectRange = Point.SelectRangeRedo; else if (null != Point.SelectRange) oSelectRange = Point.SelectRange; if (null != oSelectRange) this.workbook.handlers.trigger("setSelection", oSelectRange.clone()); } } if (bUndo) { if (AscCommon.isRealObject(this.lastDrawingObjects)) { this.lastDrawingObjects.sendGraphicObjectProps(); this.lastDrawingObjects = null; } } if (oRedoObjectParam.bChangeActive && null != oRedoObjectParam.activeSheet) { this.workbook.setActiveById(oRedoObjectParam.activeSheet); this.workbook.handlers.trigger("updateWorksheetByModel"); } } if(!window["NATIVE_EDITOR_ENJINE"]) { var wsView = window["Asc"]["editor"].wb.getWorksheet(); if(wsView && wsView.objectRender && wsView.objectRender.controller) { wsView.objectRender.controller.updateOverlay(); wsView.objectRender.controller.updateSelectionState(); } } if (oRedoObjectParam && oRedoObjectParam.bIsOn) this.TurnOn(); if (!bUndo) { this.workbook.handlers.trigger("updatePrintPreview"); } window['AscCommon'].g_specialPasteHelper.SpecialPasteButton_Hide(); this.workbook.handlers.trigger("toggleAutoCorrectOptions", null, true); //this.workbook.handlers.trigger("cleanCutData"); }; CHistory.prototype.Redo = function() { // Проверяем можно ли сделать Redo if ( true != this.Can_Redo() ) return; var oRedoObjectParam = new AscCommonExcel.RedoObjectParam(); this.UndoRedoPrepare(oRedoObjectParam, false); var Point = this.Points[++this.Index]; this.RedoExecute(Point, oRedoObjectParam); this.UndoRedoEnd(Point, oRedoObjectParam, false); }; CHistory.prototype._addRedoObjectParam = function (oRedoObjectParam, Point) { if (AscCommonExcel.g_oUndoRedoWorksheet === Point.Class && (AscCH.historyitem_Worksheet_SetDisplayGridlines === Point.Type || AscCH.historyitem_Worksheet_SetDisplayHeadings === Point.Type)) { oRedoObjectParam.oOnUpdateSheetViewSettings[Point.SheetId] = Point.SheetId; } else if (AscCommonExcel.g_oUndoRedoWorksheet === Point.Class && (AscCH.historyitem_Worksheet_RowProp === Point.Type || AscCH.historyitem_Worksheet_ColProp === Point.Type || AscCH.historyitem_Worksheet_RowHide === Point.Type || AscCH.historyitem_Worksheet_AddCols === Point.Type || AscCH.historyitem_Worksheet_RemoveCols === Point.Type)) oRedoObjectParam.oChangeWorksheetUpdate[Point.SheetId] = Point.SheetId; else if (AscCommonExcel.g_oUndoRedoWorkbook === Point.Class && (AscCH.historyitem_Workbook_SheetAdd === Point.Type || AscCH.historyitem_Workbook_SheetRemove === Point.Type)) { oRedoObjectParam.bUpdateWorksheetByModel = true; oRedoObjectParam.bOnSheetsChanged = true; } else if (AscCommonExcel.g_oUndoRedoWorksheet === Point.Class && (AscCH.historyitem_Worksheet_Rename === Point.Type || AscCH.historyitem_Worksheet_Hide === Point.Type)) oRedoObjectParam.bOnSheetsChanged = true; else if (AscCommonExcel.g_oUndoRedoWorksheet === Point.Class && AscCH.historyitem_Worksheet_SetTabColor === Point.Type) oRedoObjectParam.oOnUpdateTabColor[Point.SheetId] = Point.SheetId; else if (AscCommonExcel.g_oUndoRedoWorksheet === Point.Class && AscCH.historyitem_Worksheet_ChangeFrozenCell === Point.Type) oRedoObjectParam.oOnUpdateSheetViewSettings[Point.SheetId] = Point.SheetId; else if (AscCommonExcel.g_oUndoRedoWorksheet === Point.Class && (AscCH.historyitem_Worksheet_RemoveRows === Point.Type || AscCH.historyitem_Worksheet_RemoveCols === Point.Type || AscCH.historyitem_Worksheet_AddRows === Point.Type || AscCH.historyitem_Worksheet_AddCols === Point.Type)) oRedoObjectParam.bAddRemoveRowCol = true; else if(AscCommonExcel.g_oUndoRedoAutoFilters === Point.Class && AscCH.historyitem_AutoFilter_ChangeTableInfo === Point.Type) oRedoObjectParam.oChangeWorksheetUpdate[Point.SheetId] = Point.SheetId; else if(AscCommonExcel.g_oUndoRedoWorkbook === Point.Class && AscCH.historyitem_Workbook_ChangeColorScheme === Point.Type) oRedoObjectParam.bChangeColorScheme = true; else if(AscCommonExcel.g_oUndoRedoSlicer === Point.Class) { const cacheChange = AscCH.historyitem_Slicer_SetCacheSortOrder === Point.Type || AscCH.historyitem_Slicer_SetCacheCustomListSort === Point.Type || AscCH.historyitem_Slicer_SetCacheCrossFilter === Point.Type || AscCH.historyitem_Slicer_SetCacheHideItemsWithNoData === Point.Type || AscCH.historyitem_Slicer_SetCacheData === Point.Type || AscCH.historyitem_Slicer_SetCacheMovePivot === Point.Type || AscCH.historyitem_Slicer_SetCacheCopySheet === Point.Type; if (cacheChange) { oRedoObjectParam.onSlicerCache[Point.Data.name] = true; } else { oRedoObjectParam.onSlicer[Point.Data.name] = true; } } if (null != Point.SheetId) { oRedoObjectParam.activeSheet = Point.SheetId; } }; CHistory.prototype.Get_RecalcData = function(Point2) { //if ( this.Index >= 0 ) { //for ( var Pos = this.RecIndex + 1; Pos <= this.Index; Pos++ ) { // Считываем изменения, начиная с последней точки, и смотрим что надо пересчитать. var Point; if(Point2) { Point = Point2; } else { Point = this.Points[this.Index]; } if(Point) { // Выполняем все действия в прямом порядке for ( var Index = 0; Index < Point.Items.length; Index++ ) { var Item = Point.Items[Index]; if (Item.Class && Item.Class.Refresh_RecalcData ) Item.Class.Refresh_RecalcData( Item.Type ); else if (Item.Class && Item.Class.RefreshRecalcData ) Item.Class.RefreshRecalcData(); if(Item.Type === AscCH.historyitem_Workbook_ChangeColorScheme && Item.Class === AscCommonExcel.g_oUndoRedoWorkbook) { if(Asc["editor"].wb) { var wsViews = Asc["editor"].wb.wsViews; for(var i = 0; i < wsViews.length; ++i) { if(wsViews[i] && wsViews[i].objectRender && wsViews[i].objectRender.controller) { wsViews[i].objectRender.controller.RefreshAfterChangeColorScheme(); } } } } if(Item.Type === AscCH.historyitem_Worksheet_Rename) { var oWorkbook = Asc["editor"].wbModel; var oData = Item.Data; if(oWorkbook && oData) { var oWorksheet = oWorkbook.getWorksheetById(Item.SheetId); if(oWorksheet) { var oOldNameData = oWorkbook.getChartSheetRenameData(oWorksheet, oData.from); var oNewNameData = oWorkbook.getChartSheetRenameData(oWorksheet, oData.to); var oAllIdMap = {}; var nId, sKey; for(nId = 0; nId < oOldNameData.ids.length; ++nId) { oAllIdMap[oOldNameData.ids[nId]] = true; } for(nId = 0; nId < oNewNameData.ids.length; ++nId) { oAllIdMap[oNewNameData.ids[nId]] = true; } for(sKey in oAllIdMap) { var oChart = AscCommon.g_oTableId.Get_ById(sKey); if(oChart && oChart.onDataUpdateRecalc && oChart.addToRecalculate) { oChart.onDataUpdateRecalc(); oChart.addToRecalculate(); } } } } } } } } } }; CHistory.prototype.Reset_RecalcIndex = function() { this.RecIndex = this.Index; }; CHistory.prototype.Add_RecalcNumPr = function() {}; CHistory.prototype.Add_UpdateRegion = function(sheetid, range) { if(this.oRedoObjectParam) { var updateRange = this.oRedoObjectParam.UpdateRigions[sheetid]; if(null != updateRange) updateRange.union2(range); else updateRange = range.clone(); this.oRedoObjectParam.UpdateRigions[sheetid] = updateRange; } }; CHistory.prototype.Set_Additional_ExtendDocumentToPos = function() { }; CHistory.prototype.CheckUnionLastPoints = function() { // Не объединяем точки истории, если на предыдущей точке произошло сохранение if ( this.Points.length < 2) return; var Point1 = this.Points[this.Points.length - 2]; var Point2 = this.Points[this.Points.length - 1]; // Не объединяем слова больше 63 элементов if ( Point1.Items.length > 63 ) return; var PrevItem = null; var Class = null; for ( var Index = 0; Index < Point1.Items.length; Index++ ) { var Item = Point1.Items[Index]; if ( null === Class ) Class = Item.Class; else if ( Class != Item.Class || "undefined" === typeof(Class.Check_HistoryUninon) || false === Class.Check_HistoryUninon(PrevItem.Data, Item.Data) ) return; PrevItem = Item; } for ( var Index = 0; Index < Point2.Items.length; Index++ ) { var Item = Point2.Items[Index]; if ( Class != Item.Class || "undefined" === typeof(Class.Check_HistoryUninon) || false === Class.Check_HistoryUninon(PrevItem.Data, Item.Data) ) return; PrevItem = Item; } var NewPoint = { State : Point1.State, Items : Point1.Items.concat(Point2.Items), Time : Point1.Time, Additional : {} }; if ( this.SavedIndex >= this.Points.length - 2 && null !== this.SavedIndex ) this.Set_SavedIndex(this.Points.length - 3); this.Points.splice( this.Points.length - 2, 2, NewPoint ); if ( this.Index >= this.Points.length ) { var DiffIndex = -this.Index + (this.Points.length - 1); this.Index += DiffIndex; this.RecIndex += Math.max( -1, this.RecIndex + DiffIndex); } }; CHistory.prototype.Add_RecalcTableGrid = function() {}; CHistory.prototype.Create_NewPoint = function(nDescription) { if ( 0 !== this.TurnOffHistory || 0 !== this.Transaction ) return false; this.CanNotAddChanges = false; if (null !== this.SavedIndex && this.Index < this.SavedIndex) this.Set_SavedIndex(this.Index); var Items = []; var UpdateRigions = {}; var Time = new Date().getTime(); var UndoSheetId = null, oSelectionState = this.workbook.handlers.trigger("getSelectionState"); var oSelectRange = null; var wsActive = this.workbook.getActiveWs(); if (wsActive) { UndoSheetId = wsActive.getId(); // ToDo Берем всегда, т.к. в случае с LastState мы можем не попасть на нужный лист и не заселектить нужный диапазон! oSelectRange = wsActive.getSelection().getLast(); // ToDo get only last selection range } // Создаем новую точку this.Points[++this.Index] = { Items : Items, // Массив изменений, начиная с текущего момента UpdateRigions : UpdateRigions, UndoSheetId: UndoSheetId, RedoSheetId: null, SelectRange : oSelectRange, SelectRangeRedo : oSelectRange, Time : Time, // Текущее время SelectionState : oSelectionState, Description : nDescription }; // Удаляем ненужные точки this.Points.length = this.Index + 1; window['AscCommon'].g_specialPasteHelper.SpecialPasteButton_Hide(); this.workbook.handlers.trigger("toggleAutoCorrectOptions", null, true); let oAPI = this.workbook && this.workbook.oApi; if(oAPI) { if(oAPI.isEyedropperStarted()) { oAPI.cancelEyedropper(); } if (oAPI.isInkDrawerOn()) { oAPI.stopInkDrawer(); } } //this.workbook.handlers.trigger("cleanCutData"); this.Add(AscCommonExcel.g_oUndoRedoCell, AscCH.historyitem_Unknown, null, null, new AscDFH.CChangesPointChange(AscCommonExcel.g_oUndoRedoCell, this.Points[this.Index], this.workbook._getSnapshot()), false); return true; }; /** * Специальная функция, для создания точки, чтобы отловить все изменения, которые происходят. После использования * данная точка ДОЛЖНА быть удалена через функцию Remove_LastPoint. * @param {number} description - идентификатор действия */ CHistory.prototype.CreateNewPointToCollectChanges = function(description) { // Создаем новую точку this.Points[++this.Index] = { Items : [], // Массив изменений, начиная с текущего момента UpdateRigions : {}, UndoSheetId: null, RedoSheetId: null, SelectRange : null, SelectRangeRedo : null, Time : null, // Текущее время SelectionState : null }; this.Points.length = this.Index + 1; this.CollectChanges = true; return this.Index; }; // Регистрируем новое изменение: // Class - объект, в котором оно произошло // Data - сами изменения CHistory.prototype.Add = function(Class, Type, sheetid, range, Data, LocalChange, isRedoAdd) { if (!this.CanAddChanges()) return; if (Class instanceof AscCommonExcel.UndoRedoItemSerializable) { let serializable = Class; Class = serializable.oClass; Type = serializable.nActionType; sheetid = serializable.nSheetId; range = serializable.oRange; Data = serializable.oData; LocalChange = serializable.LocalChange; } this._CheckCanNotAddChanges(); if ( this.RecIndex >= this.Index ) this.RecIndex = this.Index - 1; if (Class && Class.SetIsRecalculated && (!Class || (Class.IsNeedRecalculate && Class.IsNeedRecalculate()))) Class.SetIsRecalculated(false); var Item = { Class : Class, Type : Type, SheetId : sheetid, Range : null, Data : Data, LocalChange: this.LocalChange, Binary : { Pos : 0, Len : 0 }, NeedRecalc : !this.MinorChanges && (!Class || Class.IsNeedRecalculate() || Class.IsNeedRecalculateLineNumbers()) }; if(null != range) Item.Range = range.clone(); if(null != LocalChange) Item.LocalChange = LocalChange; if (!isRedoAdd) { this.Refresh_SpreadsheetChanges(Item); } var curPoint = this.Points[this.Index]; curPoint.Items.push( Item ); if (null != range && null != sheetid) { var updateRange = curPoint.UpdateRigions[sheetid]; if(null != updateRange) updateRange.union2(range); else updateRange = range.clone(); curPoint.UpdateRigions[sheetid] = updateRange; } if (null != sheetid) curPoint.UndoSheetId = sheetid; if((1 === curPoint.Items.length && curPoint.Items[0].Type !== AscCH.historyitem_Unknown) || 2 === curPoint.Items.length) this._sendCanUndoRedo(); if (!this.CollaborativeEditing) return; if (Class) { if (Class.IsContentChange && Class.IsContentChange()) { var bAdd = Class.IsAdd(); var Count = Class.GetItemsCount(); var ContentChanges = new AscCommon.CContentChangesElement(bAdd == true ? AscCommon.contentchanges_Add : AscCommon.contentchanges_Remove, Class.Pos, Count, Class); Class.Class.Add_ContentChanges(ContentChanges); AscCommon.CollaborativeEditing.Add_NewDC(Class.Class); if (true === bAdd) AscCommon.CollaborativeEditing.Update_DocumentPositionsOnAdd(Class.Class, Class.Pos); else AscCommon.CollaborativeEditing.Update_DocumentPositionsOnRemove(Class.Class, Class.Pos, Count); } if(Class.IsPosExtChange && Class.IsPosExtChange()){ this.CollaborativeEditing.AddPosExtChanges(Item, Class); } } }; CHistory.prototype.Item_ToSerializable = function(item) { return new AscCommonExcel.UndoRedoItemSerializable(item.Class, item.Type, item.SheetId, item.Range, item.Data, item.LocalChange); } CHistory.prototype.Refresh_SpreadsheetChanges = function(item) { if (!this.workbook) { return; } let serializable = this.Item_ToSerializable(item); let Binary_Pos = this.BinaryWriter.GetCurPosition(); this.workbook._SerializeHistoryItem2(this.BinaryWriter, serializable); let Binary_Len = this.BinaryWriter.GetCurPosition() - Binary_Pos; item.Binary.Pos = Binary_Pos item.Binary.Len = Binary_Len } CHistory.prototype.CanAddChanges = function() { return (0 === this.TurnOffHistory && this.Index >= 0); }; CHistory.prototype._sendCanUndoRedo = function() { if (this.Api && this.Api.wb) { this.Api.wb.Document_UpdateUndoRedoState(); } }; CHistory.prototype.SetSelection = function(range) { if ( 0 !== this.TurnOffHistory ) return; var curPoint = this.Points[this.Index]; if (curPoint) { curPoint.SelectRange = range; } }; CHistory.prototype.SetSelectionRedo = function(range) { if ( 0 !== this.TurnOffHistory ) return; var curPoint = this.Points[this.Index]; if (curPoint) { curPoint.SelectRangeRedo = range; } }; CHistory.prototype.GetSelection = function() { var oRes = null; var curPoint = this.Points[this.Index]; if(curPoint) oRes = curPoint.SelectRange; return oRes; }; CHistory.prototype.GetSelectionRedo = function() { var oRes = null; var curPoint = this.Points[this.Index]; if (curPoint) { oRes = curPoint.SelectRangeRedo; } return oRes; }; CHistory.prototype.SetSheetRedo = function (sheetId) { if (0 !== this.TurnOffHistory) return; var curPoint = this.Points[this.Index]; if (curPoint) { curPoint.RedoSheetId = sheetId; } }; CHistory.prototype.SetSheetUndo = function (sheetId) { if (0 !== this.TurnOffHistory) return; var curPoint = this.Points[this.Index]; if (curPoint) { curPoint.UndoSheetId = sheetId; } }; CHistory.prototype.TurnOff = function() { this.TurnOffHistory++; }; CHistory.prototype.TurnOn = function() { this.TurnOffHistory--; if(this.TurnOffHistory < 0) this.TurnOffHistory = 0; }; CHistory.prototype.CanRegisterClasses = function() { return (0 === this.TurnOffHistory || this.RegisterClasses >= this.TurnOffHistory); }; CHistory.prototype.TurnOffChanges = function() { this.TurnOffHistory++; this.RegisterClasses++; }; CHistory.prototype.TurnOnChanges = function() { this.TurnOffHistory--; if(this.TurnOffHistory < 0) this.TurnOffHistory = 0; this.RegisterClasses--; if (this.RegisterClasses < 0) this.RegisterClasses = 0; }; CHistory.prototype.StartTransaction = function() { if (this.IsEndTransaction() && this.workbook) { this.workbook.dependencyFormulas.lockRecal(); this.workbook.oApi.sendEvent("asc_onUserActionStart"); } this.Transaction++; }; CHistory.prototype.EndTransaction = function(checkLockLastAction) { let t = this; let doEndTransaction = function (skipRecal) { if (1 === t.Transaction && !t.Is_LastPointEmpty()) { var api = t.workbook && t.workbook.oApi; var wsView = api && api.wb && api.wb.getWorksheet(); if (wsView) { wsView.updateTopLeftCell(); } t.workbook && t.workbook.handlers.trigger("EndTransactionCheckSize"); } t.Transaction--; if(t.Transaction < 0) t.Transaction = 0; if (t.IsEndTransaction() && t.workbook) { if (!skipRecal && AscCommonExcel.g_cCalcRecursion) { AscCommonExcel.g_cCalcRecursion.setIsCellEdited(true); } !skipRecal && t.workbook.dependencyFormulas.unlockRecal(); t.workbook.handlers.trigger("updateCellWatches"); t.workbook.oApi.sendEvent("asc_onUserActionEnd"); if (t.Is_LastPointEmpty()) { t.Remove_LastPoint(); } else if (checkLockLastAction && t.isActionLock()) { t.Undo(); } } } //for custom function - add value in history if (1 === this.Transaction) { if (AscCommonExcel.g_cCalcRecursion) { AscCommonExcel.g_cCalcRecursion.setIsCellEdited(true); } this.workbook.dependencyFormulas.unlockRecal(null, function () { doEndTransaction(true); }); } else { doEndTransaction(); } }; /** @returns {boolean} */ CHistory.prototype.IsEndTransaction = function() { return (0 === this.Transaction); }; /** @returns {boolean} */ CHistory.prototype.Is_On = function() { return (0 === this.TurnOffHistory); }; /** @returns {boolean} */ CHistory.prototype.IsOn = function() { return (0 === this.TurnOffHistory); }; CHistory.prototype.Reset_SavedIndex = function(IsUserSave) { this.SavedIndex = (null === this.SavedIndex && -1 === this.Index ? null : this.Index); if (this.Is_UserSaveMode()) { if (IsUserSave) { this.UserSavedIndex = this.Index; this.ForceSave = false; } } else { this.ForceSave = false; } }; CHistory.prototype.Set_SavedIndex = function(Index) { this.SavedIndex = Index; if (this.Is_UserSaveMode()) { if (null !== this.UserSavedIndex && this.UserSavedIndex > this.SavedIndex) { this.UserSavedIndex = Index; this.ForceSave = true; } } else { this.ForceSave = true; } }; /** @returns {number|null} */ CHistory.prototype.GetDeleteIndex = function() { var DeletePointIndex = this.GetDeletePointIndex(); if (null === DeletePointIndex) return null; var DeleteIndex = 0; for (var i = 0; i < DeletePointIndex; ++i) { var point = this.Points[i]; for (var j = 0; j < point.Items.length; ++j) { if (!point.Items[j].LocalChange) {//LocalChange изменения не пойдут в совместное редактирование. DeleteIndex += 1; } } } return DeleteIndex; }; CHistory.prototype.GetDeletePointIndex = function() { return null !== this.SavedIndex ? Math.min(this.SavedIndex + 1, this.Index + 1) : null; }; /** @returns {boolean} */ CHistory.prototype.Have_Changes = function(IsNotUserSave) { var checkIndex = (this.Is_UserSaveMode() && !IsNotUserSave) ? this.UserSavedIndex : this.SavedIndex; if (-1 === this.Index && null === checkIndex && false === this.ForceSave) { return false; } return (this.Index != checkIndex || true === this.ForceSave); }; CHistory.prototype.GetSerializeArray = function() { //todo избавиться от GetSerializeArray. ходить по массиву var aRes = []; var i = 0; if (null != this.SavedIndex) i = this.SavedIndex + 1; for(; i <= this.Index; ++i) { var point = this.Points[i]; var aPointChanges = []; for(var j = 0, length2 = point.Items.length; j < length2; ++j) { aPointChanges.push(point.Items[j]); } aRes.push(aPointChanges); } return aRes; }; CHistory.prototype.GetLocalChangesSize = function() { function GetBase64Size(binarySize) { // Бинарник пишется Binary.Len + ";" + base64Encode(Binary.Data) return ((binarySize + ";").length + (((4 * binarySize / 3) + 3) & ~3)); } let res = 0; var i = 0; if (null != this.SavedIndex) { i = this.SavedIndex + 1; } for (; i <= this.Index; ++i) { var point = this.Points[i]; for (var j = 0, length2 = point.Items.length; j < length2; ++j) { let item = point.Items[j]; res += GetBase64Size(item.Binary.Len); } } return res; }; CHistory.prototype._CheckCanNotAddChanges = function() { try { if (this.CanNotAddChanges && !this.CollectChanges) { this.CanNotAddChanges = false; var tmpErr = new Error(); if (tmpErr.stack) { AscCommon.sendClientLog("error", "changesError: " + tmpErr.stack, this.workbook.oApi); } } } catch (e) { } }; /** * Удаляем изменения из истории, которые сохранены на сервере. Это происходит при подключении второго пользователя */ CHistory.prototype.RemovePointsByDeleteIndex = function() { var DeletePointIndex = this.GetDeletePointIndex(); if (null === DeletePointIndex) return; this.Points.splice(0, DeletePointIndex); this.Index = Math.max(this.Index - DeletePointIndex, -1); this.RecIndex = Math.max(this.RecIndex - DeletePointIndex, -1); if (null !== this.SavedIndex) { this.SavedIndex = this.SavedIndex - DeletePointIndex; if (this.SavedIndex < 0) { this.SavedIndex = null; } } }; CHistory.prototype.SavePointIndex = function() { var oPoint = this.Points[this.Index]; if(oPoint) { this.PosInCurPoint = oPoint.Items.length; } else { this.PosInCurPoint = null; } }; CHistory.prototype.ClearPointIndex = function() { this.PosInCurPoint = null; }; CHistory.prototype.UndoToPointIndex = function() { var oPoint = this.Points[this.Index]; if(oPoint) { if(this.PosInCurPoint !== null) { for ( var Index = oPoint.Items.length - 1; Index >= this.PosInCurPoint; Index-- ) { var Item = oPoint.Items[Index]; if(!Item.Class.RefreshRecalcData) Item.Class.Undo( Item.Type, Item.Data, Item.SheetId ); else { if (Item.Class) { Item.Class.Undo(); Item.Class.RefreshRecalcData(); } } } oPoint.Items.splice(this.PosInCurPoint); } } this.PosInCurPoint = null; }; CHistory.prototype.Is_LastPointEmpty = function() { if (!this.Points[this.Index] || this.Points[this.Index].Items.length <= 0 || (this.Points[this.Index].Items.length === 1 && this.Points[this.Index].Items[0].Type === AscCH.historyitem_Unknown)) { return true; } return false; }; CHistory.prototype.isActionLock = function() { let wb = this.workbook && this.workbook.oApi && this.workbook.oApi.wb; if (wb && !wb.canEdit()) { return true; } return false; }; CHistory.prototype.Get_DocumentPositionBinary = function() { let wb = this.workbook && this.workbook.oApi && this.workbook.oApi.wb; if (wb) { var PosInfo = wb.Get_DocumentPositionInfoForCollaborative(); return AscCommon.CollaborativeEditing.GetDocumentPositionBinary(this.BinaryWriter, PosInfo); } return false; }; CHistory.prototype.checkAsYouTypeEnterText = function(run, inRunPos, codePoint) { this.CheckUnionLastPoints(); if (this.Points.length <= 0 || this.Index !== this.Points.length - 1) return false; let point = this.Points[this.Index]; let description = point.Description; if (AscDFH.historydescription_Document_AddLetter !== description && AscDFH.historydescription_Document_AddLetterUnion !== description && AscDFH.historydescription_Document_SpaceButton !== description && AscDFH.historydescription_Document_CorrectEnterText !== description && AscDFH.historydescription_Document_CompositeInput !== description && AscDFH.historydescription_Document_CompositeInputReplace !== description && AscDFH.historydescription_Presentation_ParagraphAdd !== description) return false; let changes = point.Items; let lastChange = null; for (let i = changes.length - 1; i >= 0; --i) { lastChange = changes[i].Class; if (lastChange && lastChange.IsContentChange && lastChange.IsContentChange()) break; } return (lastChange && AscDFH.historyitem_ParaRun_AddItem === lastChange.Type && lastChange.Class === run && lastChange.Pos === inRunPos - 1 && lastChange.Items.length && (undefined === codePoint || lastChange.Items[0].GetCodePoint() === codePoint)); }; CHistory.prototype.Update_PointInfoItem = function() { }; CHistory.prototype.ConvertPointItemsToSimpleChanges = function(pointIndex) { } CHistory.prototype.cancelGroupPoints = function() { let startIndex = this._getLongPointIndex(); if (-1 === startIndex) return; var oRedoObjectParam = this.oRedoObjectParam = new AscCommonExcel.RedoObjectParam(); let point; for (let i = this.Index; i >= startIndex; --i) { point = this.Points[i]; this.private_UndoPoint(point, oRedoObjectParam); } if (AscCommon.isRealObject(point.SelectionState)) { this.workbook.handlers.trigger("setSelectionState", point.SelectionState); } if (!window['AscCommon'].g_specialPasteHelper.specialPasteStart) window['AscCommon'].g_specialPasteHelper.SpecialPasteButton_Hide(true); this.Points.length = startIndex + 1; this.Index = startIndex - 1; return oRedoObjectParam; }; CHistory.prototype.endGroupPoints = function() { this.Points.length = this.Index + 1; let startIndex = this._getLongPointIndex(); if (-1 === startIndex) return; let point = this.Points[startIndex]; point.Description = AscDFH.historydescription_GroupPoints; for (let i = startIndex + 1; i < this.Points.length; ++i) { let currentPoint = this.Points[i]; point.Items = point.Items.concat(currentPoint.Items); for (let sheetId in currentPoint.UpdateRigions) { let currentRange = currentPoint.UpdateRigions[sheetId]; let existingRange = point.UpdateRigions[sheetId]; if (existingRange) { existingRange.union2(currentRange); } else { point.UpdateRigions[sheetId] = currentRange.clone(); } } } this.Points.length = startIndex + 1; this.Index = startIndex; }; //------------------------------------------------------------export-------------------------------------------------- window['AscCommon'] = window['AscCommon'] || {}; window['AscCommon'].CHistory = CHistory; window['AscCommon'].History = new CHistory(); })(window);