diff --git a/Makefile b/Makefile index ec7c622a99..06993497e0 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ BUILD_NUMBER ?= 0 PUBLISHER_NAME ?= Ascensio System SIA -APP_COPYRIGHT ?= Copyright (C) $(subst ",\",$(PUBLISHER_NAME)) 2012-$(shell date +%Y). All rights reserved +APP_COPYRIGHT ?= Copyright (C) $(PUBLISHER_NAME) 2012-$(shell date +%Y). All rights reserved PUBLISHER_URL ?= https://www.onlyoffice.com/ diff --git a/cell/Local/api.js b/cell/Local/api.js index d41415276c..a3dc195091 100644 --- a/cell/Local/api.js +++ b/cell/Local/api.js @@ -92,8 +92,6 @@ var c_oAscError = Asc.c_oAscError; }; spreadsheet_api.prototype.asc_addImageDrawingObject = function(url) { - var _url = window["AscDesktopEditor"]["LocalFileGetImageUrl"](url); - var ws = this.wb.getWorksheet(); if (ws) { @@ -147,7 +145,7 @@ var c_oAscError = Asc.c_oAscError; } } }; - spreadsheet_api.prototype.asc_Save = function (isNoUserSave, isSaveAs) + spreadsheet_api.prototype.asc_Save = function (isNoUserSave, isSaveAs, isResaveAttack) { if (this.isChartEditor || AscCommon.c_oAscAdvancedOptionsAction.None !== this.advancedOptionsAction) return; @@ -281,6 +279,11 @@ var c_oAscError = Asc.c_oAscError; { if (window.g_asc_plugins && window.g_asc_plugins.isRunnedEncryption()) { + asc["editor"]._callbackPluginEndAction = function() + { + this._callbackPluginEndAction = null; + window["AscDesktopEditor"]["buildCryptedEnd"](true); + }; window.g_asc_plugins.sendToEncryption({"type": "setPasswordByFile", "hash": hash, "password": password}); } } diff --git a/cell/api.js b/cell/api.js index facb93e485..add9665f56 100644 --- a/cell/api.js +++ b/cell/api.js @@ -755,7 +755,8 @@ var editor; var t = this; AscCommon.openFileCommand(data, this.documentUrlChanges, AscCommon.c_oSerFormat.Signature, function(error, result) { if (error || !result.bSerFormat) { - var oError = {returnCode: c_oAscError.Level.Critical, val: c_oAscError.ID.Unknown}; + var err = error ? c_oAscError.ID.Unknown : c_oAscError.ID.ConvertationOpenError; + var oError = {returnCode: c_oAscError.Level.Critical, val: err}; t.handlers.trigger("asc_onError", oError.val, oError.returnCode); return; } @@ -1420,7 +1421,7 @@ var editor; }; }; - spreadsheet_api.prototype._onSaveChanges = function(recalcIndexColumns, recalcIndexRows) { + spreadsheet_api.prototype._onSaveChanges = function(recalcIndexColumns, recalcIndexRows, isAfterAskSave) { if (this.isDocumentLoadComplete) { var arrChanges = this.wbModel.SerializeHistory(); var deleteIndex = History.GetDeleteIndex(); @@ -1436,7 +1437,7 @@ var editor; this.CoAuthoringApi.saveChanges(arrChanges, deleteIndex, excelAdditionalInfo, this.canUnlockDocument2, bCollaborative); History.CanNotAddChanges = true; } else { - this.CoAuthoringApi.unLockDocument(true, this.canUnlockDocument2, null, bCollaborative); + this.CoAuthoringApi.unLockDocument(!!isAfterAskSave, this.canUnlockDocument2, null, bCollaborative); } this.canUnlockDocument2 = false; } @@ -1623,9 +1624,11 @@ var editor; return; } - if (AscCommon.EncryptionWorker && !AscCommon.EncryptionWorker.isChangesHandled) + if (AscCommon.EncryptionWorker) { - return AscCommon.EncryptionWorker.handleChanges(this.collaborativeEditing.m_arrChanges, this, this._openDocumentEndCallback); + AscCommon.EncryptionWorker.init(); + if (!AscCommon.EncryptionWorker.isChangesHandled) + return AscCommon.EncryptionWorker.handleChanges(this.collaborativeEditing.m_arrChanges, this, this._openDocumentEndCallback); } if (0 === this.wbModel.getWorksheetCount()) { @@ -1754,7 +1757,7 @@ var editor; } }; // Пересылаем свои изменения - this.collaborativeEditing.sendChanges(this.IsUserSave); + this.collaborativeEditing.sendChanges(this.IsUserSave, true); }; // Залочена ли панель для закрепления @@ -2251,6 +2254,14 @@ var editor; return result; }; + spreadsheet_api.prototype.asc_setR1C1Mode = function (value) { + AscCommonExcel.g_R1C1Mode = value; + if (this.wbModel) { + this._onUpdateAfterApplyChanges(); + this.wb._onUpdateSelectionName(true); + } + }; + // Spreadsheet interface @@ -3635,6 +3646,8 @@ var editor; prot["asc_findCell"] = prot.asc_findCell; prot["asc_closeCellEditor"] = prot.asc_closeCellEditor; + prot["asc_setR1C1Mode"] = prot.asc_setR1C1Mode; + // Spreadsheet interface prot["asc_getColumnWidth"] = prot.asc_getColumnWidth; diff --git a/cell/apiBuilder.js b/cell/apiBuilder.js index d8314347be..c92cfd7835 100644 --- a/cell/apiBuilder.js +++ b/cell/apiBuilder.js @@ -1658,6 +1658,24 @@ } }; + /** + * Adds a comment to the range. + * @typeofeditors ["CSE"] + * @memberof ApiRange + * @param {string} text - The comment text. + */ + ApiRange.prototype.AddComment = function (text) { + var ws = Asc['editor'].wb.getWorksheet(this.range.getWorksheet().getIndex()); + if (ws) { + var comment = new Asc.asc_CCommentData(); + comment.sText = text; + comment.nCol = this.range.bbox.c1; + comment.nRow = this.range.bbox.r1; + comment.bDocument = false; + ws.cellCommentator.addComment(comment, true); + } + }; + //------------------------------------------------------------------------------------------------------------------ // // ApiDrawing @@ -2132,6 +2150,7 @@ ApiRange.prototype["Merge"] = ApiRange.prototype.Merge; ApiRange.prototype["UnMerge"] = ApiRange.prototype.UnMerge; ApiRange.prototype["ForEach"] = ApiRange.prototype.ForEach; + ApiRange.prototype["AddComment"] = ApiRange.prototype.AddComment; ApiDrawing.prototype["GetClassType"] = ApiDrawing.prototype.GetClassType; diff --git a/cell/model/CellComment.js b/cell/model/CellComment.js index 40788f2b64..c43cb26b4d 100644 --- a/cell/model/CellComment.js +++ b/cell/model/CellComment.js @@ -221,7 +221,8 @@ function (window, undefined) { asc_CCommentData.prototype.asc_putQuoteText = function(val) {}; asc_CCommentData.prototype.asc_getQuoteText = function() { - return this.bDocument ? null : AscCommon.g_oCellAddressUtils.getCellId(this.nRow, this.nCol); + return this.bDocument ? null : (new Asc.Range(this.nCol, this.nRow, this.nCol, this.nRow)).getName( + AscCommonExcel.g_R1C1Mode ? AscCommonExcel.referenceType.A : AscCommonExcel.referenceType.R); }; asc_CCommentData.prototype.asc_putRow = function(val) { this.nRow = val; }; diff --git a/cell/model/CellInfo.js b/cell/model/CellInfo.js index 0f2f3d798d..13c8a6d9a5 100644 --- a/cell/model/CellInfo.js +++ b/cell/model/CellInfo.js @@ -273,7 +273,6 @@ /** @constructor */ function asc_CCellInfo() { - this.name = null; this.formula = ""; this.text = ""; this.halign = "left"; @@ -299,9 +298,6 @@ this.pivotTableInfo = null; } - asc_CCellInfo.prototype.asc_getName = function () { - return this.name; - }; asc_CCellInfo.prototype.asc_getFormula = function () { return this.formula; }; diff --git a/cell/model/CollaborativeEditing.js b/cell/model/CollaborativeEditing.js index 9c294554a7..09816d80a7 100644 --- a/cell/model/CollaborativeEditing.js +++ b/cell/model/CollaborativeEditing.js @@ -277,7 +277,7 @@ return true; }; - CCollaborativeEditing.prototype.sendChanges = function (IsUserSave) { + CCollaborativeEditing.prototype.sendChanges = function (IsUserSave, isAfterAskSave) { // Когда не совместное редактирование чистить ничего не нужно, но отправлять нужно. var bIsCollaborative = this.getCollaborativeEditing(); @@ -331,7 +331,7 @@ } // Отправляем на сервер изменения - this.handlers.trigger("sendChanges", this.getRecalcIndexSave(this.m_oRecalcIndexColumns), this.getRecalcIndexSave(this.m_oRecalcIndexRows)); + this.handlers.trigger("sendChanges", this.getRecalcIndexSave(this.m_oRecalcIndexColumns), this.getRecalcIndexSave(this.m_oRecalcIndexRows), isAfterAskSave); if (bIsCollaborative) { // Пересчитываем lock-и от чужих пользователей diff --git a/cell/model/FormulaObjects/lookupandreferenceFunctions.js b/cell/model/FormulaObjects/lookupandreferenceFunctions.js index 1bb7c832c0..d926468b67 100644 --- a/cell/model/FormulaObjects/lookupandreferenceFunctions.js +++ b/cell/model/FormulaObjects/lookupandreferenceFunctions.js @@ -538,18 +538,18 @@ function (window, undefined) { return new cError(cErrorType.bad_reference); } if (parserHelp.isArea.call(o, o.Formula, o.pCurrPos)) { - found_operand = new cArea3D(o.operand_str.toUpperCase(), wsFrom, wsTo); + found_operand = new cArea3D(o.real_str ? o.real_str.toUpperCase() : o.operand_str.toUpperCase(), wsFrom, wsTo); } else if (parserHelp.isRef.call(o, o.Formula, o.pCurrPos)) { if (wsTo !== wsFrom) { - found_operand = new cArea3D(o.operand_str.toUpperCase(), wsFrom, wsTo); + found_operand = new cArea3D(o.real_str ? o.real_str.toUpperCase() : o.operand_str.toUpperCase(), wsFrom, wsTo); } else { - found_operand = new cRef3D(o.operand_str.toUpperCase(), wsFrom); + found_operand = new cRef3D(o.real_str ? o.real_str.toUpperCase() : o.operand_str.toUpperCase(), wsFrom); } } } else if (parserHelp.isArea.call(o, o.Formula, o.pCurrPos)) { - found_operand = new cArea(o.operand_str.toUpperCase(), ws); + found_operand = new cArea(o.real_str ? o.real_str.toUpperCase() : o.operand_str.toUpperCase(), ws); } else if (parserHelp.isRef.call(o, o.Formula, o.pCurrPos, true)) { - found_operand = new cRef(o.operand_str.toUpperCase(), ws); + found_operand = new cRef(o.real_str ? o.real_str.toUpperCase() : o.operand_str.toUpperCase(), ws); } else if (parserHelp.isName.call(o, o.Formula, o.pCurrPos, wb)[0]) { found_operand = new AscCommonExcel.cName(o.operand_str, ws); } @@ -559,7 +559,7 @@ function (window, undefined) { ret = new cArray(); arg0.foreach(function (elem, r) { o = {Formula: elem.toString(), pCurrPos: 0}; - parseReference(); + AscCommonExcel.executeInR1C1Mode(!!(arg1 && arg1.value === false), parseReference); if (!ret.array[r]) { ret.addRow(); } @@ -568,7 +568,7 @@ function (window, undefined) { return ret; } else { o.Formula = arg0.toString(); - parseReference(); + AscCommonExcel.executeInR1C1Mode(!!(arg1 && arg1.value === false), parseReference); if (found_operand) { if (cElementType.name === found_operand.type) { found_operand = found_operand.toRef(arguments[1]); diff --git a/cell/model/FormulaObjects/parserFormula.js b/cell/model/FormulaObjects/parserFormula.js index 462076e6d3..d748e5a622 100644 --- a/cell/model/FormulaObjects/parserFormula.js +++ b/cell/model/FormulaObjects/parserFormula.js @@ -757,6 +757,22 @@ parserHelp.setDigitSeparator(AscCommon.g_oDefaultCultureInfo.NumberDecimalSepara cBaseType.prototype.toLocaleString = function () { return this.toString(); }; + cBaseType.prototype.toLocaleStringObj = function () { + var localStr = this.toLocaleString(); + var localStrWithoutSheet; + if(localStr) { + var result = parserHelp.parse3DRef(localStr); + if (result) { + localStrWithoutSheet = result.range; + } else { + localStrWithoutSheet = localStr; + } + } else { + localStr = this.value; + localStrWithoutSheet = this.value; + } + return [localStr, localStrWithoutSheet]; + }; /*Basic types of an elements used into formulas*/ /** @@ -1121,7 +1137,10 @@ parserHelp.setDigitSeparator(AscCommon.g_oDefaultCultureInfo.NumberDecimalSepara this.ws = ws; this.range = null; if (val) { - this.range = ws.getRange2(val); + AscCommonExcel.executeInR1C1Mode(false, function () { + val = ws.getRange2(val); + }); + this.range = val; } } @@ -1194,6 +1213,20 @@ parserHelp.setDigitSeparator(AscCommon.g_oDefaultCultureInfo.NumberDecimalSepara cArea.prototype.toString = function () { var _c; + if (AscCommonExcel.g_ProcessShared && this.range) { + _c = this.range.getName(); + } else { + _c = this.value; + } + + if (_c.indexOf(":") < 0) { + _c = _c + ":" + _c; + } + return _c; + }; + cArea.prototype.toLocaleString = function () { + var _c; + if (this.range) { _c = this.range.getName(); } else { @@ -1306,6 +1339,14 @@ parserHelp.setDigitSeparator(AscCommon.g_oDefaultCultureInfo.NumberDecimalSepara return new cError(cErrorType.bad_reference); } }; + cArea.prototype.changeSheet = function (wsLast, wsNew) { + if (this.ws === wsLast) { + this.ws = wsNew; + if (this.range) { + this.range.worksheet = wsNew; + } + } + }; /** * @constructor @@ -1316,9 +1357,11 @@ parserHelp.setDigitSeparator(AscCommon.g_oDefaultCultureInfo.NumberDecimalSepara this.bbox = null; if (val) { - var bbox = AscCommonExcel.g_oRangeCache.getAscRange(val); - if (null != bbox) { - this.bbox = bbox.clone(); + AscCommonExcel.executeInR1C1Mode(false, function () { + val = AscCommonExcel.g_oRangeCache.getAscRange(val); + }); + if (val) { + this.bbox = val.clone(); } } this.wsFrom = wsFrom; @@ -1440,6 +1483,12 @@ parserHelp.setDigitSeparator(AscCommon.g_oDefaultCultureInfo.NumberDecimalSepara } }; cArea3D.prototype.toString = function () { + var wsFrom = this.wsFrom.getName(); + var wsTo = this.wsTo.getName(); + var name = AscCommonExcel.g_ProcessShared && this.bbox ? this.bbox.getName() : this.value; + return parserHelp.get3DRef(wsFrom !== wsTo ? wsFrom + ':' + wsTo : wsFrom, name); + }; + cArea3D.prototype.toLocaleString = function () { var wsFrom = this.wsFrom.getName(); var wsTo = this.wsTo.getName(); var name = this.bbox ? this.bbox.getName() : this.value; @@ -1600,7 +1649,10 @@ parserHelp.setDigitSeparator(AscCommon.g_oDefaultCultureInfo.NumberDecimalSepara this.ws = ws; this.range = null; if (val) { - this.range = ws.getRange2(val.replace(AscCommon.rx_space_g, "")); + AscCommonExcel.executeInR1C1Mode(false, function () { + val = ws.getRange2(val.replace(AscCommon.rx_space_g, "")); + }); + this.range = val; } } @@ -1643,9 +1695,12 @@ parserHelp.setDigitSeparator(AscCommon.g_oDefaultCultureInfo.NumberDecimalSepara if (AscCommonExcel.g_ProcessShared) { return this.range.getName(); } else { - return this.value; + return this.value; } }; + cRef.prototype.toLocaleString = function () { + return this.range.getName(); + }; cRef.prototype.getRange = function () { return this.range; }; @@ -1667,6 +1722,14 @@ parserHelp.setDigitSeparator(AscCommon.g_oDefaultCultureInfo.NumberDecimalSepara } return excludeHiddenRows && this.isValid() && this.ws.getRowHidden(this.getRange().r1); }; + cRef.prototype.changeSheet = function (wsLast, wsNew) { + if (this.ws === wsLast) { + this.ws = wsNew; + if (this.range) { + this.range.worksheet = wsNew; + } + } + }; /** * @constructor @@ -1678,7 +1741,10 @@ parserHelp.setDigitSeparator(AscCommon.g_oDefaultCultureInfo.NumberDecimalSepara this.ws = ws; this.range = null; if (val && this.ws) { - this.range = this.ws.getRange2(val); + AscCommonExcel.executeInR1C1Mode(false, function () { + val = ws.getRange2(val); + }); + this.range = val; } } @@ -1738,15 +1804,21 @@ parserHelp.setDigitSeparator(AscCommon.g_oDefaultCultureInfo.NumberDecimalSepara cRef3D.prototype.changeSheet = function (wsLast, wsNew) { if (this.ws === wsLast) { this.ws = wsNew; + if (this.range) { + this.range.worksheet = wsNew; + } } }; cRef3D.prototype.toString = function () { if (AscCommonExcel.g_ProcessShared) { return parserHelp.get3DRef(this.ws.getName(), this.range.getName()); } else { - return parserHelp.get3DRef(this.ws.getName(), this.value); + return parserHelp.get3DRef(this.ws.getName(), this.value); } }; + cRef3D.prototype.toLocaleString = function () { + return parserHelp.get3DRef(this.ws.getName(), this.range.getName()); + }; cRef3D.prototype.getWS = function () { return this.ws; }; @@ -1877,6 +1949,11 @@ parserHelp.setDigitSeparator(AscCommon.g_oDefaultCultureInfo.NumberDecimalSepara cName.prototype.getWS = function () { return this.ws; }; + cName.prototype.changeSheet = function (wsLast, wsNew) { + if (this.ws === wsLast) { + this.ws = wsNew; + } + }; /** * @constructor @@ -2066,7 +2143,7 @@ parserHelp.setDigitSeparator(AscCommon.g_oDefaultCultureInfo.NumberDecimalSepara cStrucTable.prototype._updateArea = function (bbox, toRef, bConvertTableFormulaToRef) { var paramObj = {param: null, startCol: null, endCol: null, cell: bbox, toRef: toRef, bConvertTableFormulaToRef: bConvertTableFormulaToRef}; var isThisRow = false; - var tableData; + var tableData, refName; if (this.oneColumnIndex) { paramObj.param = AscCommon.FormulaTablePartInfo.columns; paramObj.startCol = this.oneColumnIndex.name; @@ -2132,7 +2209,11 @@ parserHelp.setDigitSeparator(AscCommon.g_oDefaultCultureInfo.NumberDecimalSepara } } if (tableData.range) { - var refName = tableData.range.getName(); + //всегда получаем диапазон в виде A1B1 + AscCommonExcel.executeInR1C1Mode(false, function () { + refName = tableData.range.getName(); + }); + var wsFrom = this.wb.getWorksheetById(tableData.wsID); if (tableData.range.isOneCell()) { this.area = new cRef3D(refName, wsFrom); @@ -2254,6 +2335,14 @@ parserHelp.setDigitSeparator(AscCommon.g_oDefaultCultureInfo.NumberDecimalSepara } return bRes; }; + cStrucTable.prototype.changeSheet = function(wsLast, wsNew) { + if (this.ws === wsLast) { + this.ws = wsNew; + if (this.area && this.area.changeSheet) { + this.area.changeSheet(wsLast, wsNew); + } + } + }; /** * @constructor @@ -2277,11 +2366,6 @@ parserHelp.setDigitSeparator(AscCommon.g_oDefaultCultureInfo.NumberDecimalSepara this.cloneTo(oRes); return oRes; }; - cName3D.prototype.changeSheet = function (wsLast, wsNew) { - if (this.ws === wsLast) { - this.ws = wsNew; - } - }; cName3D.prototype.toString = function () { return parserHelp.getEscapeSheetName(this.ws.getName()) + "!" + cName.prototype.toString.call(this); }; @@ -5640,13 +5724,13 @@ parserFormula.prototype.setFormula = function(formula) { return false; } if (parserHelp.isArea.call(ph, t.Formula, ph.pCurrPos)) { - found_operand = new cArea3D(ph.operand_str.toUpperCase(), wsF, wsT); + found_operand = new cArea3D(ph.real_str ? ph.real_str.toUpperCase() : ph.operand_str.toUpperCase(), wsF, wsT); parseResult.addRefPos(prevCurrPos, ph.pCurrPos, t.outStack.length, found_operand); } else if (parserHelp.isRef.call(ph, t.Formula, ph.pCurrPos)) { if (wsT !== wsF) { - found_operand = new cArea3D(ph.operand_str.toUpperCase(), wsF, wsT); + found_operand = new cArea3D(ph.real_str ? ph.real_str.toUpperCase() : ph.operand_str.toUpperCase(), wsF, wsT); } else { - found_operand = new cRef3D(ph.operand_str.toUpperCase(), wsF); + found_operand = new cRef3D(ph.real_str ? ph.real_str.toUpperCase() : ph.operand_str.toUpperCase(), wsF); } parseResult.addRefPos(prevCurrPos, ph.pCurrPos, t.outStack.length, found_operand); } else if (parserHelp.isName.call(ph, t.Formula, ph.pCurrPos)) { @@ -5657,11 +5741,12 @@ parserFormula.prototype.setFormula = function(formula) { /* Referens to cells area A1:A10 */ else if (parserHelp.isArea.call(ph, t.Formula, ph.pCurrPos)) { - found_operand = new cArea(ph.operand_str.toUpperCase(), t.ws); + found_operand = new cArea(ph.real_str ? ph.real_str.toUpperCase() : ph.operand_str.toUpperCase(), t.ws); parseResult.addRefPos(ph.pCurrPos - ph.operand_str.length, ph.pCurrPos, t.outStack.length, found_operand); } /* Referens to cell A4 */ else if (parserHelp.isRef.call(ph, t.Formula, ph.pCurrPos)) { - found_operand = new cRef(ph.operand_str.toUpperCase(), t.ws); + + found_operand = new cRef(ph.real_str ? ph.real_str.toUpperCase() : ph.operand_str.toUpperCase(), t.ws); parseResult.addRefPos(ph.pCurrPos - ph.operand_str.length, ph.pCurrPos, t.outStack.length, found_operand); } @@ -6262,18 +6347,22 @@ parserFormula.prototype.setFormula = function(formula) { for (var i = 0; i < this.outStack.length; i++) { var elem = this.outStack[i]; - if (cElementType.cell3D === elem.type) { - if (params.offset) { - elem = this._changeOffsetElem(elem, this.outStack, i, params.offset); + if (params.offset && (cElementType.cell === elem.type || cElementType.cellsRange === elem.type || + cElementType.cell3D === elem.type || cElementType.cellsRange3D === elem.type)) { + elem = this._changeOffsetElem(elem, this.outStack, i, params.offset); + } + if (params.tableNameMap && cElementType.table === elem.type) { + var newTableName = params.tableNameMap[elem.tableName]; + if (newTableName) { + elem.tableName = newTableName; } - if (wsLast && wsNew) { + } + if (wsLast && wsNew) { + if (cElementType.cell === elem.type || cElementType.cell3D === elem.type || + cElementType.cellsRange === elem.type || cElementType.table === elem.type || + cElementType.name === elem.type || cElementType.name3D === elem.type) { elem.changeSheet(wsLast, wsNew); - } - } else if (cElementType.cellsRange3D === elem.type) { - if (params.offset) { - elem = this._changeOffsetElem(elem, this.outStack, i, params.offset); - } - if (wsLast && wsNew) { + } else if (cElementType.cellsRange3D === elem.type) { if (elem.isSingleSheet()) { elem.changeSheet(wsLast, wsNew); } else { @@ -6282,15 +6371,6 @@ parserFormula.prototype.setFormula = function(formula) { } } } - } else if (params.offset && (cElementType.cellsRange === elem.type || cElementType.cell === elem.type)) { - elem = this._changeOffsetElem(elem, this.outStack, i, params.offset); - } else if (wsLast && wsNew && cElementType.name3D === elem.type) { - elem.changeSheet(wsLast, wsNew); - } else if (params.tableNameMap && cElementType.table === elem.type) { - var newTableName = params.tableNameMap[elem.tableName]; - if (newTableName) { - elem.tableName = newTableName; - } } } if (isInDependencies) { @@ -7173,6 +7253,16 @@ function rtl_math_erfc( x ) { return retArr; } + function convertRefToRowCol (ref, curRef) { + var cellAddress = new AscCommon.CellAddress(ref); + + var res = "R"; + res += !cellAddress.bRowAbs && curRef ? "[" + (cellAddress.row - curRef.nRow - 1) + "]" : cellAddress.row; + res += "C"; + res += !cellAddress.bColAbs && curRef ? "[" + (cellAddress.col - curRef.nCol - 1) + "]" : cellAddress.col; + + return res; + } function convertAreaToArrayRefs(area, useOnlyFirstRow, useOnlyFirstColumn){ var retArr = new cArray(), ref, is3d; var range, ws; @@ -7330,6 +7420,7 @@ function rtl_math_erfc( x ) { window['AscCommonExcel'].compareFormula = compareFormula; window['AscCommonExcel'].cDate = cDate; + window['AscCommonExcel'].convertRefToRowCol = convertRefToRowCol; window['AscCommonExcel'].convertAreaToArray = convertAreaToArray; window['AscCommonExcel'].convertAreaToArrayRefs = convertAreaToArrayRefs; diff --git a/cell/model/History.js b/cell/model/History.js index b87b142fc2..6e4e041a68 100644 --- a/cell/model/History.js +++ b/cell/model/History.js @@ -376,7 +376,7 @@ CHistory.prototype.RedoExecute = function(Point, oRedoObjectParam) } }; CHistory.prototype.UndoRedoEnd = function (Point, oRedoObjectParam, bUndo) { - var wsViews, i, oState = null, bCoaut = false; + var wsViews, i, oState = null, bCoaut = false, t = this; if (!bUndo && null == Point) { Point = this.Points[this.Index]; AscCommon.CollaborativeEditing.Apply_LinkData(); @@ -392,8 +392,9 @@ CHistory.prototype.UndoRedoEnd = function (Point, oRedoObjectParam, bUndo) { } } - /* возвращаем отрисовку. и перерисовываем ячейки с предварительным пересчетом */ - this.workbook.dependencyFormulas.unlockRecal(); + AscCommonExcel.executeInR1C1Mode(false, function () { + t.workbook.dependencyFormulas.unlockRecal(); + }); if (null != Point) { //синхронизация index и id worksheet diff --git a/cell/model/Serialize.js b/cell/model/Serialize.js index a1003e235c..7ebd99db69 100644 --- a/cell/model/Serialize.js +++ b/cell/model/Serialize.js @@ -2508,12 +2508,17 @@ var defNameList = this.wb.dependencyFormulas.saveDefName(); var filterDefName = "_xlnm._FilterDatabase"; + var tempMap = {}; var printAreaDefName = "Print_Area"; var prefix = "_xlnm."; if(null != defNameList ){ for(var i = 0; i < defNameList.length; i++){ if(defNameList[i].Name !== filterDefName) { + //TODO временная правка. на открытие может приходить _FilterDatabase. защищаемся от записи двух одинаковых именванных диапазона + if(defNameList[i].Name === "_FilterDatabase") { + tempMap[defNameList[i].LocalSheetId] = 1; + } var oldName = null; //на запись добавляем к области печати префикс if(printAreaDefName === defNameList[i].Name && null != defNameList[i].LocalSheetId && true === defNameList[i].isXLNM) { @@ -2533,7 +2538,7 @@ var ws, ref, defNameRef, defName; for(var i = 0; i < wb.aWorksheets.length; i++) { ws = wb.aWorksheets[i]; - if(ws && ws.AutoFilter && ws.AutoFilter.Ref) { + if(ws && ws.AutoFilter && ws.AutoFilter.Ref && !tempMap[ws.index]) { ref = ws.AutoFilter.Ref; defNameRef = AscCommon.parserHelp.get3DRef(ws.getName(), ref.getAbsName()); defName = new Asc.asc_CDefName(filterDefName, defNameRef, ws.index, false, true); @@ -4375,11 +4380,14 @@ this.bs = new BinaryCommonWriter(this.Memory); this.Write = function(noBase64, onlySaveBase64) { + var t = this; pptx_content_writer._Start(); if (noBase64) { this.Memory.WriteXmlString(this.WriteFileHeader(0, Asc.c_nVersionNoBase64)); } - this.WriteMainTable(); + AscCommonExcel.executeInR1C1Mode(false, function () { + t.WriteMainTable(); + }); pptx_content_writer._End(); if (noBase64) { if (onlySaveBase64) @@ -6853,7 +6861,15 @@ var formula = tmp.formula; var curFormula; var prevFormula = tmp.prevFormulas[cell.nCol]; - if (formula.v && formula.v.length <= AscCommon.c_oAscMaxFormulaLength) { + if (null !== formula.si && (curFormula = tmp.sharedFormulas[formula.si])) { + curFormula.parsed.getShared().ref.union3(cell.nCol, cell.nRow); + if (prevFormula !== curFormula) { + if (prevFormula && !tmp.bNoBuildDep && !tmp.siFormulas[prevFormula.parsed.getListenerId()]) { + prevFormula.parsed.buildDependencies(); + } + tmp.prevFormulas[cell.nCol] = curFormula; + } + } else if (formula.v && formula.v.length <= AscCommon.c_oAscMaxFormulaLength) { var offsetRow; var shared; var sharedRef; @@ -6903,21 +6919,10 @@ curFormula = new OpenColumnFormula(cell.nRow, formula.v, parsed, parseResult.refPos, newFormulaParent); tmp.prevFormulas[cell.nCol] = curFormula; } - if (null !== formula.si) { + if (null !== formula.si && curFormula.parsed.getShared()) { tmp.sharedFormulas[formula.si] = curFormula; tmp.siFormulas[curFormula.parsed.getListenerId()] = curFormula.parsed; } - } else if (null !== formula.si) { - curFormula = tmp.sharedFormulas[formula.si]; - if (curFormula) { - curFormula.parsed.getShared().ref.union3(cell.nCol, cell.nRow); - } - if (prevFormula !== curFormula) { - if (prevFormula && !tmp.bNoBuildDep && !tmp.siFormulas[prevFormula.parsed.getListenerId()]) { - prevFormula.parsed.buildDependencies(); - } - tmp.prevFormulas[cell.nCol] = curFormula; - } } if (curFormula) { cell.setFormulaInternal(curFormula.parsed); @@ -7524,7 +7529,7 @@ var oThis = this; var oSheetView = null; - if (c_oSerWorksheetsTypes.SheetView === type) { + if (c_oSerWorksheetsTypes.SheetView === type && 0 == aSheetViews.length) { oSheetView = new AscCommonExcel.asc_CSheetViewSettings(); res = this.bcr.Read1(length, function (t, l) { return oThis.ReadSheetView(t, l, oSheetView); @@ -8314,6 +8319,7 @@ }; this.Read = function(data, wb) { + var t = this; pptx_content_loader.Clear(); var pasteBinaryFromExcel = false; if(this.copyPasteObj && this.copyPasteObj.isCopyPaste && typeof editor != "undefined" && editor) @@ -8322,7 +8328,10 @@ this.stream = this.getbase64DecodedData(data); if(!pasteBinaryFromExcel) History.TurnOff(); - this.ReadFile(wb); + + AscCommonExcel.executeInR1C1Mode(false, function () { + t.ReadMainTable(wb); + }); if(!this.copyPasteObj.isCopyPaste) { @@ -8335,10 +8344,6 @@ //чтобы удалялся stream с бинарником pptx_content_loader.Clear(true); }; - this.ReadFile = function(wb) - { - return this.ReadMainTable(wb); - }; this.ReadMainTable = function(wb) { var res = c_oSerConstants.ReadOk; diff --git a/cell/model/UndoRedo.js b/cell/model/UndoRedo.js index 2c2e0d2978..c7bec5b492 100644 --- a/cell/model/UndoRedo.js +++ b/cell/model/UndoRedo.js @@ -1386,6 +1386,7 @@ function (window, undefined) { this.nCol = null; this.nRow = null; this.formula = null; + this.totalFunction = null; } UndoRedoData_AutoFilter.prototype.Properties = { @@ -1410,7 +1411,8 @@ function (window, undefined) { tablePart: 18, nCol: 19, nRow: 20, - formula: 21 + formula: 21, + totalFunction: 22 }; UndoRedoData_AutoFilter.prototype.getType = function () { return UndoRedoDataTypes.AutoFilter; @@ -1496,6 +1498,9 @@ function (window, undefined) { case this.Properties.formula: return this.formula; break; + case this.Properties.totalFunction: + return this.totalFunction; + break; } return null; @@ -1598,6 +1603,9 @@ function (window, undefined) { case this.Properties.formula: this.formula = value; break; + case this.Properties.totalFunction: + this.totalFunction = value; + break; } return null; }; diff --git a/cell/model/Workbook.js b/cell/model/Workbook.js index 35115d0df2..c142a5003c 100644 --- a/cell/model/Workbook.js +++ b/cell/model/Workbook.js @@ -246,31 +246,63 @@ this.parsedRef = null; } }, - setRef: function(ref, opt_noRemoveDependencies, opt_forceBuild) { + setRef: function(ref, opt_noRemoveDependencies, opt_forceBuild, opt_open) { if(!opt_noRemoveDependencies){ this.removeDependencies(); } + //для R1C1: ref - всегда строка в виде A1B1 + //флаг opt_open - на открытие, undo/redo, принятие изменений - строка приходит в виде A1B1 - преобразовывать не нужно + //во всех остальных случаях парсим ref и заменяем на формат A1B1 + opt_open = opt_open || this.wb.bRedoChanges || this.wb.bUndoChanges; + this.ref = ref; //all ref should be 3d, so worksheet can be anyone this.parsedRef = new parserFormula(ref, this, AscCommonExcel.g_DefNameWorksheet); this.parsedRef.setIsTable(this.isTable); if (opt_forceBuild) { + var oldR1C1mode = AscCommonExcel.g_R1C1Mode; + if(opt_open) { + AscCommonExcel.g_R1C1Mode = false; + } this.parsedRef.parse(); + if(opt_open) { + AscCommonExcel.g_R1C1Mode = oldR1C1mode; + } this.parsedRef.buildDependencies(); } else { + if(!opt_open) { + this.parsedRef.parse(); + this.ref = this.parsedRef.assemble(); + } this.wb.dependencyFormulas.addToBuildDependencyDefName(this); } }, + getRef: function(bLocale) { + //R1C1 - отдаём в зависимости от флага bLocale(для меню в виде R1C1) + var res; + if(!this.parsedRef.isParsed) { + var oldR1C1mode = AscCommonExcel.g_R1C1Mode; + AscCommonExcel.g_R1C1Mode = false; + this.parsedRef.parse(); + AscCommonExcel.g_R1C1Mode = oldR1C1mode; + } + if(bLocale) { + res = this.parsedRef.assembleLocale(AscCommonExcel.cFormulaFunctionToLocale, true); + } else { + res = this.parsedRef.assemble(); + } + return res; + }, getNodeId: function() { return getDefNameId(this.sheetId, this.name); }, - getAscCDefName: function() { + getAscCDefName: function(bLocale) { var index = null; if (this.sheetId) { var sheet = this.wb.getWorksheetById(this.sheetId); index = sheet.getIndex(); } - return new Asc.asc_CDefName(this.name, this.ref, index, this.isTable, this.hidden, this.isLock, this.isXLNM); + return new Asc.asc_CDefName(this.name, this.getRef(bLocale), index, this.isTable, this.hidden, this.isLock, this.isXLNM); }, getUndoDefName: function() { return new UndoRedoData_DefinedNames(this.name, this.ref, this.sheetId, this.isTable, this.isXLNM); @@ -319,7 +351,13 @@ function getVertexIndex(bbox) { //without $ - return bbox.getAbsName2(false, false, false, false); + //значения в areaMap хранятся в виде A1B1 + //данная функция используется только для получения данных из areaMap + var res; + AscCommonExcel.executeInR1C1Mode(false, function () { + res = bbox.getName(AscCommonExcel.referenceType.R); + }); + return res; } function DependencyGraph(wb) { @@ -376,6 +414,8 @@ var vertexIndex = getVertexIndex(bbox); var areaSheetElem = sheetContainer.areaMap[vertexIndex]; if (!areaSheetElem) { + //todo clone inside or outside startListeningRange? + bbox = bbox.clone(); areaSheetElem = {id: null, bbox: bbox, count: 0, listeners: {}}; sheetContainer.areaMap[vertexIndex] = areaSheetElem; sheetContainer.areaTree.add(bbox, areaSheetElem); @@ -621,12 +661,12 @@ } return res; }, - getDefinedNamesWB: function(type) { + getDefinedNamesWB: function(type, bLocale) { var names = [], activeWS; function getNames(defName) { if (defName.ref && !defName.hidden && (defName.name.indexOf("_xlnm") < 0)) { - names.push(defName.getAscCDefName()); + names.push(defName.getAscCDefName(bLocale)); } } @@ -1081,7 +1121,7 @@ }, initOpen: function() { this._foreachDefName(function(defName) { - defName.setRef(defName.ref, true, true); + defName.setRef(defName.ref, true, true, true); }); }, getSnapshot: function(wb) { @@ -1957,6 +1997,7 @@ return this.aWorksheets.length; }; Workbook.prototype.createWorksheet=function(indexBefore, sName, sId){ + this.dependencyFormulas.lockRecal(); History.Create_NewPoint(); History.TurnOff(); var wsActive = this.getActiveWs(); @@ -1978,6 +2019,7 @@ History.Add(AscCommonExcel.g_oUndoRedoWorkbook, AscCH.historyitem_Workbook_SheetAdd, null, null, new UndoRedoData_SheetAdd(indexBefore, oNewWorksheet.getName(), null, oNewWorksheet.getId())); History.SetSheetUndo(wsActive.getId()); History.SetSheetRedo(oNewWorksheet.getId()); + this.dependencyFormulas.unlockRecal(); return oNewWorksheet.index; }; Workbook.prototype.copyWorksheet=function(index, insertBefore, sName, sId, bFromRedo, tableNames){ @@ -2020,7 +2062,7 @@ History.SetSheetRedo(newSheet.getId()); if(!(bFromRedo === true)) { - wsFrom.copyDrawingObjects(newSheet, wsFrom); + wsFrom.copyObjects(newSheet, wsFrom); } this.sortDependency(); } @@ -2304,8 +2346,8 @@ Workbook.prototype.checkDefName = function (checkName, scope) { return this.dependencyFormulas.checkDefName(checkName, scope); }; - Workbook.prototype.getDefinedNamesWB = function (defNameListId) { - return this.dependencyFormulas.getDefinedNamesWB(defNameListId); + Workbook.prototype.getDefinedNamesWB = function (defNameListId, bLocale) { + return this.dependencyFormulas.getDefinedNamesWB(defNameListId, bLocale); }; Workbook.prototype.getDefinesNames = function ( name, sheetId ) { return this.dependencyFormulas.getDefNameByName( name, sheetId ); @@ -3307,7 +3349,7 @@ return renameParams; }; - Worksheet.prototype.copyDrawingObjects = function (oNewWs, wsFrom) { + Worksheet.prototype.copyObjects = function (oNewWs, wsFrom) { var i; if (null != this.Drawings && this.Drawings.length > 0) { var drawingObjects = new AscFormat.DrawingObjects(); @@ -4944,15 +4986,19 @@ var nColsCountNew = 0; //todo avoid double getRange3 this.getRange3(oBBoxFrom.r1, oBBoxFrom.c1, oBBoxFrom.r2, oBBoxFrom.c2)._foreachNoEmpty(function(cell) { - cell.transformSharedFormula(); + if (cell.transformSharedFormula()) { + var parsed = cell.getFormulaParsed(); + parsed.buildDependencies(); + } }); + var isClearFromArea = !copyRange || (copyRange && oThis.workbook.bUndoChanges); var moveCells = function(copyRange, from, to, r1From, r1To, count){ var fromData = oThis.getColDataNoEmpty(from); var toData; if(fromData){ toData = oThis.getColData(to); toData.copyRange(fromData, r1From, r1To, count); - if(!copyRange|| (copyRange && oThis.workbook.bUndoChanges)){ + if (isClearFromArea) { if(from !== to) { fromData.clear(r1From, r1From + count); } else { @@ -6511,7 +6557,9 @@ this.processFormula(function(parsed) { //todo without parse var newFormula = new parserFormula(parsed.getFormula(), oNewCell, t.ws); - newFormula.parse(); + AscCommonExcel.executeInR1C1Mode(false, function () { + newFormula.parse(); + }); var arrayFormulaRef = parsed.getArrayFormulaRef(); if(arrayFormulaRef) { newFormula.setArrayFormulaRef(arrayFormulaRef); @@ -7208,13 +7256,7 @@ fIsFitMeasurer = function(aText){return true;}; if(null == dDigitsCount) dDigitsCount = AscCommon.gc_nMaxDigCountView; - var aRes = this._getValue2(dDigitsCount, fIsFitMeasurer); - var formula = this.getFormula(); - if (formula) { - aRes[0].sFormula = formula; - aRes[0].sId = this.getName(); - } - return aRes; + return this._getValue2(dDigitsCount, fIsFitMeasurer); }; Cell.prototype.getNumberValue = function() { this._checkDirty(); diff --git a/cell/model/WorkbookElems.js b/cell/model/WorkbookElems.js index 8bbe86c182..41d4a3f2e8 100644 --- a/cell/model/WorkbookElems.js +++ b/cell/model/WorkbookElems.js @@ -468,8 +468,6 @@ g_oColorManager = new ColorManager(); function Fragment(val) { this.text = null; this.format = null; - this.sFormula = null; - this.sId = null; if (null != val) { this.set(val); } @@ -485,12 +483,6 @@ g_oColorManager = new ColorManager(); if (null != oVal.format) { this.format = oVal.format; } - if (null != oVal.sFormula) { - this.sFormula = oVal.sFormula; - } - if (null != oVal.sId) { - this.sId = oVal.sId; - } }; Fragment.prototype.checkVisitedHyperlink = function (row, col, hyperlinkManager) { var color = this.format.getColor(); @@ -3028,6 +3020,7 @@ function Hyperlink () { this.Location = null; this.LocationSheet = null; this.LocationRange = null; + this.LocationRangeBbox = null; this.bUpdateLocation = false; this.bVisited = false; @@ -3043,6 +3036,8 @@ Hyperlink.prototype = { oNewHyp.LocationSheet = this.LocationSheet; if (null !== this.LocationRange) oNewHyp.LocationRange = this.LocationRange; + if (null !== this.LocationRangeBbox) + oNewHyp.LocationRangeBbox = this.LocationRangeBbox.clone(); if (null !== this.Hyperlink) oNewHyp.Hyperlink = this.Hyperlink; if (null !== this.Tooltip) @@ -3069,32 +3064,56 @@ Hyperlink.prototype = { }, setLocationRange : function (LocationRange) { this.LocationRange = LocationRange; + this.LocationRangeBbox = null; this.bUpdateLocation = true; }, setLocation : function (Location) { - this.bUpdateLocation = false; - this.Location = Location; - this.LocationSheet = this.LocationRange = null; + this.bUpdateLocation = true; + this.LocationSheet = this.LocationRange = this.LocationRangeBbox = null; - if (null !== this.Location) { - var result = parserHelp.parse3DRef(this.Location); + if (null !== Location) { + var result = parserHelp.parse3DRef(Location); + if (!result) { + // Can be in all mods. Excel bug... + AscCommonExcel.executeInR1C1Mode(!AscCommonExcel.g_R1C1Mode, function () { + result = parserHelp.parse3DRef(Location); + }); + } if (null !== result) { this.LocationSheet = result.sheet; this.LocationRange = result.range; } } + this._updateLocation(); }, getLocation : function () { if (this.bUpdateLocation) this._updateLocation(); return this.Location; }, + getLocationRange : function () { + return this.LocationRangeBbox && this.LocationRangeBbox.getName(AscCommonExcel.g_R1C1Mode ? + AscCommonExcel.referenceType.A : AscCommonExcel.referenceType.R); + }, _updateLocation : function () { + var t = this; + this.Location = null; this.bUpdateLocation = false; - if (null === this.LocationSheet || null === this.LocationRange) - this.Location = null; - else - this.Location = parserHelp.get3DRef(this.LocationSheet, this.LocationRange); + if (null !== this.LocationSheet && null !== this.LocationRange) { + this.LocationRangeBbox = AscCommonExcel.g_oRangeCache.getAscRange(this.LocationRange); + if (!this.LocationRangeBbox) { + // Can be in all mods. Excel bug... + AscCommonExcel.executeInR1C1Mode(!AscCommonExcel.g_R1C1Mode, function () { + t.LocationRangeBbox = AscCommonExcel.g_oRangeCache.getAscRange(t.LocationRange); + }); + } + if (this.LocationRangeBbox) { + AscCommonExcel.executeInR1C1Mode(false, function () { + t.LocationRange = t.LocationRangeBbox.getName(AscCommonExcel.referenceType.R); + }); + this.Location = parserHelp.get3DRef(this.LocationSheet, this.LocationRange); + } + } }, setVisited : function (bVisited) { this.bVisited = bVisited; @@ -5290,9 +5309,12 @@ RangeDataManager.prototype = { this._f = AscCommonExcel.g_oRangeCache.getRange3D(this.f); }; sparkline.prototype.updateWorksheet = function (sheet, oldSheet) { + var t = this; if (this._f && oldSheet === this._f.sheet && (null === this._f.sheet2 || oldSheet === this._f.sheet2)) { this._f.setSheet(sheet); - this.f = this._f.getName(); + AscCommonExcel.executeInR1C1Mode(false,function (){ + t.f = t._f.getName(); + }); } }; sparkline.prototype.checkInRange = function (range) { @@ -6335,6 +6357,12 @@ RangeDataManager.prototype = { TableColumn.prototype.getTotalsRowFormula = function () { return this.TotalsRowFormula ? this.TotalsRowFormula.getFormula() : null; }; + TableColumn.prototype.getTotalsRowFunction = function () { + return this.TotalsRowFunction; + }; + TableColumn.prototype.getTotalsRowLabel = function () { + return this.TotalsRowLabel ? this.TotalsRowFormula.TotalsRowLabel : null; + }; TableColumn.prototype.setTotalsRowFormula = function (val, ws) { this.cleanTotalsData(); if ("=" === val[0]) { @@ -6343,10 +6371,15 @@ RangeDataManager.prototype = { this.applyTotalRowFormula(val, ws, true); this.TotalsRowFunction = Asc.ETotalsRowFunction.totalrowfunctionCustom; }; + TableColumn.prototype.setTotalsRowFunction = function (val) { + //функция работает только на undo/redo + //для того, чтобы работала из меню, необходимо генерировать и добавлять формулу в ячейку + this.cleanTotalsData(); + this.TotalsRowFunction = val; + }; TableColumn.prototype.setTotalsRowLabel = function (val) { this.cleanTotalsData(); - this.TotalsRowLabel = val; }; diff --git a/cell/model/autofilters.js b/cell/model/autofilters.js index 75410c2156..16a897080c 100644 --- a/cell/model/autofilters.js +++ b/cell/model/autofilters.js @@ -489,6 +489,12 @@ var newDisplayName = newTablePart && newTablePart.DisplayName ? newTablePart.DisplayName : null; //history + //FOR R1C1 - add into history only A1B1 format + if(addFormatTableOptionsObj && addFormatTableOptionsObj.range && rangeWithoutDiff) { + AscCommonExcel.executeInR1C1Mode(false, function () { + addFormatTableOptionsObj.range = rangeWithoutDiff.getName(); + }); + } t._addHistoryObj({Ref: filterRange}, AscCH.historyitem_AutoFilter_Add, {activeCells: filterRange, styleName: styleName, addFormatTableOptionsObj: addFormatTableOptionsObj, displayName: newDisplayName, tablePart: tablePart}, null, filterRange, bWithoutFilter); History.SetSelectionRedo(filterRange); @@ -829,10 +835,6 @@ { activeCells = AscCommonExcel.g_oRangeCache.getAscRange(userRange); } - - if(activeCells.getAllRange){ - activeCells = activeCells.getAllRange(); - } //данная функция возвращает false в двух случаях - при смене стиля ф/т или при поптыке добавить ф/т к части а/ф @@ -874,13 +876,10 @@ res = new AddFormatTableOptions(); var bIsTitle = this._isAddNameColumn(addRange); - var range = addRange.clone(); - - addRange.setAbs(true, true, true, true); res.asc_setIsTitle(bIsTitle); - res.asc_setRange(range.getAbsName()); + res.asc_setRange(addRange.getAbsName()); } - + return res; }, @@ -2871,6 +2870,7 @@ oHistoryObject.nCol = redoObject.nCol; oHistoryObject.nRow = redoObject.nRow; oHistoryObject.formula = redoObject.formula; + oHistoryObject.totalFunction = redoObject.totalFunction; } else { @@ -3002,66 +3002,57 @@ worksheet.workbook.dependencyFormulas.unlockRecal(); } }, - - _changeTotalsRowData: function(tablePart, range, props) - { - if(!tablePart || !range || !tablePart.TotalsRowCount) - { + + _changeTotalsRowData: function (tablePart, range, props) { + if (!tablePart || !range || !tablePart.TotalsRowCount) { return false; } - + var worksheet = this.worksheet; - + var tableRange = tablePart.Ref; var totalRange = new Asc.Range(tableRange.c1, tableRange.r2, tableRange.c2, tableRange.r2); var isIntersection = totalRange.intersection(range); - - if(isIntersection) - { - for(var j = isIntersection.c1; j <= isIntersection.c2; j++) - { + + if (isIntersection) { + for (var j = isIntersection.c1; j <= isIntersection.c2; j++) { var cell = worksheet.getCell3(tableRange.r2, j); var tableColumn = tablePart.TableColumns[j - tableRange.c1]; - + var formula = null; var label = null; - if(props) - { - if(props.formula) - { + var totalFunction; + if (props) { + if (props.formula) { formula = props.formula; - } - else - { + } else if (props.totalFunction) { + totalFunction = props.totalFunction; + } else { label = props.val; } - } - else - { - if(cell.isFormula()) - { + } else { + if (cell.isFormula()) { formula = cell.getFormula(); - } - else - { + } else { label = cell.getValue(); } } - - var oldLabel = tableColumn.TotalsRowLabel; + + var oldLabel = tableColumn.getTotalsRowLabel(); var oldFormula = tableColumn.getTotalsRowFormula(); - - if(null !== formula) - { + var oldTotalFunction = tableColumn.getTotalsRowFunction(); + + if (null !== formula) { tableColumn.setTotalsRowFormula(formula, worksheet); - } - else - { + } else if (totalFunction) { + tableColumn.setTotalsRowFunction(totalFunction); + } else { tableColumn.setTotalsRowLabel(label); cell.setType(CellValueType.String); } - - this._addHistoryObj({nCol: cell.bbox.c1, nRow: cell.bbox.r1, formula: oldFormula, val: oldLabel}, AscCH.historyitem_AutoFilter_ChangeTotalRow, {activeCells: range, nCol: cell.bbox.c1, nRow: cell.bbox.r1, formula: formula, val: label}); + + this._addHistoryObj({nCol: cell.bbox.c1, nRow: cell.bbox.r1, formula: oldFormula, val: oldLabel, totalFunction: oldTotalFunction + }, AscCH.historyitem_AutoFilter_ChangeTotalRow, {activeCells: range, nCol: cell.bbox.c1, nRow: cell.bbox.r1, formula: formula, val: label, totalFunction: totalFunction}); } } }, diff --git a/cell/model/clipboard.js b/cell/model/clipboard.js index 09b03bad49..a64b757275 100644 --- a/cell/model/clipboard.js +++ b/cell/model/clipboard.js @@ -273,213 +273,195 @@ return this; } - Clipboard.prototype = { + Clipboard.prototype.checkCopyToClipboard = function(ws, _clipboard, _formats) + { + var _data = null; + var activeRange = ws.getSelectedRange(); + var wb = window["Asc"]["editor"].wb; - constructor: Clipboard, - - checkCopyToClipboard: function(ws, _clipboard, _formats) + window['AscCommon'].g_specialPasteHelper.SpecialPasteButton_Hide(); + + if(ws.getCellEditMode() === true)//text in cell { - var _data = null; - var activeRange = ws.getSelectedRange(); - var wb = window["Asc"]["editor"].wb; + //only TEXT + var fragments = wb.cellEditor.copySelection(); - window['AscCommon'].g_specialPasteHelper.SpecialPasteButton_Hide(); - - if(ws.getCellEditMode() === true)//text in cell + if(null !== fragments) { - //only TEXT - var fragments = wb.cellEditor.copySelection(); - - if(null !== fragments) + _data = AscCommonExcel.getFragmentsText(fragments); + } + + if(null !== _data) + { + _clipboard.pushData(AscCommon.c_oAscClipboardDataFormat.Text, _data); + } + } + else + { + //если мультиселект, то запрещаем копирование + if(1 !== ws.model.selectionRange.ranges.length) + { + var selectedDrawings = ws.objectRender.getSelectedGraphicObjects(); + if(0 === selectedDrawings.length) { - _data = wb.cellEditor._getFragmentsText(fragments); + ws.handlers.trigger ("onErrorEvent", Asc.c_oAscError.ID.CopyMultiselectAreaError, Asc.c_oAscError.Level.NoCritical); + return; } + } + + //ignore hidden rows + var selectionRange = activeRange ? activeRange : ws.model.selectionRange.getLast(); + var activeCell = ws.model.selectionRange.activeCell.clone(); + if(ws.model.autoFilters.bIsExcludeHiddenRows(selectionRange, activeCell)) + { + ws.model.excludeHiddenRows(true); + } + + //TEXT + if (AscCommon.c_oAscClipboardDataFormat.Text & _formats) + { + _data = this.copyProcessor.getText(activeRange, ws); if(null !== _data) { _clipboard.pushData(AscCommon.c_oAscClipboardDataFormat.Text, _data); } } - else - { - //если мультиселект, то запрещаем копирование - if(1 !== ws.model.selectionRange.ranges.length) - { - var selectedDrawings = ws.objectRender.getSelectedGraphicObjects(); - if(0 === selectedDrawings.length) - { - ws.handlers.trigger ("onErrorEvent", Asc.c_oAscError.ID.CopyMultiselectAreaError, Asc.c_oAscError.Level.NoCritical); - return; - } - } + //HTML + if(AscCommon.c_oAscClipboardDataFormat.Html & _formats) + { + _data = this.copyProcessor.getHtml(activeRange, ws); - //ignore hidden rows - var selectionRange = activeRange ? activeRange : ws.model.selectionRange.getLast(); - var activeCell = ws.model.selectionRange.activeCell.clone(); - if(ws.model.autoFilters.bIsExcludeHiddenRows(selectionRange, activeCell)) + if(null !== _data) { - ws.model.excludeHiddenRows(true); + _clipboard.pushData(AscCommon.c_oAscClipboardDataFormat.Html, _data.html) } - - //TEXT - if (AscCommon.c_oAscClipboardDataFormat.Text & _formats) + } + //INTERNAL + if(AscCommon.c_oAscClipboardDataFormat.Internal & _formats) + { + if(window["NATIVE_EDITOR_ENJINE"]) { - _data = this.copyProcessor.getText(activeRange, ws); - - if(null !== _data) - { - _clipboard.pushData(AscCommon.c_oAscClipboardDataFormat.Text, _data); - } + _data = this.copyProcessor.getBinaryForMobile(); } - //HTML - if(AscCommon.c_oAscClipboardDataFormat.Html & _formats) - { - _data = this.copyProcessor.getHtml(activeRange, ws); - - if(null !== _data) - { - _clipboard.pushData(AscCommon.c_oAscClipboardDataFormat.Html, _data.html) - } - } - //INTERNAL - if(AscCommon.c_oAscClipboardDataFormat.Internal & _formats) + else { - if(window["NATIVE_EDITOR_ENJINE"]) + if(_data && _data.base64) { - _data = this.copyProcessor.getBinaryForMobile(); + _data = _data.base64; } else { - if(_data && _data.base64) - { - _data = _data.base64; - } - else - { - _data = this.copyProcessor.getBinaryForCopy(ws); - } - } - - if(null !== _data) - { - _clipboard.pushData(AscCommon.c_oAscClipboardDataFormat.Internal, _data); + _data = this.copyProcessor.getBinaryForCopy(ws); } } - ws.model.excludeHiddenRows(false); + if(null !== _data) + { + _clipboard.pushData(AscCommon.c_oAscClipboardDataFormat.Internal, _data); + } } - }, - pasteData: function(ws, _format, data1, data2, text_data, bIsSpecialPaste, doNotShowButton) + ws.model.excludeHiddenRows(false); + } + }; + + Clipboard.prototype.pasteData = function(ws, _format, data1, data2, text_data, bIsSpecialPaste, doNotShowButton) + { + var t = this; + t.pasteProcessor.clean(); + + if(!window['AscCommon'].g_specialPasteHelper.specialPasteStart) { - var t = this; - t.pasteProcessor.clean(); + window['AscCommon'].g_specialPasteHelper.SpecialPasteButton_Hide(); + } + window['AscCommon'].g_specialPasteHelper.Paste_Process_Start(doNotShowButton); - if(!window['AscCommon'].g_specialPasteHelper.specialPasteStart) - { - window['AscCommon'].g_specialPasteHelper.SpecialPasteButton_Hide(); - } - window['AscCommon'].g_specialPasteHelper.Paste_Process_Start(doNotShowButton); - - if(!bIsSpecialPaste) - { - window['AscCommon'].g_specialPasteHelper.specialPasteData.activeRange = ws.model.selectionRange.clone(ws.model); - window['AscCommon'].g_specialPasteHelper.specialPasteData.pasteFromWord = false; - } + if(!bIsSpecialPaste) + { + window['AscCommon'].g_specialPasteHelper.specialPasteData.activeRange = ws.model.selectionRange.clone(ws.model); + window['AscCommon'].g_specialPasteHelper.specialPasteData.pasteFromWord = false; + } - var text; - switch (_format) + switch (_format) + { + case AscCommon.c_oAscClipboardDataFormat.HtmlElement: { - case AscCommon.c_oAscClipboardDataFormat.HtmlElement: + if(ws.getCellEditMode()) { - if(ws.getCellEditMode() === true) - { - //fragments = пока только для плагина вставка символов - var fragments; - if(window['AscCommon'].g_clipboardBase.bSaveFormat){ - //проверяем иероглифы внутри - fragments = this.pasteProcessor._getFragmentsFromHtml(data1); - } - if(fragments){ - var pasteFragments = fragments.fragments; - var newFonts = fragments.fonts; - ws._loadFonts(newFonts, function() { - window["Asc"]["editor"].wb.cellEditor.paste(pasteFragments); - window['AscCommon'].g_specialPasteHelper.Paste_Process_End(); - }); + //fragments = пока только для плагина вставка символов + var fragments; + if(window['AscCommon'].g_clipboardBase.bSaveFormat){ + //проверяем иероглифы внутри + fragments = this.pasteProcessor._getFragmentsFromHtml(data1); + } + if (fragments) { + ws._loadFonts(fragments.fonts, function() { + window["Asc"]["editor"].wb.cellEditor.paste(fragments.fragments); + window['AscCommon'].g_specialPasteHelper.Paste_Process_End(); + }); - }else{ - text = text_data ? text_data : data1.innerText; - if(text) - { - AscFonts.FontPickerByCharacter.getFontsByString(text); - ws._loadFonts([], function() { - window["Asc"]["editor"].wb.cellEditor.pasteText(text); - window['AscCommon'].g_specialPasteHelper.Paste_Process_End(); - }); - } - } - } - else - { - t.pasteProcessor.editorPasteExec(ws, data1); + } else { + this._pasteTextInCellEditor(text_data || data1.innerText); } + } + else + { + t.pasteProcessor.editorPasteExec(ws, data1); + } - break; - } - case AscCommon.c_oAscClipboardDataFormat.Internal: - { - if(ws.getCellEditMode() === true) - { - text = t.pasteProcessor.pasteFromBinary(ws, data1, true); - if(text) - { - AscFonts.FontPickerByCharacter.getFontsByString(text); - ws._loadFonts([], function() { - window["Asc"]["editor"].wb.cellEditor.pasteText(text); - window['AscCommon'].g_specialPasteHelper.Paste_Process_End(); - }); - } - } - else - { - t.pasteProcessor.pasteFromBinary(ws, data1); - } - - break; - } - case AscCommon.c_oAscClipboardDataFormat.Text: - { - if(ws.getCellEditMode() === true) - { - if(data1) - { - AscFonts.FontPickerByCharacter.getFontsByString(data1); - ws._loadFonts([], function() { - window["Asc"]["editor"].wb.cellEditor.pasteText(data1); - window['AscCommon'].g_specialPasteHelper.Paste_Process_End(); - }); - } - } - else - { - //не показываем иконку с/в если вставляется только текст - window['AscCommon'].g_specialPasteHelper.Special_Paste_Hide_Button(); - t.pasteProcessor.pasteTextOnSheet(ws, data1); - } - - break; - } + break; } - - if(!bIsSpecialPaste) + case AscCommon.c_oAscClipboardDataFormat.Internal: { - window['AscCommon'].g_specialPasteHelper.specialPasteData._format = _format; - window['AscCommon'].g_specialPasteHelper.specialPasteData.data1 = data1; - window['AscCommon'].g_specialPasteHelper.specialPasteData.data2 = data2; - window['AscCommon'].g_specialPasteHelper.specialPasteData.text_data = text_data; + if(ws.getCellEditMode()) + { + this._pasteTextInCellEditor(this.pasteProcessor.pasteFromBinary(ws, data1, true)); + } + else + { + t.pasteProcessor.pasteFromBinary(ws, data1); + } + + break; + } + case AscCommon.c_oAscClipboardDataFormat.Text: + { + if(ws.getCellEditMode()) + { + this._pasteTextInCellEditor(data1); + } + else + { + //не показываем иконку с/в если вставляется только текст + window['AscCommon'].g_specialPasteHelper.Special_Paste_Hide_Button(); + t.pasteProcessor.pasteTextOnSheet(ws, data1); + } + + break; } } + + if(!bIsSpecialPaste) + { + window['AscCommon'].g_specialPasteHelper.specialPasteData._format = _format; + window['AscCommon'].g_specialPasteHelper.specialPasteData.data1 = data1; + window['AscCommon'].g_specialPasteHelper.specialPasteData.data2 = data2; + window['AscCommon'].g_specialPasteHelper.specialPasteData.text_data = text_data; + } + }; + Clipboard.prototype._pasteTextInCellEditor = function (text) { + if (!text) { + return; + } + var editor = window["Asc"]["editor"]; + AscFonts.FontPickerByCharacter.getFontsByString(text); + editor._loadFonts([], function() { + editor.wb.skipHelpSelector = true; + editor.wb.cellEditor.pasteText(text); + AscCommon.g_specialPasteHelper.Paste_Process_End(); + editor.wb.skipHelpSelector = false; + }); }; @@ -555,6 +537,12 @@ var selectionRange = activeRange ? activeRange : worksheet.model.selectionRange.getLast(); var maxRowCol = this._getRangeMaxRowCol(worksheet, selectionRange); if(null !== maxRowCol){ + if(maxRowCol.col < selectionRange.c1) { + maxRowCol.col = selectionRange.c1; + } + if(maxRowCol.row < selectionRange.r1) { + maxRowCol.row = selectionRange.r1; + } selectionRange = new Asc.Range(selectionRange.c1, selectionRange.r1, maxRowCol.col, maxRowCol.row); } diff --git a/cell/native/native.js b/cell/native/native.js index 7e79d62b13..686dd7ee7a 100644 --- a/cell/native/native.js +++ b/cell/native/native.js @@ -5598,7 +5598,7 @@ window["native"]["offline_cell_editor_open"] = function(x, y, width, height, rat t.setCellEditMode(true); ws.setCellEditMode(true); - ws.openCellEditor(t.cellEditor, /*fragments*/undefined, /*cursorPos*/undefined, isFocus, isClearCell, + ws.openCellEditor(t.cellEditor, /*cursorPos*/undefined, isFocus, isClearCell, /*isHideCursor*/isHideCursor, /*isQuickInput*/isQuickInput, selectionRange); //t.input.disabled = false; t.handlers.trigger("asc_onEditCell", Asc.c_oAscCellEditorState.editStart); @@ -5994,7 +5994,7 @@ window["native"]["offline_copy"] = function() { if (_api.wb.cellEditor.isOpened) { var v = _api.wb.cellEditor.copySelection(); if (v) { - dataBuffer.text = _api.wb.cellEditor._getFragmentsText(v); + dataBuffer.text = AscCommonExcel.getFragmentsText(v); } } else { @@ -6065,7 +6065,7 @@ window["native"]["offline_cut"] = function() { if (_api.wb.cellEditor.isOpened) { var v = _api.wb.cellEditor.copySelection(); if (v) { - dataBuffer.text = _api.wb.cellEditor._getFragmentsText(v); + dataBuffer.text = AscCommonExcel.getFragmentsText(v); _api.wb.cellEditor.cutSelection(); } diff --git a/cell/utils/utils.js b/cell/utils/utils.js index edf07cbfff..5023ad2a2a 100644 --- a/cell/utils/utils.js +++ b/cell/utils/utils.js @@ -354,8 +354,7 @@ }; Range.prototype.containsRange = function (range) { - var allRange = this.getAllRange(); - return allRange.contains(range.c1, range.r1) && allRange.contains(range.c2, range.r2); + return this.contains(range.c1, range.r1) && this.contains(range.c2, range.r2); }; Range.prototype.containsFirstLineRange = function (range) { @@ -731,144 +730,58 @@ } }; - Range.prototype.getName = function () { + Range.prototype._getName = function (val, isCol, abs) { + var isR1C1Mode = AscCommonExcel.g_R1C1Mode; + val += 1; + if (isCol && !isR1C1Mode) { + val = g_oCellAddressUtils.colnumToColstr(val); + } + return (isR1C1Mode ? (isCol ? 'C' : 'R') : '') + (abs ? (isR1C1Mode ? val : '$' + val) : + (isR1C1Mode ? ((0 !== (val = (val - (isCol ? AscCommonExcel.g_ActiveCell.c1 : + AscCommonExcel.g_ActiveCell.r1) - 1))) ? '[' + val + ']' : '') : val)); + }; + Range.prototype.getName = function (refType) { + var isR1C1Mode = AscCommonExcel.g_R1C1Mode; + var c, r, type = this.getType(); var sRes = ""; - var c1Abs = this.isAbsCol(this.refType1), c2Abs = this.isAbsCol(this.refType2); - var r1Abs = this.isAbsRow(this.refType1), r2Abs = this.isAbsRow(this.refType2); - - if (0 == this.c1 && gc_nMaxCol0 == this.c2 && false == c1Abs && false == c2Abs) { - if (r1Abs) { - sRes += "$"; - } - sRes += (this.r1 + 1) + ":"; - if (r2Abs) { - sRes += "$"; - } - sRes += (this.r2 + 1); - } else if (0 == this.r1 && gc_nMaxRow0 == this.r2 && false == r1Abs && false == r2Abs) { - if (c1Abs) { - sRes += "$"; - } - sRes += g_oCellAddressUtils.colnumToColstr(this.c1 + 1) + ":"; - if (c2Abs) { - sRes += "$"; - } - sRes += g_oCellAddressUtils.colnumToColstr(this.c2 + 1); + var c1Abs, c2Abs, r1Abs, r2Abs; + if (referenceType.A === refType) { + c1Abs = c2Abs = r1Abs = r2Abs = true; + } else if (referenceType.R === refType) { + c1Abs = c2Abs = r1Abs = r2Abs = false; } else { - if (c1Abs) { - sRes += "$"; + c1Abs = this.isAbsCol(this.refType1); + c2Abs = this.isAbsCol(this.refType2); + r1Abs = this.isAbsRow(this.refType1); + r2Abs = this.isAbsRow(this.refType2); + } + + if ((c_oAscSelectionType.RangeMax === type || c_oAscSelectionType.RangeRow === type) && c1Abs === c2Abs) { + sRes = this._getName(this.r1, false, r1Abs); + if (this.r1 !== this.r2 || r1Abs !== r2Abs || !isR1C1Mode) { + sRes += ':' + this._getName(this.r2, false, r2Abs); } - sRes += g_oCellAddressUtils.colnumToColstr(this.c1 + 1); - if (r1Abs) { - sRes += "$"; + } else if ((c_oAscSelectionType.RangeMax === type || c_oAscSelectionType.RangeCol === type) && r1Abs === r2Abs) { + sRes = this._getName(this.c1, true, c1Abs); + if (this.c1 !== this.c2 || c1Abs !== c2Abs || !isR1C1Mode) { + sRes += ':' + this._getName(this.c2, true, c2Abs); } - sRes += (this.r1 + 1); + } else { + r = this._getName(this.r1, false, r1Abs); + c = this._getName(this.c1, true, c1Abs); + sRes = isR1C1Mode ? r + c : c + r; + if (!this.isOneCell() || r1Abs !== r2Abs || c1Abs !== c2Abs) { - sRes += ":"; - if (c2Abs) { - sRes += "$"; - } - sRes += g_oCellAddressUtils.colnumToColstr(this.c2 + 1); - if (r2Abs) { - sRes += "$"; - } - sRes += (this.r2 + 1); + r = this._getName(this.r2, false, r2Abs); + c = this._getName(this.c2, true, c2Abs); + sRes += ':' + (isR1C1Mode ? r + c : c + r); } } return sRes; }; Range.prototype.getAbsName = function () { - var sRes = ""; - var c1Abs = this.isAbsCol(this.refType1), c2Abs = this.isAbsCol(this.refType2); - var r1Abs = this.isAbsRow(this.refType1), r2Abs = this.isAbsRow(this.refType2); - - if (0 == this.c1 && gc_nMaxCol0 == this.c2 && false == c1Abs && false == c2Abs) { - sRes += "$"; - sRes += (this.r1 + 1) + ":"; - sRes += "$"; - sRes += (this.r2 + 1); - } else if (0 == this.r1 && gc_nMaxRow0 == this.r2 && false == r1Abs && false == r2Abs) { - sRes += "$"; - sRes += g_oCellAddressUtils.colnumToColstr(this.c1 + 1) + ":"; - sRes += "$"; - sRes += g_oCellAddressUtils.colnumToColstr(this.c2 + 1); - } else { - sRes += "$"; - sRes += g_oCellAddressUtils.colnumToColstr(this.c1 + 1); - sRes += "$"; - sRes += (this.r1 + 1); - if (!this.isOneCell()) { - sRes += ":"; - sRes += "$"; - sRes += g_oCellAddressUtils.colnumToColstr(this.c2 + 1); - sRes += "$"; - sRes += (this.r2 + 1); - } - } - return sRes; - }; - - Range.prototype.getAbsName2 = function (absCol1, absRow1, absCol2, absRow2) { - var sRes = ""; - var c1Abs = this.isAbsCol(this.refType1), c2Abs = this.isAbsCol(this.refType2); - var r1Abs = this.isAbsRow(this.refType1), r2Abs = this.isAbsRow(this.refType2); - - if (0 == this.c1 && gc_nMaxCol0 == this.c2 && false == c1Abs && false == c2Abs) { - if (absRow1) { - sRes += "$"; - } - sRes += (this.r1 + 1) + ":"; - if (absRow2) { - sRes += "$"; - } - sRes += (this.r2 + 1); - } else if (0 == this.r1 && gc_nMaxRow0 == this.r2 && false == r1Abs && false == r2Abs) { - if (absCol1) { - sRes += "$"; - } - sRes += g_oCellAddressUtils.colnumToColstr(this.c1 + 1) + ":"; - if (absCol2) { - sRes += "$"; - } - sRes += g_oCellAddressUtils.colnumToColstr(this.c2 + 1); - } else { - if (absCol1) { - sRes += "$"; - } - sRes += g_oCellAddressUtils.colnumToColstr(this.c1 + 1); - if (absRow1) { - sRes += "$"; - } - sRes += (this.r1 + 1); - if (!this.isOneCell()) { - sRes += ":"; - if (absCol2) { - sRes += "$"; - } - sRes += g_oCellAddressUtils.colnumToColstr(this.c2 + 1); - if (absRow2) { - sRes += "$"; - } - sRes += (this.r2 + 1); - } - } - return sRes; - }; - - Range.prototype.getAllRange = function () { - var result, type = this.getType(); - if (c_oAscSelectionType.RangeMax === type) { - result = new Range(0, 0, gc_nMaxCol0, gc_nMaxRow0); - } else if (c_oAscSelectionType.RangeCol === type) { - result = new Range(this.c1, 0, this.c2, gc_nMaxRow0); - } else if (c_oAscSelectionType.RangeRow === type) { - result = new Range(0, this.r1, gc_nMaxCol0, this.r2); - } else { - result = this.clone(); - } - - return result; + return this.getName(referenceType.A); }; Range.prototype.getType = function () { @@ -1572,6 +1485,16 @@ return this._getRange(sRange, 3); }; RangeCache.prototype._getRange = function (sRange, type) { + if (AscCommonExcel.g_R1C1Mode) { + var o = { + Formula: sRange, pCurrPos: 0 + }; + if (AscCommon.parserHelp.isArea.call(o, o.Formula, o.pCurrPos)) { + sRange = o.real_str; + } else if (AscCommon.parserHelp.isRef.call(o, o.Formula, o.pCurrPos)) { + sRange = o.real_str; + } + } var oRes = null; var oCacheVal = this.oCache[sRange]; if (null == oCacheVal) { @@ -1760,19 +1683,32 @@ return false; } - function truncFracPart(frag) { - var s = frag.reduce(function (prev,val) {return prev + val.text;}, ""); + function dropDecimalAutofit(f) { + var s = getFragmentsText(f); // Проверка scientific format if (s.search(/E/i) >= 0) { - return frag; + return f; } // Поиск десятичной точки - var pos = s.search(/[,\.]/); - if (pos >= 0) { - frag[0].text = s.slice(0, pos); - frag.splice(1, frag.length - 1); + var pos = s.indexOf(AscCommon.g_oDefaultCultureInfo.NumberDecimalSeparator); + if (-1 !== pos) { + f = [f[0].clone()]; + f[0].text = s.slice(0, pos); } - return frag; + return f; + } + + function getFragmentsText(f) { + return f.reduce(function (pv, cv) { + return pv + cv.text; + }, ""); + } + + function executeInR1C1Mode(mode, runFunction) { + var oldMode = AscCommonExcel.g_R1C1Mode; + AscCommonExcel.g_R1C1Mode = mode; + runFunction(); + AscCommonExcel.g_R1C1Mode = oldMode; } function getEndValueRange (dx, start, v1, v2) { @@ -1865,7 +1801,7 @@ asc_getTooltip: function () { return this.hyperlinkModel.Tooltip; }, asc_getLocation: function () { return this.hyperlinkModel.getLocation(); }, asc_getSheet: function () { return this.hyperlinkModel.LocationSheet; }, - asc_getRange: function () { return this.hyperlinkModel.LocationRange; }, + asc_getRange: function () {return this.hyperlinkModel.getLocationRange();}, asc_getText: function () { return this.text; }, asc_setType: function (val) { @@ -2458,6 +2394,8 @@ var prot; window['Asc'] = window['Asc'] || {}; window['AscCommonExcel'] = window['AscCommonExcel'] || {}; + window['AscCommonExcel'].g_ActiveCell = null; // Active Cell for calculate (in R1C1 mode for relative cell) + window['AscCommonExcel'].g_R1C1Mode = false; // No calculate in R1C1 mode window["AscCommonExcel"].c_oAscShiftType = c_oAscShiftType; window["AscCommonExcel"].recalcType = recalcType; window["AscCommonExcel"].sizePxinPt = sizePxinPt; @@ -2481,7 +2419,9 @@ window["Asc"].trim = trim; window["Asc"].arrayToLowerCase = arrayToLowerCase; window["Asc"].isFixedWidthCell = isFixedWidthCell; - window["Asc"].truncFracPart = truncFracPart; + window["AscCommonExcel"].dropDecimalAutofit = dropDecimalAutofit; + window["AscCommonExcel"].getFragmentsText = getFragmentsText; + window['AscCommonExcel'].executeInR1C1Mode = executeInR1C1Mode; window["Asc"].getEndValueRange = getEndValueRange; window["AscCommonExcel"].referenceType = referenceType; diff --git a/cell/view/CellEditorView.js b/cell/view/CellEditorView.js index 257e76e2cf..537be2f8e5 100644 --- a/cell/view/CellEditorView.js +++ b/cell/view/CellEditorView.js @@ -159,8 +159,8 @@ /** @type RegExp */ this.reReplaceNL = /\r?\n|\r/g; this.rangeChars = ["=", "-", "+", "*", "/", "(", "{", ",", "<", ">", "^", "!", "&", ":", ";", " "]; - this.reNotFormula = new XRegExp( "[^\\p{L}\\\\_\\p{N}\\.]", "i" ); - this.reFormula = new XRegExp( "^([\\p{L}\\\\_][\\p{L}\\\\_\\p{N}\\.]*)", "i" ); + this.reNotFormula = new XRegExp( "[^\\p{L}\\\\_\\]\\[\\p{N}\\.]", "i" ); + this.reFormula = new XRegExp( "^([\\p{L}\\\\_\\]\\[][\\p{L}\\\\_\\]\\[\\p{N}\\.]*)", "i" ); this.defaults = { padding: -1, @@ -816,7 +816,7 @@ }; CellEditor.prototype._parseFormulaRanges = function () { - var s = this._getFragmentsText( + var s = AscCommonExcel.getFragmentsText( this.options.fragments), t = this, ret = false, range, wsOPEN = this.handlers.trigger( "getCellFormulaEnterWSOpen"), ws = wsOPEN ? wsOPEN.model : this.handlers.trigger("getActiveWS"); @@ -844,12 +844,13 @@ // var __e__ = new Date().getTime(); // console.log("e-s "+ (__e__ - __s__)); - var bbox = AscCommonExcel.g_oRangeCache.getActiveRange(this.options.cellName); + var bbox = this.options.bbox; this._parseResult = new AscCommonExcel.ParseResult([], []); - this._formula = new AscCommonExcel.parserFormula(s.substr(1), null, ws); + var cellWithFormula = new window['AscCommonExcel'].CCellWithFormula(ws, bbox.r1, bbox.c1); + this._formula = new AscCommonExcel.parserFormula(s.substr(1), cellWithFormula, ws); this._formula.parse(true, true, this._parseResult); - var r, offset, _e, _s, wsName = null, refStr, isName = false, _sColorPos; + var r, offset, _e, _s, wsName = null, refStr, isName = false, _sColorPos, localStrObj; if (this._parseResult.refPos && this._parseResult.refPos.length > 0) { for (var index = 0; index < this._parseResult.refPos.length; index++) { @@ -868,15 +869,16 @@ wsName = wsOPEN.model.getName(); } ret = true; - refStr = r.oper.value; + refStr = r.oper.toLocaleString(); break; } case cElementType.cell3D : { + localStrObj = r.oper.toLocaleStringObj(); + refStr = localStrObj[1]; ret = true; wsName = r.oper.getWS().getName(); - _s = _e - r.oper.value.length; - _sColorPos = _e - r.oper.toString().length; - refStr = r.oper.value; + _s = _e - localStrObj[1].length; + _sColorPos = _e - localStrObj[0].length; break; } case cElementType.cellsRange : { @@ -884,7 +886,7 @@ wsName = wsOPEN.model.getName(); } ret = true; - refStr = r.oper.value; + refStr = r.oper.toLocaleString(); break; } case cElementType.cellsRange3D : { @@ -892,10 +894,11 @@ continue; } ret = true; - refStr = r.oper.value; + localStrObj = r.oper.toLocaleStringObj(); + refStr = localStrObj[1]; wsName = r.oper.getWS().getName(); - _s = _e - r.oper.value.length; - _sColorPos = _e - r.oper.toString().length; + _s = _e - localStrObj[1].length; + _sColorPos = _e - localStrObj[0].length; break; } case cElementType.table : @@ -915,9 +918,10 @@ case cElementType.cellsRange : case cElementType.cell3D : { ret = true; - refStr = nameRef.value; + localStrObj = r.oper.toLocaleStringObj(); + refStr = localStrObj[1]; wsName = nameRef.getWS().getName(); - _s = _e - r.oper.value.length; + _s = _e - localStrObj[1].length; break; } } @@ -969,12 +973,13 @@ /*не нашли диапазонов под курсором, парсим формулу*/ var r, offset, _e, _s, wsName = null, ret = false, refStr, isName = false, _sColorPos, wsOPEN = this.handlers.trigger( - "getCellFormulaEnterWSOpen"), ws = wsOPEN ? wsOPEN.model : this.handlers.trigger("getActiveWS"); + "getCellFormulaEnterWSOpen"), ws = wsOPEN ? wsOPEN.model : this.handlers.trigger("getActiveWS"), localStrObj; - var bbox = AscCommonExcel.g_oRangeCache.getActiveRange(this.options.cellName); + var bbox = this.options.bbox; this._parseResult = new AscCommonExcel.ParseResult([], []); - this._formula = new AscCommonExcel.parserFormula(s.substr(1), null, ws); - this._formula.parse(true, true, this._parseResult); + var cellWithFormula = new window['AscCommonExcel'].CCellWithFormula(ws, bbox.r1, bbox.c1); + this._formula = new AscCommonExcel.parserFormula(s.substr(1), cellWithFormula, ws); + this._formula.parse(true, true, this._parseResult, bbox); if (this._parseResult.refPos && this._parseResult.refPos.length > 0) { for (var index = 0; index < this._parseResult.refPos.length; index++) { @@ -990,23 +995,24 @@ if (wsOPEN) { wsName = wsOPEN.model.getName(); } - refStr = r.oper.value; + refStr = r.oper.toLocaleString(); ret = true; break; } case cElementType.cell3D : { - refStr = r.oper.value; + localStrObj = r.oper.toLocaleStringObj(); + refStr = localStrObj[1]; ret = true; wsName = r.oper.getWS().getName(); - _s = _e - r.oper.value.length + 1; - _sColorPos = _e - r.oper.toString().length; + _s = _e - localStrObj[1].length + 1; + _sColorPos = _e - localStrObj[0].length; break; } case cElementType.cellsRange : { if (wsOPEN) { wsName = wsOPEN.model.getName(); } - refStr = r.oper.value; + refStr = r.oper.toLocaleString(); ret = true; break; } @@ -1015,9 +1021,10 @@ continue; } ret = true; - refStr = r.oper.value; + localStrObj = r.oper.toLocaleStringObj(); + refStr = localStrObj[1]; wsName = r.oper.getWS().getName(); - _s = _e - r.oper.value.length + 1; + _s = _e - localStrObj[1].length + 1; break; } case cElementType.table : @@ -1037,9 +1044,10 @@ case cElementType.cellsRange : case cElementType.cell3D : { ret = true; - refStr = nameRef.value; + localStrObj = nameRef.toLocaleStringObj(); + refStr = localStrObj[1]; wsName = nameRef.getWS().getName(); - _s = _e - r.oper.value.length; + _s = _e - localStrObj[1].length; break; } } @@ -1051,7 +1059,7 @@ } if (ret && t.cursorPos > _s && t.cursorPos <= _s + r.oper.value.length) { - range = t._parseRangeStr(r.oper.value); + range = t._parseRangeStr(refStr); if (range) { if (this.handlers.trigger("getActiveWS") && this.handlers.trigger("getActiveWS").getName() != wsName) { return {index: -1, length: 0, range: null}; @@ -1097,7 +1105,7 @@ if ( undefined === isFormula ) { isFormula = this.isFormula(); } - var editorState = isFormula ? c_oAscCellEditorState.editFormula : "" === this._getFragmentsText( this.options.fragments ) ? c_oAscCellEditorState.editEmptyCell : c_oAscCellEditorState.editText; + var editorState = isFormula ? c_oAscCellEditorState.editFormula : "" === AscCommonExcel.getFragmentsText( this.options.fragments ) ? c_oAscCellEditorState.editEmptyCell : c_oAscCellEditorState.editText; if ( this.m_nEditorState !== editorState ) { this.m_nEditorState = editorState; @@ -1178,7 +1186,7 @@ this._adjustCanvas(); this._showCanvas(); this._renderText(); - this.input.value = this._getFragmentsText(fragments); + this.input.value = AscCommonExcel.getFragmentsText(fragments); this._updateCursorPosition(); this._showCursor(); }; @@ -1223,12 +1231,12 @@ this._updateUndoRedoChanged(); if (window['IS_NATIVE_EDITOR']) { - window['native']['onCellEditorChangeText'](this._getFragmentsText(this.options.fragments)); + window['native']['onCellEditorChangeText'](AscCommonExcel.getFragmentsText(this.options.fragments)); } }; CellEditor.prototype._fireUpdated = function () { - var s = this._getFragmentsText(this.options.fragments); + var s = AscCommonExcel.getFragmentsText(this.options.fragments); var isFormula = -1 === this.beginCompositePos && s.charAt(0) === "="; var funcPos, funcName, match; @@ -1653,10 +1661,10 @@ CellEditor.prototype._syncEditors = function () { var t = this; - var s1 = t._getFragmentsText(t.options.fragments); + var s1 = AscCommonExcel.getFragmentsText(t.options.fragments); var s2 = t.input.value; var l = Math.min(s1.length, s2.length); - var i1 = 0, i2 = 0; + var i1 = 0, i2; while (i1 < l && s1.charAt(i1) === s2.charAt(i1)) { ++i1; @@ -2045,12 +2053,6 @@ }, 0 ) : 0; }; - CellEditor.prototype._getFragmentsText = function ( f ) { - return f.length > 0 ? f.reduce( function ( pv, cv ) { - return pv + cv.text; - }, "" ) : ""; - }; - CellEditor.prototype._setFormatProperty = function (format, prop, val) { switch (prop) { case "fn": @@ -2608,7 +2610,7 @@ t._updateCursorPosition(); } if (t.textRender.getEndOfText() === t.cursorPos && !t.isFormula()) { - var s = t._getFragmentsText(t.options.fragments); + var s = AscCommonExcel.getFragmentsText(t.options.fragments); if (!AscCommon.isNumber(s)) { var arrAutoComplete = t._getAutoComplete(s.toLowerCase()); var lengthInput = s.length; diff --git a/cell/view/WorkbookView.js b/cell/view/WorkbookView.js index a23b432afb..2b55df51ad 100644 --- a/cell/view/WorkbookView.js +++ b/cell/view/WorkbookView.js @@ -592,6 +592,26 @@ } return res; }; + this.Api.beginInlineDropTarget = function (event) { + if (!self.controller.isMoveRangeMode) { + self.controller.isMoveRangeMode = true; + self.getWorksheet().dragAndDropRange = new Asc.Range(0, 0, 0, 0); + } + self.controller._onMouseMove(event); + }; + this.Api.endInlineDropTarget = function (event) { + self.controller.isMoveRangeMode = false; + var ws = self.getWorksheet(); + var newSelection = ws.activeMoveRange.clone(); + ws._cleanSelectionMoveRange(); + ws.dragAndDropRange = null; + self._onSetSelection(newSelection); + }; + this.Api.isEnabledDropTarget = function () { + return !self.isCellEditMode; + }; + + AscCommon.InitBrowserInputContext(this.Api, "id_target_cursor"); } @@ -1298,8 +1318,8 @@ this.getWorksheet().cellCommentator.showCommentByXY(x, y); }; - WorkbookView.prototype._onUpdateSelectionName = function() { - if (this.canUpdateAfterShiftUp) { + WorkbookView.prototype._onUpdateSelectionName = function (forcibly) { + if (this.canUpdateAfterShiftUp || forcibly) { this.canUpdateAfterShiftUp = false; var ws = this.getWorksheet(); this._onSelectionNameChanged(ws.getSelectionName(/*bRangeText*/false)); @@ -1410,7 +1430,7 @@ var editFunction = function() { t.setCellEditMode(true); ws.setCellEditMode(true); - ws.openCellEditor(t.cellEditor, /*fragments*/undefined, /*cursorPos*/undefined, isFocus, isClearCell, + ws.openCellEditor(t.cellEditor, /*cursorPos*/undefined, isFocus, isClearCell, /*isHideCursor*/isHideCursor, /*isQuickInput*/isQuickInput, selectionRange); t.input.disabled = false; t.handlers.trigger("asc_onEditCell", c_oAscCellEditorState.editStart); @@ -2068,7 +2088,7 @@ var selectionRange = ws.model.selectionRange.clone(); // Редактор закрыт - var cellRange = null; + var cellRange = {}; // Если нужно сделать автозаполнение формулы, то ищем ячейки) if (autoComplete) { cellRange = ws.autoCompleteFormula(name); @@ -2076,11 +2096,11 @@ if (isNotFunction) { name = "=" + name; } else { - if (cellRange) { - if (cellRange.notEditCell) { - // Мы уже ввели все что нужно, редактор открывать не нужно - return; - } + if (cellRange.notEditCell) { + // Мы уже ввели все что нужно, редактор открывать не нужно + return; + } + if (cellRange.text) { // Меняем значение ячейки name = "=" + name + "(" + cellRange.text + ")"; } else { @@ -2354,7 +2374,7 @@ }; WorkbookView.prototype.getDefinedNames = function(defNameListId) { - return this.model.getDefinedNamesWB(defNameListId); + return this.model.getDefinedNamesWB(defNameListId, true); }; WorkbookView.prototype.setDefinedNames = function(defName) { diff --git a/cell/view/WorksheetView.js b/cell/view/WorksheetView.js index b3702746a2..f3bdaf92dc 100644 --- a/cell/view/WorksheetView.js +++ b/cell/view/WorksheetView.js @@ -385,6 +385,8 @@ this.startCellMoveRange = null; // Дипазон перемещения this.activeMoveRange = null; + // Range for drag and drop + this.dragAndDropRange = null; // Range fillHandle this.activeFillHandle = null; // Горизонтальное (0) или вертикальное (1) направление автозаполнения @@ -1043,7 +1045,7 @@ for (i = 0; i < hasNumber.arrCols.length; ++i) { c = hasNumber.arrCols[i]; cell = t._getVisibleCell(c, arCopy.r2); - text = t._getCellTitle(c, arCopy.r1) + ":" + t._getCellTitle(c, arCopy.r2 - 1); + text = (new asc_Range(c, arCopy.r1, c, arCopy.r2 - 1)).getName(); val = "=" + functionName + "(" + text + ")"; // ToDo - при вводе формулы в заголовок автофильтра надо писать "0" cell.setValue(val); @@ -1052,13 +1054,13 @@ for (i = 0; i < hasNumber.arrRows.length; ++i) { r = hasNumber.arrRows[i]; cell = t._getVisibleCell(arCopy.c2, r); - text = t._getCellTitle(arCopy.c1, r) + ":" + t._getCellTitle(arCopy.c2 - 1, r); + text = (new asc_Range(arCopy.c1, r, arCopy.c2 - 1, r)).getName(); val = "=" + functionName + "(" + text + ")"; cell.setValue(val); } // Значение в правой нижней ячейке cell = t._getVisibleCell(arCopy.c2, arCopy.r2); - text = t._getCellTitle(arCopy.c1, arCopy.r2) + ":" + t._getCellTitle(arCopy.c2 - 1, arCopy.r2); + text = (new asc_Range(arCopy.c1, arCopy.r2, arCopy.c2 - 1, arCopy.r2)).getName(); val = "=" + functionName + "(" + text + ")"; cell.setValue(val); }; @@ -1072,7 +1074,7 @@ for (i = 0; i < hasNumber.arrRows.length; ++i) { r = hasNumber.arrRows[i]; cell = t._getVisibleCell(arCopy.c2, r); - text = t._getCellTitle(arCopy.c1, r) + ":" + t._getCellTitle(arCopy.c2 - 1, r); + text = (new asc_Range(arCopy.c1, r, arCopy.c2 - 1, r)).getName(); val = "=" + functionName + "(" + text + ")"; cell.setValue(val); } @@ -1087,7 +1089,7 @@ for (i = 0; i < hasNumber.arrCols.length; ++i) { c = hasNumber.arrCols[i]; cell = t._getVisibleCell(c, arCopy.r2); - text = t._getCellTitle(c, arCopy.r1) + ":" + t._getCellTitle(c, arCopy.r2 - 1); + text = (new asc_Range(c, arCopy.r1, c, arCopy.r2 - 1)).getName(); val = "=" + functionName + "(" + text + ")"; cell.setValue(val); } @@ -1100,7 +1102,7 @@ // Одна строка или только в последней строке есть значения... cell = t._getVisibleCell(arCopy.c2, arCopy.r2); // ToDo вводить в первое свободное место, а не сразу за диапазоном - text = t._getCellTitle(arCopy.c1, arCopy.r2) + ":" + t._getCellTitle(arCopy.c2 - 1, arCopy.r2); + text = (new asc_Range(arCopy.c1, arCopy.r2, arCopy.c2 - 1, arCopy.r2)).getName(); val = "=" + functionName + "(" + text + ")"; cell.setValue(val); }; @@ -1114,7 +1116,7 @@ c = hasNumber.arrCols[i]; cell = t._getVisibleCell(c, arCopy.r2); // ToDo вводить в первое свободное место, а не сразу за диапазоном - text = t._getCellTitle(c, arCopy.r1) + ":" + t._getCellTitle(c, arCopy.r2 - 1); + text = (new asc_Range(c, arCopy.r1, c, arCopy.r2 - 1)).getName(); val = "=" + functionName + "(" + text + ")"; cell.setValue(val); } @@ -1222,12 +1224,7 @@ result = new asc_Range(c, leftCell.r, c, leftCell.r); } this._fixSelectionOfMergedCells(result); - if (result.c1 === result.c2 && result.r1 === result.r2) { - result.text = this._getCellTitle(result.c1, result.r1); - } else { - result.text = this._getCellTitle(result.c1, result.r1) + ":" + this._getCellTitle(result.c2, result.r2); - } - return result; + result.text = result.getName(); } if (topCell) { @@ -1260,13 +1257,10 @@ result = new asc_Range(topCell.c, r, topCell.c, r); } this._fixSelectionOfMergedCells(result); - if (result.c1 === result.c2 && result.r1 === result.r2) { - result.text = this._getCellTitle(result.c1, result.r1); - } else { - result.text = this._getCellTitle(result.c1, result.r1) + ":" + this._getCellTitle(result.c2, result.r2); - } - return result; + result.text = result.getName(); } + + return result; }; WorksheetView.prototype._prepareComments = function () { @@ -4042,8 +4036,7 @@ if (isActive) { var cell = (this.isSelectionDialogMode ? this.copyActiveRange : this.model.selectionRange).activeCell; var fs = this.model.getMergedByCell(cell.row, cell.col); - fs = range.intersectionSimple( - fs ? fs : new asc_Range(cell.col, cell.row, cell.col, cell.row)); + fs = oIntersection.intersectionSimple(fs || new asc_Range(cell.col, cell.row, cell.col, cell.row)); if (fs) { var top = this._getRowTop(fs.r1); var left = this._getColLeft(fs.c1); @@ -4789,10 +4782,10 @@ History.StartTransaction(); // Выставляем, что это bestFit this.model.setColBestFit(true, this.model.charCountToModelColWidth(cc), col, col); - this._calcColWidth(this._getColLeft(col) - this.cellsLeft, col); History.EndTransaction(); - this._updateColumnPositions(); + // ToDo refactoring this!!! + this._calcWidthColumns(AscCommonExcel.recalcType.recalc); this.isChanged = true; } }; @@ -4870,12 +4863,7 @@ return true; }); if ("General" === numFormatStr && c_oAscCanChangeColWidth.all !== this.canChangeColWidth) { - // asc.truncFracPart изменяет исходный массив, поэтому клонируем - var fragmentsTmp = []; - for (var k = 0; k < sstr.length; ++k) { - fragmentsTmp.push(sstr[k].clone()); - } - sstr = asc.truncFracPart(fragmentsTmp); + sstr = AscCommonExcel.dropDecimalAutofit(sstr); } sfl = fl.clone(); sfl.wrapText = false; @@ -5214,7 +5202,7 @@ * @return {String} */ WorksheetView.prototype._getColumnTitle = function (col) { - return AscCommon.g_oCellAddressUtils.colnumToColstrFromWsView(col + 1); + return AscCommonExcel.g_R1C1Mode ? this._getRowTitle(col) : AscCommon.g_oCellAddressUtils.colnumToColstrFromWsView(col + 1); }; /** @@ -5226,16 +5214,6 @@ return "" + (row + 1); }; - /** - * Возвращает заголовок ячейки по индексу - * @param {Number} col Индекс колонки - * @param {Number} row Индекс строки - * @return {String} - */ - WorksheetView.prototype._getCellTitle = function (col, row) { - return this._getColumnTitle(col) + this._getRowTitle(row); - }; - /** * Возвращает ячейку таблицы (из Worksheet) * @param {Number} col Индекс колонки @@ -7279,7 +7257,8 @@ return defName; } - return this._getColumnTitle(c1) + this._getRowTitle(r1); + return (new Asc.Range(c1, r1, c1, r1)).getName(AscCommonExcel.g_R1C1Mode ? + AscCommonExcel.referenceType.A : AscCommonExcel.referenceType.R); }; WorksheetView.prototype.getSelectionRangeValue = function () { @@ -7316,9 +7295,9 @@ var isNumberFormat = (!cellType || CellValueType.Number === cellType); var cell_info = new asc_CCellInfo(); - cell_info.name = this._getColumnTitle(c1) + this._getRowTitle(r1); cell_info.formula = c.getFormula(); + AscCommonExcel.g_ActiveCell = new Asc.Range(c1, r1, c1, r1); cell_info.text = c.getValueForEdit(true); cell_info.halign = align.getAlignHorizontal(); @@ -7906,7 +7885,7 @@ WorksheetView.prototype.applyFormatPainter = function () { var t = this; - var from = t.handlers.trigger('getRangeFormatPainter').getLast(), to = this.model.selectionRange.getLast().getAllRange(); + var from = t.handlers.trigger('getRangeFormatPainter').getLast(), to = this.model.selectionRange.getLast().clone(); var onApplyFormatPainterCallback = function (isSuccess) { // Очищаем выделение t.cleanSelection(); @@ -8478,7 +8457,7 @@ //если выделена ячейка заголовка ф/т, меняем выделение с ячейки на столбец ф/т //если выделена вся видимая часть форматированной таблицы, но не выделены последние скрытые строчки - var selectionRange = this.model.selectionRange.getLast().clone(); + var selectionRange = (this.dragAndDropRange || this.model.selectionRange.getLast()).clone(); if (null === this.startCellMoveRange) { this.af_changeSelectionTablePart(selectionRange); } @@ -8894,12 +8873,11 @@ if (false === isSuccess) { return; } - var bIsUpdate = true; var hasUpdates = false; var callTrigger = false; var res; - var mc, r, c, cell; + var mc, r, cell; function makeBorder(b) { var border = new AscCommonExcel.BorderProp(); @@ -8923,12 +8901,12 @@ checkRange.forEach(function (item, i) { var c; + var bIsUpdate = true; var range = t.model.getRange3(item.r1, item.c1, item.r2, item.c2); var isLargeRange = t._isLargeRange(range.bbox); var canChangeColWidth = c_oAscCanChangeColWidth.none; - if(t.model.autoFilters.bIsExcludeHiddenRows(arn, activeCell)) - { + if (t.model.autoFilters.bIsExcludeHiddenRows(arn, activeCell)) { t.model.excludeHiddenRows(true); } @@ -9105,7 +9083,7 @@ case "changeDigNum": res = []; - for (c = item.c1; c < item.c2; ++c) { + for (c = item.c1; c <= item.c2; ++c) { res.push(t.getColumnWidthInSymbols(c)); } range.shiftNumFormat(val, res); @@ -9137,8 +9115,8 @@ case "hyperlink": if (val && val.hyperlinkModel) { if (Asc.c_oAscHyperlinkType.RangeLink === val.asc_getType()) { - var hyperlinkRangeTmp = t.model.getRange2(val.asc_getRange()); - if (null === hyperlinkRangeTmp) { + val.hyperlinkModel._updateLocation(); + if (null === val.hyperlinkModel.LocationRangeBbox) { bIsUpdate = false; break; } @@ -9169,13 +9147,11 @@ t.model.excludeHiddenRows(false); if (bIsUpdate) { - t.canChangeColWidth = canChangeColWidth; t._updateRange(item); t.canChangeColWidth = c_oAscCanChangeColWidth.none; hasUpdates = true; - bIsUpdate = false; } }); @@ -9212,7 +9188,7 @@ checkRange.push(new asc_Range(activeCell.col, activeCell.row, activeCell.col, activeCell.row)); } else { this.model.selectionRange.ranges.forEach(function (item) { - checkRange.push(item.getAllRange()); + checkRange.push(item.clone()); }); } @@ -9485,7 +9461,9 @@ //paste from excel binary if(fromBinaryExcel) { - selectData = t._pasteData(isLargeRange, fromBinaryExcel, pasteContent, bIsUpdate); + AscCommonExcel.executeInR1C1Mode(false, function () { + selectData = t._pasteData(isLargeRange, fromBinaryExcel, pasteContent, bIsUpdate); + }); } else { @@ -9518,22 +9496,30 @@ } } - selectData = t._pasteData(isLargeRange, fromBinaryExcel, pasteContent, bIsUpdate); + AscCommonExcel.executeInR1C1Mode(false, function () { + selectData = t._pasteData(isLargeRange, fromBinaryExcel, pasteContent, bIsUpdate); + }); AscCommonExcel.g_clipboardExcel.pasteProcessor._insertImagesFromBinaryWord(t, pasteContent, oImageMap); } else { oImageMap = pasteContent.props.oImageMap; if (window["NATIVE_EDITOR_ENJINE"]) { //TODO для мобильных приложений - не рабочий код! AscCommon.ResetNewUrls(data, oObjectsForDownload.aUrls, oObjectsForDownload.aBuilderImagesByUrl, oImageMap); - selectData = t._pasteData(isLargeRange, fromBinaryExcel, pasteContent, bIsUpdate); + AscCommonExcel.executeInR1C1Mode(false, function () { + selectData = t._pasteData(isLargeRange, fromBinaryExcel, pasteContent, bIsUpdate); + }); AscCommonExcel.g_clipboardExcel.pasteProcessor._insertImagesFromBinaryWord(t, pasteContent, oImageMap); } else { - selectData = t._pasteData(isLargeRange, fromBinaryExcel, pasteContent, bIsUpdate); + AscCommonExcel.executeInR1C1Mode(false, function () { + selectData = t._pasteData(isLargeRange, fromBinaryExcel, pasteContent, bIsUpdate); + }); AscCommonExcel.g_clipboardExcel.pasteProcessor._insertImagesFromBinaryWord(t, pasteContent, oImageMap); } } } else { - selectData = t._pasteData(isLargeRange, fromBinaryExcel, pasteContent, bIsUpdate); + AscCommonExcel.executeInR1C1Mode(false, function () { + selectData = t._pasteData(isLargeRange, fromBinaryExcel, pasteContent, bIsUpdate); + }); } History.EndTransaction(); @@ -9789,7 +9775,7 @@ //если кратны, то обрабатываем if (widthArea % widthPasteFr === 0 && heightArea % heightPasteFr === 0) { //Для случая, когда выделен весь диапазон, запрещаю множественную вставку - if(arn.getType() !== window["Asc"].c_oAscSelectionType.RangeMax) { + if(arn.getType() !== window["Asc"].c_oAscSelectionType.RangeMax && arn.getType() !== window["Asc"].c_oAscSelectionType.RangeCol && arn.getType() !== window["Asc"].c_oAscSelectionType.RangeRow) { isMultiple = true; } } else if (firstCell.hasMerged() !== null)//в противном случае ошибка @@ -10253,12 +10239,12 @@ rangeStyle.val = newVal.getValue(); } + var sFormula = newVal.getFormula(); + var sId = newVal.getName(); var value2 = newVal.getValue2(); - var isFromula = false; + var isFromula = !!sFormula; for (var nF = 0; nF < value2.length; nF++) { - if (value2[nF] && value2[nF].sId) { - isFromula = true; - } else if (value2[nF] && value2[nF].format && value2[nF].format.getSkip()) { + if (value2[nF] && value2[nF].format && value2[nF].format.getSkip()) { skipFormat = true; } else if (value2[nF] && value2[nF].format && !value2[nF].format.getSkip()) { noSkipVal = nF; @@ -10273,21 +10259,21 @@ } //formula - if (newVal.getFormula() && !isOneMerge) { + if (sFormula && !isOneMerge) { var offset, callAdress; if(specialPasteProps.transpose && transposeRange) { //для transpose необходимо брать offset перевернутого range - callAdress = new AscCommon.CellAddress(value2[0].sId); + callAdress = new AscCommon.CellAddress(sId); offset = new AscCommon.CellBase(transposeRange.bbox.r1 - callAdress.row + 1, transposeRange.bbox.c1 - callAdress.col + 1); } else { - callAdress = new AscCommon.CellAddress(value2[0].sId); + callAdress = new AscCommon.CellAddress(sId); offset = new AscCommon.CellBase(range.bbox.r1 - callAdress.row + 1, range.bbox.c1 - callAdress.col + 1); } - var assemb, _p_ = new AscCommonExcel.parserFormula(value2[0].sFormula, null, t.model); + var assemb, _p_ = new AscCommonExcel.parserFormula(sFormula, null, t.model); if (_p_.parse()) { //array-formula @@ -10833,7 +10819,7 @@ var t = this; var arn = this.model.selectionRange.getLast().clone(); - var checkRange = arn.getAllRange(); + var checkRange = arn.clone(); var range, count; var oRecalcType = AscCommonExcel.recalcType.recalc; @@ -11779,8 +11765,11 @@ // ToDo multiselect defined names var selectionLast = this.model.selectionRange.getLast(); mc = selectionLast.isOneCell() ? this.model.getMergedByCell(selectionLast.r1, selectionLast.c1) : null; + var oldR1C1mode = AscCommonExcel.g_R1C1Mode; + AscCommonExcel.g_R1C1Mode = false; var defName = this.model.workbook.editDefinesNames(null, new Asc.asc_CDefName(reference, parserHelp.get3DRef(this.model.getName(), (mc || selectionLast).getAbsName()))); + AscCommonExcel.g_R1C1Mode = oldR1C1mode; if (defName) { this._isLockedDefNames(null, defName.getNodeId()); @@ -12090,7 +12079,7 @@ }; WorksheetView.prototype.openCellEditor = - function (editor, fragments, cursorPos, isFocus, isClearCell, isHideCursor, isQuickInput, selectionRange) { + function (editor, cursorPos, isFocus, isClearCell, isHideCursor, isQuickInput, selectionRange) { var t = this, col, row, c, fl, mc, bg, isMerged; if (selectionRange) { @@ -12154,12 +12143,10 @@ // Скрываем окно редактирования комментария this.model.workbook.handlers.trigger("asc_onHideComment"); - if (fragments === undefined) { - var _fragmentsTmp = c.getValueForEdit2(); - fragments = []; - for (var i = 0; i < _fragmentsTmp.length; ++i) { - fragments.push(_fragmentsTmp[i].clone()); - } + var _fragmentsTmp = c.getValueForEdit2(); + var fragments = []; + for (var i = 0; i < _fragmentsTmp.length; ++i) { + fragments.push(_fragmentsTmp[i].clone()); } var arrAutoComplete = this.getCellAutoCompleteValues(cell, kMaxAutoCompleteCellEdit); @@ -12180,7 +12167,7 @@ isAddPersentFormat: isQuickInput && Asc.c_oAscNumFormatType.Percent === c.getNumFormatType(), autoComplete: arrAutoComplete, autoCompleteLC: arrAutoCompleteLC, - cellName: c.getName(), + bbox: c.bbox, cellNumFormat: c.getNumFormatType(), saveValueCallback: function (val, flags, callback) { var saveCellValueCallback = function(success) { @@ -12258,7 +12245,7 @@ if (0 < w) { arrLeftS.push(_left); } - _left += w; + _left -= w; } if (_c2 > vro.vr.c2) { @@ -12316,7 +12303,7 @@ copyValue = []; copyValue[0] = new AscCommonExcel.Fragment({text: text, format: v[0].format.clone()}); - var bSuccess = t.openCellEditor(editor, /*fragments*/undefined, /*cursorPos*/undefined, isFocus, /*isClearCell*/ + var bSuccess = t.openCellEditor(editor, /*cursorPos*/undefined, isFocus, /*isClearCell*/ true, /*isHideCursor*/false, /*isQuickInput*/false, selectionRange); if (bSuccess) { editor.paste(copyValue, cursorPos); @@ -12412,7 +12399,7 @@ if (editor.formulaIsOperator() && cFEWSO && cFEWSO.model.getId() != this.model.getId()) { sheetName = parserHelp.getEscapeSheetName(this.model.getName()) + "!"; } - editor.enterCellRange(/*defName || */sheetName + currentRange.getAllRange().getName()); + editor.enterCellRange(/*defName || */sheetName + currentRange.getName()); for (var tmpRange, i = 0; i < this.arrActiveFormulaRanges.length; ++i) { tmpRange = this.arrActiveFormulaRanges[i]; diff --git a/common/Charts/DrawingObjects.js b/common/Charts/DrawingObjects.js index b6a7459088..f03dad8fc4 100644 --- a/common/Charts/DrawingObjects.js +++ b/common/Charts/DrawingObjects.js @@ -3510,17 +3510,9 @@ function DrawingObjects() { //} } - var startCell = new AscCommon.CellAddress(final_bbox.r1, final_bbox.c1, 0); - var endCell = new AscCommon.CellAddress(final_bbox.r2, final_bbox.c2, 0); + var sRef = (new Asc.Range(final_bbox.c1, final_bbox.r1, final_bbox.c2, final_bbox.r2)).getName(AscCommonExcel.referenceType.A); + options.range = parserHelp.get3DRef(worksheet.model.sName, sRef); - - if (startCell && endCell) - { - var sStartCellId = startCell.getIDAbsolute(), sEndCellId = endCell.getIDAbsolute(); - options.range = parserHelp.get3DRef(worksheet.model.sName, - sStartCellId === sEndCellId ? sStartCellId : - sStartCellId + ':' + sEndCellId); - } var chartSeries = AscFormat.getChartSeries(worksheet.model, options, catHeadersBBox, serHeadersBBox); drawingObject.rebuildSeriesFromAsc(chartSeries); _this.controller.startRecalculate(); @@ -3654,9 +3646,17 @@ function DrawingObjects() { }; _this.getDrawingBase = function(graphicId) { - for (var i = 0; i < aObjects.length; i++) { - if ( aObjects[i].graphicObject.Id == graphicId ) - return aObjects[i]; + var oDrawing = AscCommon.g_oTableId.Get_ById(graphicId); + if(oDrawing){ + while(oDrawing.group){ + oDrawing = oDrawing.group; + } + } + if(oDrawing.drawingBase){ + for (var i = 0; i < aObjects.length; i++) { + if ( aObjects[i] === oDrawing.drawingBase ) + return aObjects[i]; + } } return null; }; @@ -4170,11 +4170,15 @@ function DrawingObjects() { var graphicObjectInfo = _this.controller.isPointInDrawingObjects( pxToMm(x - offsets.x), pxToMm(y - offsets.y) ); // console.log('isPointInDrawingObjects: ' + pxToMm(x - offsets.x) + ':' + pxToMm(y - offsets.y)); if ( graphicObjectInfo && graphicObjectInfo.objectId ) { - objectInfo.id = graphicObjectInfo.objectId; objectInfo.object = _this.getDrawingBase(graphicObjectInfo.objectId); - objectInfo.cursor = graphicObjectInfo.cursorType; - objectInfo.hyperlink = graphicObjectInfo.hyperlink; - + if(objectInfo.object){ + objectInfo.id = graphicObjectInfo.objectId; + objectInfo.cursor = graphicObjectInfo.cursorType; + objectInfo.hyperlink = graphicObjectInfo.hyperlink; + } + else{ + return null; + } return objectInfo; } } diff --git a/common/CollaborativeEditingBase.js b/common/CollaborativeEditingBase.js index d144f634e1..5e2e62d3ff 100644 --- a/common/CollaborativeEditingBase.js +++ b/common/CollaborativeEditingBase.js @@ -233,11 +233,11 @@ function CCollaborativeEditingBase() this.m_aCursorsToUpdate = {}; // Курсоры, которые нужно обновить после принятия изменений this.m_aCursorsToUpdateShortId = {}; - //// CollaborativeEditing LOG - //this.m_nErrorLog_PointChangesCount = 0; - //this.m_nErrorLog_SavedPCC = 0; - //this.m_nErrorLog_CurPointIndex = -1; - //this.m_nErrorLog_SumIndex = 0; + // // CollaborativeEditing LOG + // this.m_nErrorLog_PointChangesCount = 0; + // this.m_nErrorLog_SavedPCC = 0; + // this.m_nErrorLog_CurPointIndex = -1; + // this.m_nErrorLog_SumIndex = 0; this.m_bFast = false; @@ -386,8 +386,8 @@ CCollaborativeEditingBase.prototype.Apply_OtherChanges = function() var Changes = this.m_aChanges[i]; Changes.Apply_Data(); - //// CollaborativeEditing LOG - //this.m_nErrorLog_PointChangesCount++; + // // CollaborativeEditing LOG + // this.m_nErrorLog_PointChangesCount++; } this.private_ClearChanges(); diff --git a/common/Drawings/CommonController.js b/common/Drawings/CommonController.js index 08d41ba53a..2f1b1c2a82 100644 --- a/common/Drawings/CommonController.js +++ b/common/Drawings/CommonController.js @@ -3570,43 +3570,47 @@ DrawingObjectsController.prototype = { var ws_view = this.drawingObjects.getWorksheet(); var parsed_formula = parserHelp.parse3DRef(sRange); - var ws = ws_view.model.workbook.getWorksheetByName(parsed_formula.sheet); - var new_bbox; - var range_object = ws.getRange2(parsed_formula.range); - if(range_object) + if(parsed_formula) { - new_bbox = range_object.bbox; - } - if( parsed_formula && ws && new_bbox ) - { - var oCommonBBox = chart_space.getCommonBBox(); - var b_equal_bbox = oCommonBBox && oCommonBBox.r1 === new_bbox.r1 - && oCommonBBox.r2 === new_bbox.r2 - && oCommonBBox.c1 === new_bbox.c1 - && oCommonBBox.c2 === new_bbox.c2; - var b_equal_ws = chart_space.bbox && chart_space.bbox.worksheet === ws; - var b_equal_vert = chart_space.bbox && chartSettings.getInColumns() === !chart_space.bbox.seriesBBox.bVert; - var bLimit = (Math.abs(new_bbox.r2 - new_bbox.r1) > 4096 || Math.abs(new_bbox.c2 - new_bbox.c1) > 4096); - if(!(chart_space.bbox && chart_space.bbox.seriesBBox && b_equal_ws - && b_equal_bbox && b_equal_vert ) && !bLimit) + var ws = ws_view.model.workbook.getWorksheetByName(parsed_formula.sheet); + var new_bbox; + var range_object = ws.getRange2(parsed_formula.range); + if(range_object) { - var catHeadersBBox, serHeadersBBox; - if(chart_space.bbox && b_equal_bbox && b_equal_ws && !b_equal_vert) + new_bbox = range_object.bbox; + } + if(ws && new_bbox ) + { + var oCommonBBox = chart_space.getCommonBBox(); + var b_equal_bbox = oCommonBBox && oCommonBBox.r1 === new_bbox.r1 + && oCommonBBox.r2 === new_bbox.r2 + && oCommonBBox.c1 === new_bbox.c1 + && oCommonBBox.c2 === new_bbox.c2; + var b_equal_ws = chart_space.bbox && chart_space.bbox.worksheet === ws; + var b_equal_vert = chart_space.bbox && chartSettings.getInColumns() === !chart_space.bbox.seriesBBox.bVert; + + var bLimit = (Math.abs(new_bbox.r2 - new_bbox.r1) > 4096 || Math.abs(new_bbox.c2 - new_bbox.c1) > 4096); + if(!(chart_space.bbox && chart_space.bbox.seriesBBox && b_equal_ws + && b_equal_bbox && b_equal_vert ) && !bLimit) { - if(chart_space.bbox.catBBox) - serHeadersBBox = {r1: chart_space.bbox.catBBox.r1, r2: chart_space.bbox.catBBox.r2, - c1: chart_space.bbox.catBBox.c1, c2: chart_space.bbox.catBBox.c2}; - if(chart_space.bbox.serBBox) - catHeadersBBox = {r1: chart_space.bbox.serBBox.r1, r2: chart_space.bbox.serBBox.r2, - c1: chart_space.bbox.serBBox.c1, c2: chart_space.bbox.serBBox.c2}; - } - var chartSeries = AscFormat.getChartSeries(ws_view.model, chartSettings, catHeadersBBox, serHeadersBBox); - //chart_space.clearFormatting(true); - b_clear_formatting = true; - chart_space.rebuildSeriesFromAsc(chartSeries); - if(chart_space.pivotSource){ - chart_space.setPivotSource(null); + var catHeadersBBox, serHeadersBBox; + if(chart_space.bbox && b_equal_bbox && b_equal_ws && !b_equal_vert) + { + if(chart_space.bbox.catBBox) + serHeadersBBox = {r1: chart_space.bbox.catBBox.r1, r2: chart_space.bbox.catBBox.r2, + c1: chart_space.bbox.catBBox.c1, c2: chart_space.bbox.catBBox.c2}; + if(chart_space.bbox.serBBox) + catHeadersBBox = {r1: chart_space.bbox.serBBox.r1, r2: chart_space.bbox.serBBox.r2, + c1: chart_space.bbox.serBBox.c1, c2: chart_space.bbox.serBBox.c2}; + } + var chartSeries = AscFormat.getChartSeries(ws_view.model, chartSettings, catHeadersBBox, serHeadersBBox); + //chart_space.clearFormatting(true); + b_clear_formatting = true; + chart_space.rebuildSeriesFromAsc(chartSeries); + if(chart_space.pivotSource){ + chart_space.setPivotSource(null); + } } } } diff --git a/common/Drawings/Format/ChartSpace.js b/common/Drawings/Format/ChartSpace.js index 08fb8f86cb..04c8d792c7 100644 --- a/common/Drawings/Format/ChartSpace.js +++ b/common/Drawings/Format/ChartSpace.js @@ -1968,7 +1968,11 @@ CChartSpace.prototype.changeLine = function (line) CChartSpace.prototype.parseChartFormula = function(sFormula) { if(this.worksheet && typeof sFormula === "string" && sFormula.length > 0){ - return AscCommonExcel.getRangeByRef(sFormula, this.worksheet); + var res, ws = this.worksheet; + AscCommonExcel.executeInR1C1Mode(false, function () { + res = AscCommonExcel.getRangeByRef(sFormula, ws); + }); + return res; } return []; }; @@ -3222,15 +3226,10 @@ CChartSpace.prototype.getRangeObjectStr = function() } } } - var startCell = new CellAddress(r1, c1, 0); - var endCell = new CellAddress(r2, c2, 0); - var sStartCellId, sEndCellId; if (this.bbox.worksheet) { - sStartCellId = startCell.getIDAbsolute(); - sEndCellId = endCell.getIDAbsolute(); - ret.range = parserHelp.get3DRef(this.bbox.worksheet.sName, sStartCellId === sEndCellId ? - sStartCellId : sStartCellId + ':' + sEndCellId); + var sRef = (new Asc.Range(c1, r1, c2, r2)).getName(AscCommonExcel.referenceType.A); + ret.range = parserHelp.get3DRef(this.bbox.worksheet.sName, sRef); } } return ret; @@ -14924,17 +14923,15 @@ function parseSeriesHeaders (ws, rangeBBox) { } function getChartSeries (worksheet, options, catHeadersBBox, serHeadersBBox) { - var api = window["Asc"]["editor"]; - var ws = null; - var range = null; + var ws, range; var result = parserHelp.parse3DRef(options.range); - if (null !== result) { + if (result) { ws = worksheet.workbook.getWorksheetByName(result.sheet); if (ws) range = ws.getRange2(result.range); } - if (null === range) + if (!range) return null; var bbox = range.getBBox0(); diff --git a/common/Drawings/Format/Format.js b/common/Drawings/Format/Format.js index fdd1281414..db5df704f6 100644 --- a/common/Drawings/Format/Format.js +++ b/common/Drawings/Format/Format.js @@ -3779,7 +3779,14 @@ CUniFill.prototype = { if (this.fill.type == c_oAscFill.FILL_TYPE_SOLID) { - return this.fill.color.RGBA; + if(this.fill.color) + { + return this.fill.color.RGBA; + } + else + { + return new FormatRGBAColor(); + } } if (this.fill.type == c_oAscFill.FILL_TYPE_GRAD) { diff --git a/common/Drawings/States.js b/common/Drawings/States.js index ca750d189f..253da84dad 100644 --- a/common/Drawings/States.js +++ b/common/Drawings/States.js @@ -207,7 +207,7 @@ StartAddNewShape.prototype = this.drawingObjects.updateOverlay(); if(Asc["editor"]) { - if(!e.fromWindow) + if(!e.fromWindow || this.bStart) { Asc["editor"].asc_endAddShape(); } diff --git a/common/HtmlFileInternal/AllFonts.js b/common/HtmlFileInternal/AllFonts.js new file mode 100644 index 0000000000..424cff6ac0 --- /dev/null +++ b/common/HtmlFileInternal/AllFonts.js @@ -0,0 +1,7 @@ +window["__fonts_files"] = [ +]; + +window["__fonts_infos"] = [ +]; + +window["g_fonts_selection_bin"] = "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"; diff --git a/common/Local/common.js b/common/Local/common.js index 5660d8f550..2d1574d4f8 100644 --- a/common/Local/common.js +++ b/common/Local/common.js @@ -319,20 +319,48 @@ AscCommon.InitDragAndDrop = function(oHtmlElement, callback) { oHtmlElement["ondragover"] = function (e) { e.preventDefault(); e.dataTransfer.dropEffect = AscCommon.CanDropFiles(e) ? 'copy' : 'none'; + if (e.dataTransfer.dropEffect == "copy") + { + var editor = window["Asc"]["editor"] ? window["Asc"]["editor"] : window.editor; + editor.beginInlineDropTarget(e); + } return false; }; oHtmlElement["ondrop"] = function (e) { e.preventDefault(); - + + var editor = window["Asc"]["editor"] ? window["Asc"]["editor"] : window.editor; + editor.endInlineDropTarget(e); + var _files = window["AscDesktopEditor"]["GetDropFiles"](); - for (var i = 0; i < _files.length; i++) + if (0 == _files.length) { - if (window["AscDesktopEditor"]["IsImageFile"](_files[i])) - { - window["DesktopOfflineAppDocumentAddImageEnd"](_files[i]); - break; - } + // test html + var htmlValue = e.dataTransfer.getData("text/html"); + if (htmlValue) + { + editor["pluginMethod_PasteHtml"](htmlValue); + return; + } + + var textValue = e.dataTransfer.getData("text/plain"); + if (textValue) + { + editor["pluginMethod_PasteText"](textValue); + return; + } } + else + { + for (var i = 0; i < _files.length; i++) + { + if (window["AscDesktopEditor"]["IsImageFile"](_files[i])) + { + window["DesktopOfflineAppDocumentAddImageEnd"](_files[i]); + break; + } + } + } }; } }; @@ -513,37 +541,51 @@ window["DesktopAfterOpen"] = function(_api) }); _api.sendEvent('asc_onSpellCheckInit', [ - "1027", - "1029", - "1030", - "1031", - "1032", - "1033", - "1036", - "1038", - "1040", - "1042", - "1043", - "1044", - "1045", - "1046", - "1048", - "1049", - "1051", - "1053", - "1055", - "1058", - "1062", - "1063", - "1066", - "1068", - "2055", - "2057", - "2068", - "2070", - "3079", - "3081", - "3082" + "1026", + "1027", + "1029", + "1030", + "1031", + "1032", + "1033", + "1036", + "1038", + "1040", + "1042", + "1043", + "1044", + "1045", + "1046", + "1048", + "1049", + "1050", + "1051", + "1053", + "1055", + "1057", + "1058", + "1060", + "1062", + "1063", + "1066", + "1068", + "1069", + "1087", + "1104", + "1110", + "1134", + "2051", + "2055", + "2057", + "2068", + "2070", + "3079", + "3081", + "3082", + "4105", + "7177", + "9242", + "10266" ]); }; @@ -616,10 +658,17 @@ _proto.prototype["pluginMethod_OnEncryption"] = function(obj) { if ("" != obj["password"]) { - var _param = ("" + AscCommon.CopyPasteCorrectString(obj["password"]) + ""); _editor.currentPassword = obj["password"]; - window["AscDesktopEditor"]["SetAdvancedOptions"](_param); + if (window.isNativeOpenPassword) + { + window["AscDesktopEditor"]["NativeViewerOpen"](obj["password"]); + } + else + { + var _param = ("" + AscCommon.CopyPasteCorrectString(obj["password"]) + ""); + window["AscDesktopEditor"]["SetAdvancedOptions"](_param); + } } else { diff --git a/common/SerializeChart.js b/common/SerializeChart.js index a2144acc4e..e6b7a0547f 100644 --- a/common/SerializeChart.js +++ b/common/SerializeChart.js @@ -7782,7 +7782,7 @@ BinaryChartReader.prototype.ReadCT_PictureStackUnit = function (type, length, va } BinaryChartReader.prototype.CorrectDlbls = function(oLbls){ - if(oLbls){ + if(oLbls && oLbls.bDelete !== true){ if(null === oLbls.showLegendKey){ oLbls.setShowLegendKey(false); } diff --git a/common/SerializeCommonWordExcel.js b/common/SerializeCommonWordExcel.js index 5224c3f6da..98cfc702a5 100644 --- a/common/SerializeCommonWordExcel.js +++ b/common/SerializeCommonWordExcel.js @@ -873,7 +873,7 @@ var g_oCellAddressUtils = new CellAddressUtils(); CellBase.prototype.isEqual = function(cell) { return this.row === cell.row && this.col === cell.col; }; - CellBase.prototype.isEmpty = function(cell) { + CellBase.prototype.isEmpty = function() { return 0 === this.row && 0 === this.col; }; CellBase.prototype.getName = function() { diff --git a/common/TableIdChanges.js b/common/TableIdChanges.js index 7f3429524e..f6be8acfa5 100644 --- a/common/TableIdChanges.js +++ b/common/TableIdChanges.js @@ -188,14 +188,15 @@ }; CChangesTableIdDescription.prototype.Load = function(Color) { + // var CollaborativeEditing = AscCommon.CollaborativeEditing; // // CollaborativeEditing LOG // console.log("ItemsCount2 " + CollaborativeEditing.m_nErrorLog_PointChangesCount); // if (CollaborativeEditing.m_nErrorLog_PointChangesCount !== CollaborativeEditing.m_nErrorLog_SavedPCC) // console.log("========================= BAD Changes Count in Point ============================="); - // if (CollaborativeEditing.m_nErrorLog_CurPointIndex + 1 !== PointIndex && 0 !== PointIndex) + // if (CollaborativeEditing.m_nErrorLog_CurPointIndex + 1 !== this.PointIndex && 0 !== this.PointIndex) // console.log("========================= BAD Point index ========================================"); // var bBadSumIndex = false; - // if (0 === PointIndex) + // if (0 === this.PointIndex) // { // CollaborativeEditing.m_nErrorLog_SumIndex = 0; // } @@ -203,31 +204,31 @@ // { // // Потому что мы не учитываем данное изменение // CollaborativeEditing.m_nErrorLog_SumIndex += CollaborativeEditing.m_nErrorLog_SavedPCC + 1; - // if (PointIndex === StartPoint) + // if (this.PointIndex === this.StartPoint) // { - // if (CollaborativeEditing.m_nErrorLog_SumIndex !== SumIndex) + // if (CollaborativeEditing.m_nErrorLog_SumIndex !== this.SumIndex) // bBadSumIndex = true; // // console.log("SumIndex2 " + CollaborativeEditing.m_nErrorLog_SumIndex); - // CollaborativeEditing.m_nErrorLog_SumIndex = SumIndex; + // CollaborativeEditing.m_nErrorLog_SumIndex = this.SumIndex; // } // } // // console.log("----------------------------"); - // console.log("FileCheckSum " + FileCheckSum); - // console.log("FileSize " + FileSize); - // console.log("Description " + Description + " " + - // AscDFH.GetHistoryPointStringDescription(Description)); - // console.log("PointIndex " + PointIndex); - // console.log("StartPoint " + StartPoint); - // console.log("LastPoint " + LastPoint); - // console.log("ItemsCount " + ItemsCount); - // console.log("SumIndex " + SumIndex); - // console.log("DeletedIndex " + (-10 === DeletedIndex ? null : DeletedIndex)); + // console.log("FileCheckSum " + this.FileCheckSum); + // console.log("FileSize " + this.FileSize); + // console.log("Description " + this.Description + " " + + // AscDFH.GetHistoryPointStringDescription(this.Description)); + // console.log("PointIndex " + this.PointIndex); + // console.log("StartPoint " + this.StartPoint); + // console.log("LastPoint " + this.LastPoint); + // console.log("ItemsCount " + this.ItemsCount); + // console.log("SumIndex " + this.SumIndex); + // console.log("DeletedIndex " + (-10 === this.DeletedIndex ? null : this.DeletedIndex)); // // -1 Чтобы не учитывалось данное изменение - // CollaborativeEditing.m_nErrorLog_SavedPCC = ItemsCount; + // CollaborativeEditing.m_nErrorLog_SavedPCC = this.ItemsCount; // CollaborativeEditing.m_nErrorLog_PointChangesCount = -1; - // CollaborativeEditing.m_nErrorLog_CurPointIndex = PointIndex; + // CollaborativeEditing.m_nErrorLog_CurPointIndex = this.PointIndex; // if (bBadSumIndex) // console.log("========================= BAD Sum index =========================================="); }; diff --git a/common/apiBase.js b/common/apiBase.js index b7c7145dac..c2495a219d 100644 --- a/common/apiBase.js +++ b/common/apiBase.js @@ -1367,13 +1367,6 @@ } this.onEndLoadFile(null); } - - // for crypt mode (end waiting all system plugins) - if (this.asc_initAdvancedOptions_params) - { - window["asc_initAdvancedOptions"].apply(window, this.asc_initAdvancedOptions_params); - delete this.asc_initAdvancedOptions_params; - } }; baseEditorsApi.prototype.onEndLoadFile = function(result) { @@ -1570,6 +1563,17 @@ this.pluginsManager.onEnableMouseEvents(isEnable); }; + baseEditorsApi.prototype.isEnabledDropTarget = function() + { + return true; + }; + baseEditorsApi.prototype.beginInlineDropTarget = function(e) + { + }; + baseEditorsApi.prototype.endInlineDropTarget = function(e) + { + }; + baseEditorsApi.prototype["pluginMethod_GetFontList"] = function() { return AscFonts.g_fontApplication.g_fontSelections.SerializeList(); @@ -1592,6 +1596,12 @@ _elem.style.fontWeight = (true === textPr.TextPr.Bold) ? "bold" : "normal"; _elem.style.fontStyle = (true === textPr.TextPr.Italic) ? "italic" : "normal"; + + var _color = textPr.TextPr.Color; + if (_color) + _elem.style.color = "rgb(" + _color.r + "," + _color.g + "," + _color.b + ")"; + else + _elem.style.color = "rgb(0,0,0)"; } } else if (this.editorId == c_oEditorId.Spreadsheet) @@ -1693,9 +1703,19 @@ { var _param = ("" + AscCommon.CopyPasteCorrectString(obj["password"]) + ""); _editor.currentPassword = obj["password"]; + _editor.currentDocumentHash = obj["hash"]; + _editor.currentDocumentInfo = obj["docinfo"]; AscCommon.EncryptionWorker.isPasswordCryptoPresent = true; - window["AscDesktopEditor"]["SetAdvancedOptions"](_param); + + if (window.isNativeOpenPassword) + { + window["AscDesktopEditor"]["NativeViewerOpen"](obj["password"]); + } + else + { + window["AscDesktopEditor"]["SetAdvancedOptions"](_param); + } } else { @@ -2094,12 +2114,12 @@ baseEditorsApi.prototype.asc_setCurrentPassword = function(password) { this.currentPassword = password; - this.asc_Save(false); + this.asc_Save(false, undefined, true); }; baseEditorsApi.prototype.asc_resetPassword = function() { this.currentPassword = ""; - this.asc_Save(false); + this.asc_Save(false, undefined, true); }; baseEditorsApi.prototype.asc_setMacros = function(sData) diff --git a/common/apiCommon.js b/common/apiCommon.js index b83d67ef19..9218505851 100644 --- a/common/apiCommon.js +++ b/common/apiCommon.js @@ -143,7 +143,8 @@ none: "none", text: "text", ole: "ole", - html: "html" + html: "html", + desktop: "desktop" }; /** @constructor */ diff --git a/common/commonDefines.js b/common/commonDefines.js index 986be9a181..d09d7efa2d 100644 --- a/common/commonDefines.js +++ b/common/commonDefines.js @@ -47,6 +47,7 @@ var c_nMaxDownloadTitleLen= 255; var c_nVersionNoBase64 = 10; var c_dMaxParaRunContentLength = 256; + var c_rUneditableTypes = /^(?:(pdf|djvu|xps))$/; //files type for Saving & DownloadAs var c_oAscFileType = { @@ -1430,6 +1431,7 @@ window['Asc']['c_nMaxDownloadTitleLen'] = window['Asc'].c_nMaxDownloadTitleLen = c_nMaxDownloadTitleLen; window['Asc']['c_nVersionNoBase64'] = window['Asc'].c_nVersionNoBase64 = c_nVersionNoBase64; window['Asc']['c_dMaxParaRunContentLength'] = window['Asc'].c_dMaxParaRunContentLength = c_dMaxParaRunContentLength; + window['Asc']['c_rUneditableTypes'] = window['Asc'].c_rUneditableTypes = c_rUneditableTypes; window['Asc']['c_oAscFileType'] = window['Asc'].c_oAscFileType = c_oAscFileType; prot = c_oAscFileType; prot['UNKNOWN'] = prot.UNKNOWN; diff --git a/common/docscoapi.js b/common/docscoapi.js index d44024ada6..bdd18bf49b 100644 --- a/common/docscoapi.js +++ b/common/docscoapi.js @@ -834,8 +834,8 @@ } }; - DocsCoApi.prototype._reSaveChanges = function() { - this.saveChanges(this.arrayChanges, this.currentIndex, undefined, undefined, true); + DocsCoApi.prototype._reSaveChanges = function(reSaveType) { + this.saveChanges(this.arrayChanges, this.currentIndex, undefined, undefined, reSaveType); }; DocsCoApi.prototype.saveChanges = function(arrayChanges, currentIndex, deleteIndex, excelAdditionalInfo, reSave) { @@ -864,7 +864,7 @@ var t = this; this.saveCallbackErrorTimeOutId = window.setTimeout(function() { t.saveCallbackErrorTimeOutId = null; - t._reSaveChanges(); + t._reSaveChanges(1); }, this.errorTimeOutSave); // Выставляем состояние сохранения @@ -967,7 +967,7 @@ }; DocsCoApi.prototype._send = function(data, useEncryption) { - if (!useEncryption && data && data["type"] == "saveChanges" && AscCommon.EncryptionWorker) + if (!useEncryption && data && data["type"] == "saveChanges" && AscCommon.EncryptionWorker && AscCommon.EncryptionWorker.isInit()) return AscCommon.EncryptionWorker.sendChanges(this, data, AscCommon.EncryptionMessageType.Encrypt); if (data !== null && typeof data === "object") { @@ -1138,7 +1138,7 @@ } return; } - if (!useEncryption && AscCommon.EncryptionWorker) + if (!useEncryption && AscCommon.EncryptionWorker && AscCommon.EncryptionWorker.isInit()) return AscCommon.EncryptionWorker.sendChanges(this, data, AscCommon.EncryptionMessageType.Decrypt); if (data["locks"]) { var bSendEnd = false; @@ -1445,9 +1445,10 @@ this._applyPrebuffered(); if (this._isReSaveAfterAuth) { + this._isReSaveAfterAuth = false; var callbackAskSaveChanges = function(e) { if (false === e["saveLock"]) { - t._reSaveChanges(); + t._reSaveChanges(2); } else { setTimeout(function() { t.askSaveChanges(callbackAskSaveChanges); @@ -1730,6 +1731,7 @@ // Очищаем предыдущий таймер if (null !== this.saveCallbackErrorTimeOutId) { clearTimeout(this.saveCallbackErrorTimeOutId); + this.saveCallbackErrorTimeOutId = null; } } this._state = ConnectionState.Reconnect; diff --git a/common/downloaderfiles.js b/common/downloaderfiles.js index b9906883bc..e56f9f2676 100644 --- a/common/downloaderfiles.js +++ b/common/downloaderfiles.js @@ -41,8 +41,8 @@ function FileHandler() { this.get = function ( file ) { if ( AscCommon.AscBrowser.isAppleDevices ) { + //this approach replaces tab, iframe approach do nothing var downloadWindow = window.open( file, "_parent", "", false ); - downloadWindow.document.title = "Downloading..."; window.focus(); } else { diff --git a/common/editorscommon.js b/common/editorscommon.js index 0c91c15a4d..6dde3a9ee0 100644 --- a/common/editorscommon.js +++ b/common/editorscommon.js @@ -565,11 +565,7 @@ var stream = initStreamFromResponse(httpRequest); if (stream) { oResult.bSerFormat = checkStreamSignature(stream, Signature); - if (oResult.bSerFormat) { - oResult.data = stream; - } else { - oResult.data = stream; - } + oResult.data = stream; } else { bError = true; } @@ -643,12 +639,7 @@ if (stream) { oResult.bSerFormat = checkStreamSignature(stream, Signature); - - if (oResult.bSerFormat) { - oResult.data = stream; - } else { - oResult.data = stream; - } + oResult.data = stream; } else { bError = true; } @@ -1464,8 +1455,13 @@ { oHtmlElement["ondragover"] = function (e) { - e.preventDefault(); + e.preventDefault(); e.dataTransfer.dropEffect = CanDropFiles(e) ? 'copy' : 'none'; + if (e.dataTransfer.dropEffect == "copy") + { + var editor = window["Asc"]["editor"] ? window["Asc"]["editor"] : window.editor; + editor.beginInlineDropTarget(e); + } return false; }; oHtmlElement["ondrop"] = function (e) @@ -1473,6 +1469,61 @@ e.preventDefault(); var files = e.dataTransfer.files; var nError = ValidateUploadImage(files); + + var editor = window["Asc"]["editor"] ? window["Asc"]["editor"] : window.editor; + editor.endInlineDropTarget(e); + + if (nError == c_oAscServerError.UploadCountFiles) + { + try + { + // test html + var htmlValue = e.dataTransfer.getData("text/html"); + if (htmlValue && !AscCommon.AscBrowser.isIE) + { + // text html! + var index = htmlValue.indexOf("StartHTML"); + var indexHtml = htmlValue.indexOf(" 0 && indexHtml > 0 && index < indexHtml) + htmlValue = htmlValue.substr(indexHtml); + + editor["pluginMethod_PasteHtml"](htmlValue); + return; + } + } + catch(err) + { + } + + try + { + var textValue = e.dataTransfer.getData("text/plain"); + if (textValue) + { + editor["pluginMethod_PasteText"](textValue); + return; + } + } + catch(err) + { + } + + try + { + var textValue = e.dataTransfer.getData("Text"); + if (textValue) + { + editor["pluginMethod_PasteText"](textValue); + return; + } + } + catch(err) + { + } + } + callback(mapAscServerErrorToAscError(nError), files); }; } @@ -1660,13 +1711,17 @@ function CanDropFiles(event) { + var editor = window["Asc"]["editor"] ? window["Asc"]["editor"] : window.editor; + if (!editor.isEnabledDropTarget()) + return false; + var bRes = false; if (event.dataTransfer.types) { for (var i = 0, length = event.dataTransfer.types.length; i < length; ++i) { - var type = event.dataTransfer.types[i]; - if (type == "Files") + var type = event.dataTransfer.types[i].toLowerCase(); + if (type == "files") { if (event.dataTransfer.items) { @@ -1694,6 +1749,11 @@ bRes = true; break; } + else if (type == "text" || type == "text/plain" || type == "text/html") + { + bRes = true; + break; + } } } return bRes; @@ -1761,10 +1821,14 @@ rx_operators = /^ *[-+*\/^&%<=>:] */, rg = new XRegExp("^((?:_xlfn.)?[\\p{L}\\d.]+ *)[-+*/^&%<=>:;\\(\\)]"), rgRange = /^(\$?[A-Za-z]+\$?\d+:\$?[A-Za-z]+\$?\d+)(?:[-+*\/^&%<=>: ;),]|$)/, + rgRangeR1C1 = /^(([Rr]{1}(\[)?(-?\d*)(\])?)([Cc]{1}(\[)?(-?\d*)(\])?):([Rr]{1}(\[)?(-?\d*)(\])?)([Cc]{1}(\[)?(-?\d*)(\])?))([-+*\/^&%<=>: ;),]|$)/, rgCols = /^(\$?[A-Za-z]+:\$?[A-Za-z]+)(?:[-+*\/^&%<=>: ;),]|$)/, + rgColsR1C1 = /^(([Cc]{1}(\[)?(-?\d*)(\])?(:)?)([Cc]?(\[)?(-?\d*)(\])?))([-+*\/^&%<=>: ;),]|$)/, rgRows = /^(\$?\d+:\$?\d+)(?:[-+*\/^&%<=>: ;),]|$)/, + rgRowsR1C1 = /^(([Rr]{1}(\[)?(-?\d*)(\])?(:)?)([Rr]?(\[)?(-?\d*)(\])?))([-+*\/^&%<=>: ;),]|$)/, rx_ref = /^ *(\$?[A-Za-z]{1,3}\$?(\d{1,7}))([-+*\/^&%<=>: ;),]|$)/, rx_refAll = /^(\$?[A-Za-z]+\$?(\d+))([-+*\/^&%<=>: ;),]|$)/, + rx_refR1C1 = /^(([Rr]{1}(\[)?(-?\d*)(\])?)([Cc]{1}(\[)?(-?\d*)(\])?))([-+*\/^&%<=>: ;),]|$)/, rx_ref3D_non_quoted = new XRegExp("^(?[" + str_namedRanges + "][" + str_namedRanges + "\\d.]*)(:(?[" + str_namedRanges + "][" + str_namedRanges + "\\d.]*))?!", "i"), rx_ref3D_quoted = new XRegExp("^'(?(?:''|[^\\[\\]'\\/*?:])*)(?::(?(?:''|[^\\[\\]'\\/*?:])*))?'!"), rx_ref3D = new XRegExp("^(?[^:]+)(:(?[^:]+))?!"), @@ -1936,6 +2000,52 @@ } return false; }; + parserHelper.prototype.convertFromR1C1 = function (r, c, isAbsRow, isAbsCol) + { + var activeCell = AscCommonExcel.g_ActiveCell; + var colStr, rowStr, res = ""; + if(r !== null && c !== null) { + if(isNaN(r)) { + r = 0; + isAbsRow = false; + } + if(isNaN(c)) { + c = 0; + isAbsCol = false; + } + + colStr = g_oCellAddressUtils.colnumToColstrFromWsView(!isAbsCol && activeCell ? activeCell.c1 + 1 + c : c); + rowStr = !isAbsRow && activeCell ? activeCell.r1 + 1 + r : r; + if(isAbsCol) { + colStr = "$" + colStr; + } + if(isAbsRow) { + rowStr = "$" + rowStr; + } + res = colStr + rowStr; + } else if(c !== null) { + if(isNaN(c)) { + c = 0; + isAbsCol = false; + } + colStr = g_oCellAddressUtils.colnumToColstrFromWsView(!isAbsCol && activeCell ? activeCell.c1 + 1 + c : c); + if(isAbsCol) { + colStr = "$" + colStr; + } + res = colStr; + } else if(r !== null) { + if(isNaN(r)) { + r = 0; + isAbsRow = false; + } + rowStr = !isAbsRow && activeCell ? activeCell.r1 + 1 + r + "" : r + ""; + if(isAbsRow) { + rowStr = "$" + rowStr; + } + res = rowStr; + } + return res; + }; parserHelper.prototype.isArea = function (formula, start_pos) { if (this instanceof parserHelper) @@ -1943,16 +2053,98 @@ this._reset(); } + var checkAbs = function(val1, val2) { + var res = null; + if(val1 === val2 && val1 === undefined) { + res = true; + } else if(val1 === "[" && val2 === "]") { + res = false; + } + return res; + }; + + var checkMatchRowCol = function(tempMatch) { + var res = true; + + if(tempMatch[9] !== "" && tempMatch[9] !== undefined && !(tempMatch[6] === ":" && tempMatch[7] !== "" && tempMatch[7] !== undefined)) { + res = false; + } else if(tempMatch[7] !== "" && tempMatch[7] !== undefined && tempMatch[6] !== ":") { + res = false; + } else if((tempMatch[7] === "" || tempMatch[7] === undefined) && tempMatch[6] === ":") { + res = false; + } + + return res; + }; + + var R1C1Mode = AscCommonExcel.g_R1C1Mode; var subSTR = formula.substring(start_pos); - var match = subSTR.match(rgRange) || subSTR.match(rgCols) || subSTR.match(rgRows); - if (match != null) - { - var m0 = match[1].split(":"); - if (g_oCellAddressUtils.getCellAddress(m0[0]).isValid() && g_oCellAddressUtils.getCellAddress(m0[1]).isValid()) + + var match; + if(!R1C1Mode) { + match = subSTR.match(rgRange) || subSTR.match(rgCols) || subSTR.match(rgRows); + if (match != null) { - this.pCurrPos += match[1].length; - this.operand_str = match[1]; - return true; + var m0 = match[1].split(":"); + if (g_oCellAddressUtils.getCellAddress(m0[0]).isValid() && g_oCellAddressUtils.getCellAddress(m0[1]).isValid()) + { + this.pCurrPos += match[1].length; + this.operand_str = match[1]; + return true; + } + } + } else { + var abs1Val, abs2Val, abs3Val, abs4Val, ref1, ref2; + if((match = subSTR.match(rgRangeR1C1)) !== null) { + abs1Val = checkAbs(match[3], match[5]); + abs2Val = checkAbs(match[7], match[9]); + abs3Val = checkAbs(match[11], match[13]); + abs4Val = checkAbs(match[15], match[17]); + if(abs1Val !== null && abs2Val !== null && abs3Val !== null && abs4Val !== null) { + ref1 = AscCommon.parserHelp.convertFromR1C1(parseInt(match[4]), parseInt(match[8]), abs1Val, abs2Val); + ref2 = AscCommon.parserHelp.convertFromR1C1(parseInt(match[12]), parseInt(match[16]), abs3Val, abs4Val); + if (g_oCellAddressUtils.getCellAddress(ref1).isValid() && g_oCellAddressUtils.getCellAddress(ref2).isValid()) { + this.pCurrPos += match[1].length; + this.operand_str = match[1]; + this.real_str = ref1 + ":" + ref2; + + return true; + } + } + } else if(null != (match = subSTR.match(rgColsR1C1))) { + if(checkMatchRowCol(match)) { + abs1Val = checkAbs(match[3], match[5]); + abs2Val = checkAbs(match[8], match[10]); + if(abs1Val !== null && abs2Val !== null) { + + ref1 = AscCommon.parserHelp.convertFromR1C1(null, parseInt(match[4]), null, abs1Val); + ref2 = "" !== match[7] ? AscCommon.parserHelp.convertFromR1C1(null, parseInt(match[9]), null, abs2Val) : ref1; + if (g_oCellAddressUtils.getCellAddress(ref1).isValid() && g_oCellAddressUtils.getCellAddress(ref2).isValid()) { + this.pCurrPos += match[1].length; + this.operand_str = match[1]; + this.real_str = ref1 + ":" + ref2; + + return true; + } + } + } + } else if(null != (match = subSTR.match(rgRowsR1C1))) { + if(checkMatchRowCol(match)) { + abs1Val = checkAbs(match[3], match[5]); + abs2Val = checkAbs(match[8], match[10]); + if(abs1Val !== null && abs2Val !== null) { + + ref1 = AscCommon.parserHelp.convertFromR1C1(parseInt(match[4]), null, abs1Val); + ref2 = "" !== match[7] ? AscCommon.parserHelp.convertFromR1C1(parseInt(match[9]), null, abs2Val) : ref1; + if (g_oCellAddressUtils.getCellAddress(ref1).isValid() && g_oCellAddressUtils.getCellAddress(ref2).isValid()) { + this.pCurrPos += match[1].length; + this.operand_str = match[1]; + this.real_str = ref1 + ":" + ref2; + + return true; + } + } + } } } return false; @@ -1963,27 +2155,48 @@ { this._reset(); } - var substr = formula.substring(start_pos); - var match = substr.match(rx_ref); - if (match != null) - { - var m0 = match[0], m1 = match[1], m2 = match[2]; - if (g_oCellAddressUtils.getCellAddress(m1).isValid() /*match.length >= 3 && g_oCellAddressUtils.colstrToColnum( m1.substr( 0, (m1.length - m2.length) ) ) <= gc_nMaxCol && parseInt( m2 ) <= gc_nMaxRow*/) + + var R1C1Mode = AscCommonExcel.g_R1C1Mode; + var substr = formula.substring(start_pos), match; + var m0, m1; + if(!R1C1Mode) { + match = substr.match(rx_ref); + if (match != null) { - this.pCurrPos += m0.indexOf(" ") > -1 ? m0.length - 1 : m1.length; - this.operand_str = m1; - return true; - } - else if (allRef) - { - match = substr.match(rx_refAll); - if ((match != null || match != undefined) && match.length >= 3) + m0 = match[0]; + m1 = match[1]; + if (g_oCellAddressUtils.getCellAddress(m1).isValid()) { - var m1 = match[1]; - this.pCurrPos += m1.length; + this.pCurrPos += m0.indexOf(" ") > -1 ? m0.length - 1 : m1.length; this.operand_str = m1; return true; } + else if (allRef) + { + match = substr.match(rx_refAll); + if ((match != null || match != undefined) && match.length >= 3) + { + m1 = match[1]; + this.pCurrPos += m1.length; + this.operand_str = m1; + return true; + } + } + } + } else { + match = substr.match(rx_refR1C1); + + if (match != null && (match[3] === match[5] || (match[3] === "[" && match[5] === "]")) && (match[7] === match[9] || (match[7] === "[" && match[9] === "]"))) { + m0 = match[0]; + m1 = match[1]; + var ref = AscCommon.parserHelp.convertFromR1C1(parseInt(match[4]), parseInt(match[8]), !match[3], !match[7]); + if (g_oCellAddressUtils.getCellAddress(ref).isValid()) { + this.pCurrPos += m0.indexOf(" ") > -1 ? m0.length - 1 : m1.length; + this.operand_str = m1; + this.real_str = ref; + + return true; + } } } @@ -2395,25 +2608,23 @@ */ parserHelper.prototype.checkDataRange = function (model, wb, dialogType, dataRange, fullCheck, isRows, chartType) { - var sDataRange = dataRange, sheetModel; + var result, range, sheetModel; if (Asc.c_oAscSelectionDialogType.Chart === dialogType) { - if(dataRange) + result = parserHelp.parse3DRef(dataRange); + if (result) { - dataRange = parserHelp.parse3DRef(dataRange); - if (dataRange) + sheetModel = model.getWorksheetByName(result.sheet); + if (sheetModel) { - sheetModel = model.getWorksheetByName(dataRange.sheet); + range = AscCommonExcel.g_oRangeCache.getAscRange(result.range); } } - if (null === dataRange || !sheetModel) - return Asc.c_oAscError.ID.DataRangeError; - dataRange = AscCommonExcel.g_oRangeCache.getAscRange(dataRange.range); } else - dataRange = AscCommonExcel.g_oRangeCache.getAscRange(dataRange); + range = AscCommonExcel.g_oRangeCache.getAscRange(dataRange); - if (null === dataRange) + if (!range) return Asc.c_oAscError.ID.DataRangeError; if (fullCheck) @@ -2428,20 +2639,20 @@ var intervalValues, intervalSeries; if (isRows) { - intervalSeries = dataRange.r2 - dataRange.r1 + 1; - intervalValues = dataRange.c2 - dataRange.c1 + 1; + intervalSeries = range.r2 - range.r1 + 1; + intervalValues = range.c2 - range.c1 + 1; } else { - intervalSeries = dataRange.c2 - dataRange.c1 + 1; - intervalValues = dataRange.r2 - dataRange.r1 + 1; + intervalSeries = range.c2 - range.c1 + 1; + intervalValues = range.r2 - range.r1 + 1; } if (Asc.c_oAscChartTypeSettings.stock === chartType) { var chartSettings = new Asc.asc_ChartSettings(); chartSettings.putType(Asc.c_oAscChartTypeSettings.stock); - chartSettings.putRange(sDataRange); + chartSettings.putRange(dataRange); chartSettings.putInColumns(!isRows); var chartSeries = AscFormat.getChartSeries(sheetModel, chartSettings).series; if (minStockVal !== chartSeries.length || !chartSeries[0].Val || !chartSeries[0].Val.NumCache || chartSeries[0].Val.NumCache.length < minStockVal) @@ -2457,13 +2668,13 @@ else if (Asc.c_oAscSelectionDialogType.FormatTable === dialogType) { // ToDo убрать эту проверку, заменить на более грамотную после правки функции _searchFilters - if (true === wb.getWorksheet().model.autoFilters.isRangeIntersectionTableOrFilter(dataRange)) + if (true === wb.getWorksheet().model.autoFilters.isRangeIntersectionTableOrFilter(range)) return Asc.c_oAscError.ID.AutoFilterDataRangeError; } else if (Asc.c_oAscSelectionDialogType.FormatTableChangeRange === dialogType) { // ToDo убрать эту проверку, заменить на более грамотную после правки функции _searchFilters - var checkChangeRange = wb.getWorksheet().af_checkChangeRange(dataRange); + var checkChangeRange = wb.getWorksheet().af_checkChangeRange(range); if (null !== checkChangeRange) return checkChangeRange; } @@ -3590,6 +3801,8 @@ }; function CEncryptionData() { + this._init = false; + this.arrData = []; this.arrImages = []; @@ -3610,6 +3823,16 @@ this.isPasswordCryptoPresent = false; + this.init = function() + { + this._init = true; + }; + + this.isInit = function() + { + return this._init; + }; + this.isNeedCrypt = function() { if (!window.g_asc_plugins) @@ -4179,6 +4402,11 @@ window["asc_initAdvancedOptions"] = function(_code, _file_hash, _docInfo) { + if (window.isNativeOpenPassword) + { + return window["NativeFileOpen_error"](window.isNativeOpenPassword, _file_hash, _docInfo); + } + var _editor = window["Asc"]["editor"] ? window["Asc"]["editor"] : window.editor; if (_code == 90 || _code == 91) @@ -4461,13 +4689,32 @@ window["buildCryptoFile_End"] = function(url, error, hash, password) window.g_asc_plugins.sendToEncryption({"type": "setPasswordByFile", "hash": hash, "password": password}); }; -window["NativeFileOpen_error"] = function(error) +window["NativeFileOpen_error"] = function(error, _file_hash, _docInfo) { var _api = window["Asc"]["editor"] ? window["Asc"]["editor"] : window.editor; if ("password" == error) { window.isNativeOpenPassword = error; + + if (window["AscDesktopEditor"] && (0 !== window["AscDesktopEditor"]["CryptoMode"]) && !_api.isLoadFullApi) + { + // ждем инициализации + _api.asc_initAdvancedOptions_params = []; + _api.asc_initAdvancedOptions_params.push(90); + _api.asc_initAdvancedOptions_params.push(_file_hash); + _api.asc_initAdvancedOptions_params.push(_docInfo); + return; + } + + if (AscCommon.EncryptionWorker.isNeedCrypt() && !window.checkPasswordFromPlugin) + { + window.checkPasswordFromPlugin = true; + window.g_asc_plugins.sendToEncryption({ "type": "getPasswordByFile", "hash": _file_hash, "docinfo": _docInfo }); + return; + } + + window.checkPasswordFromPlugin = false; _api._onNeedParams(undefined, true); } else if ("error" == error) diff --git a/common/plugins.js b/common/plugins.js index 50a9c44a05..15cf38ce0b 100644 --- a/common/plugins.js +++ b/common/plugins.js @@ -97,6 +97,11 @@ this.guidAsyncMethod = ""; this.sendsToInterface = {}; + + this.sendEncryptionDataCounter = 0; + + if (this.api.isCheckCryptoReporter) + this.checkCryptoReporter(); } CPluginsManager.prototype = @@ -514,6 +519,35 @@ // теперь выше задается break; } + case Asc.EPluginDataType.desktop: + { + if (plugin.variations[runObject.currentVariation].initData == "encryption") + { + if (this.api.isReporterMode) + { + this.sendEncryptionDataCounter++; + if (2 <= this.sendEncryptionDataCounter) + { + runObject.startData.setAttribute("data", { + "type": "setPassword", + "password": this.api.currentPassword, + "hash": this.api.currentDocumentHash, + "docinfo": this.api.currentDocumentInfo + }); + } + } + + // for crypt mode (end waiting all system plugins) + if (this.api.asc_initAdvancedOptions_params) + { + window["asc_initAdvancedOptions"].apply(window, this.api.asc_initAdvancedOptions_params); + delete this.api.asc_initAdvancedOptions_params; + // already sended in asc_initAdvancedOptions + return; + } + } + break; + } } } else @@ -724,6 +758,19 @@ if (!_plugin) return; this.init(_plugin.guid, data); + }, + checkCryptoReporter : function() + { + this.sendEncryptionDataCounter++; + if (2 <= this.sendEncryptionDataCounter) + { + this.sendToEncryption({ + "type" : "setPassword", + "password" : this.api.currentPassword, + "hash" : this.api.currentDocumentHash, + "docinfo" : this.api.currentDocumentInfo + }); + } } /* -------------------------------- */ }; diff --git a/common/wordcopypaste.js b/common/wordcopypaste.js index a23e9853d1..e38d817ed8 100644 --- a/common/wordcopypaste.js +++ b/common/wordcopypaste.js @@ -2879,18 +2879,19 @@ PasteProcessor.prototype = return obj; }, - _checkNumberingText: function(paragraph, NumInfo, numbering) + _checkNumberingText: function(paragraph, oNumInfo, oNumPr) { - if (numbering) + if (oNumPr) { - var oNum = this.oLogicDocument.GetNumbering().GetNum(paragraph.Pr.NumPr.NumId); - var NumTextPr = paragraph.Get_CompiledPr2(false).TextPr.Copy(); - var lvl = oNum.GetLvl(paragraph.Pr.NumPr.Lvl); - var numberingText = this._getNumberingText(lvl, NumInfo, NumTextPr, lvl); + var oNum = this.oLogicDocument.GetNumbering().GetNum(oNumPr.NumId); + if (oNum) + { + var sNumberingText = oNum.GetText(oNumPr.Lvl, oNumInfo); - var newParaRun = new ParaRun(); - addTextIntoRun(newParaRun, numberingText, false, true, true); - paragraph.Internal_Content_Add(0, newParaRun, false); + var newParaRun = new ParaRun(); + addTextIntoRun(newParaRun, sNumberingText, false, true, true); + paragraph.Internal_Content_Add(0, newParaRun, false); + } } }, @@ -9450,7 +9451,18 @@ function Check_LoadingDataBeforePrepaste(_api, _fonts, _images, _callback) aImagesToDownload.push(src); } else if (!g_oDocumentUrls.getImageUrl(src) && !g_oDocumentUrls.getImageLocal(src)) - aImagesToDownload.push(src); + { + if (window["AscDesktopEditor"] && (undefined !== window["AscDesktopEditor"]["CryptoMode"]) && (window["AscDesktopEditor"]["CryptoMode"] > 0)) + { + // local image (open crypto file) + if (0 != src.indexOf("image")) + aImagesToDownload.push(src); + } + else + { + aImagesToDownload.push(src); + } + } } if (aImagesToDownload.length > 0) { diff --git a/slide/Editor/CollaborativeEditing.js b/slide/Editor/CollaborativeEditing.js index 89377cea59..1431dd4bb7 100644 --- a/slide/Editor/CollaborativeEditing.js +++ b/slide/Editor/CollaborativeEditing.js @@ -57,7 +57,7 @@ function CCollaborativeEditing() CCollaborativeEditing.prototype = Object.create(AscCommon.CCollaborativeEditingBase.prototype); CCollaborativeEditing.prototype.constructor = CCollaborativeEditing; -CCollaborativeEditing.prototype.Send_Changes = function(IsUserSave, AdditionalInfo) +CCollaborativeEditing.prototype.Send_Changes = function(IsUserSave, AdditionalInfo, IsUpdateInterface, isAfterAskSave) { // Пересчитываем позиции this.Refresh_DCChanges(); @@ -209,7 +209,7 @@ CCollaborativeEditing.prototype.Send_Changes = function(IsUserSave, AdditionalIn editor.CoAuthoringApi.saveChanges(aChanges, deleteIndex, AdditionalInfo, editor.canUnlockDocument2, bCollaborative); AscCommon.History.CanNotAddChanges = true; } else - editor.CoAuthoringApi.unLockDocument(true, editor.canUnlockDocument2, null, bCollaborative); + editor.CoAuthoringApi.unLockDocument(!!isAfterAskSave, editor.canUnlockDocument2, null, bCollaborative); editor.canUnlockDocument2 = false; if ( -1 === this.m_nUseType ) diff --git a/slide/Editor/Format/Notes.js b/slide/Editor/Format/Notes.js index ad5492367d..e80ebc0dad 100644 --- a/slide/Editor/Format/Notes.js +++ b/slide/Editor/Format/Notes.js @@ -290,7 +290,7 @@ { var _ret = []; var oBodyShape = this.getBodyShape(); - if(oBodyShape){ + if(oBodyShape && oBodyShape.getObjectType() === AscDFH.historyitem_type_Shape){ _ret.push(oBodyShape); } return _ret; diff --git a/slide/Editor/Format/Slide.js b/slide/Editor/Format/Slide.js index a2725f4bc6..14f34152ab 100644 --- a/slide/Editor/Format/Slide.js +++ b/slide/Editor/Format/Slide.js @@ -1128,7 +1128,11 @@ Slide.prototype = } else{ this.notesShape = this.notes.getBodyShape(); + if(this.notesShape && this.notesShape.getObjectType() !== AscDFH.historyitem_type_Shape){ + this.notesShape = null; + } } + if(this.notesShape){ this.notes.slide = this; this.notes.graphicObjects.selectObject(this.notesShape, 0); diff --git a/slide/Local/api.js b/slide/Local/api.js index 4932af1e88..bbf447ea3d 100644 --- a/slide/Local/api.js +++ b/slide/Local/api.js @@ -153,9 +153,9 @@ Asc['asc_docs_api'].prototype.SetDocumentModified = function(bValue) } }; -Asc['asc_docs_api'].prototype.asc_Save = function (isNoUserSave, isSaveAs) +Asc['asc_docs_api'].prototype.asc_Save = function (isNoUserSave, isSaveAs, isResaveAttack) { - if (!isSaveAs && !this.asc_isDocumentCanSave()) + if (!isResaveAttack && !isSaveAs && !this.asc_isDocumentCanSave()) return; if (true !== isNoUserSave) @@ -230,6 +230,11 @@ window["DesktopOfflineAppDocumentEndSave"] = function(error, hash, password) { if (window.g_asc_plugins && window.g_asc_plugins.isRunnedEncryption()) { + editor._callbackPluginEndAction = function() + { + this._callbackPluginEndAction = null; + window["AscDesktopEditor"]["buildCryptedEnd"](true); + }; window.g_asc_plugins.sendToEncryption({"type": "setPasswordByFile", "hash": hash, "password": password}); } } diff --git a/slide/api.js b/slide/api.js index b5f7a41f30..56102c268d 100644 --- a/slide/api.js +++ b/slide/api.js @@ -1051,37 +1051,51 @@ if (window["AscDesktopEditor"]["IsLocalFile"] && !window["AscDesktopEditor"]["IsLocalFile"]()) { this.sendEvent('asc_onSpellCheckInit', [ - "1027", - "1029", - "1030", - "1031", - "1032", - "1033", - "1036", - "1038", - "1040", - "1042", - "1043", - "1044", - "1045", - "1046", - "1048", - "1049", - "1051", - "1053", - "1055", - "1058", - "1062", - "1063", - "1066", - "1068", - "2055", - "2057", - "2068", - "2070", - "3079", - "3081", - "3082" + "1026", + "1027", + "1029", + "1030", + "1031", + "1032", + "1033", + "1036", + "1038", + "1040", + "1042", + "1043", + "1044", + "1045", + "1046", + "1048", + "1049", + "1050", + "1051", + "1053", + "1055", + "1057", + "1058", + "1060", + "1062", + "1063", + "1066", + "1068", + "1069", + "1087", + "1104", + "1110", + "1134", + "2051", + "2055", + "2057", + "2068", + "2070", + "3079", + "3081", + "3082", + "4105", + "7177", + "9242", + "10266" ]); } } else { @@ -2080,7 +2094,7 @@ background-repeat: no-repeat;\ UserId : this.CoAuthoringApi.getUserConnectionId(), UserShortId : this.DocInfo.get_UserId(), CursorInfo : CursorInfo - }); + }, undefined, true); } }; asc_docs_api.prototype._autoSaveInner = function () { @@ -4963,9 +4977,11 @@ background-repeat: no-repeat;\ { if (this.isApplyChangesOnOpenEnabled) { - if (AscCommon.EncryptionWorker && !AscCommon.EncryptionWorker.isChangesHandled) + if (AscCommon.EncryptionWorker) { - return AscCommon.EncryptionWorker.handleChanges(AscCommon.CollaborativeEditing.m_aChanges, this, this.OpenDocumentEndCallback); + AscCommon.EncryptionWorker.init(); + if (!AscCommon.EncryptionWorker.isChangesHandled) + return AscCommon.EncryptionWorker.handleChanges(AscCommon.CollaborativeEditing.m_aChanges, this, this.OpenDocumentEndCallback); } this.isApplyChangesOnOpenEnabled = false; @@ -6248,6 +6264,13 @@ background-repeat: no-repeat;\ data: _this.reporterStartObject }; + if (AscCommon.EncryptionWorker.isPasswordCryptoPresent) + { + _msg_.data["cryptoCurrentPassword"] = this.currentPassword; + _msg_.data["cryptoCurrentDocumentHash"] = this.currentDocumentHash; + _msg_.data["cryptoCurrentDocumentInfo"] = this.currentDocumentInfo; + } + this.reporterStartObject = null; _this.sendToReporter(JSON.stringify(_msg_)); @@ -6330,6 +6353,19 @@ background-repeat: no-repeat;\ this.translateManager = AscCommon.translateManager.init(data["translate"]); this.reporterTranslates = [data["translations"]["reset"], data["translations"]["slideOf"], data["translations"]["endSlideshow"], data["translations"]["finalMessage"]]; + + if (data["cryptoCurrentPassword"]) + { + this.currentPassword = data["cryptoCurrentPassword"]; + this.currentDocumentHash = data["cryptoCurrentDocumentHash"]; + this.currentDocumentInfo = data["cryptoCurrentDocumentInfo"]; + + if (this.pluginsManager) + this.pluginsManager.checkCryptoReporter(); + else + this.isCheckCryptoReporter = true; + } + if (!this.WordControl) return; @@ -6721,7 +6757,8 @@ background-repeat: no-repeat;\ { if (error || !result.bSerFormat) { - t.sendEvent("asc_onError", c_oAscError.ID.Unknown, c_oAscError.Level.Critical); + var err = error ? c_oAscError.ID.Unknown : c_oAscError.ID.ConvertationOpenError; + t.sendEvent("asc_onError", err, c_oAscError.Level.Critical); return; } t.onEndLoadFile(result); diff --git a/word/Drawing/DrawingDocument.js b/word/Drawing/DrawingDocument.js index 1ddf01f416..2fad81702a 100644 --- a/word/Drawing/DrawingDocument.js +++ b/word/Drawing/DrawingDocument.js @@ -3859,7 +3859,10 @@ function CDrawingDocument() this.m_oWordControl.m_oLogicDocument.Set_TargetPos(x, y, pageIndex); - if (this.UpdateTargetFromPaint === false) + if(window["NATIVE_EDITOR_ENJINE"]) + return; + + if (this.UpdateTargetFromPaint === false && this.m_lCurrentPage != -1) { this.UpdateTargetCheck = true; return; @@ -8738,11 +8741,23 @@ function CDrawingDocument() this.InlineTextTrack = null; this.InlineTextTrackPage = -1; } - this.EndTrackText = function () + this.EndTrackText = function (isOnlyMoveTarget) { this.InlineTextTrackEnabled = false; - this.m_oWordControl.m_oLogicDocument.OnEndTextDrag(this.InlineTextTrack, AscCommon.global_keyboardEvent.CtrlKey); + if (true !== isOnlyMoveTarget) + this.m_oWordControl.m_oLogicDocument.OnEndTextDrag(this.InlineTextTrack, AscCommon.global_keyboardEvent.CtrlKey); + else if (this.InlineTextTrack) + { + var Paragraph = this.InlineTextTrack.Paragraph; + Paragraph.Cursor_MoveToNearPos(this.InlineTextTrack); + Paragraph.Document_SetThisElementCurrent(false); + + this.m_oWordControl.m_oLogicDocument.Document_UpdateSelectionState(); + this.m_oWordControl.m_oLogicDocument.Document_UpdateInterfaceState(); + this.m_oWordControl.m_oLogicDocument.Document_UpdateRulersState(); + } + this.InlineTextTrack = null; this.InlineTextTrackPage = -1; } diff --git a/word/Drawing/HtmlPage.js b/word/Drawing/HtmlPage.js index 4ae84f2f41..598b48e2c4 100644 --- a/word/Drawing/HtmlPage.js +++ b/word/Drawing/HtmlPage.js @@ -3444,7 +3444,7 @@ function CEditorPage(api) } oThis.m_oLogicDocument.ContinueCheckSpelling(); - oThis.m_oLogicDocument.Continue_TrackRevisions(); + oThis.m_oLogicDocument.ContinueTrackRevisions(); }; this.OnScroll = function() { diff --git a/word/Drawing/documentrenderer.js b/word/Drawing/documentrenderer.js index b8a78aba8e..4214a97466 100644 --- a/word/Drawing/documentrenderer.js +++ b/word/Drawing/documentrenderer.js @@ -656,6 +656,9 @@ CDocMeta.prototype = InitDocument : function(drDoc) { + drDoc.m_arrPages = []; + drDoc.m_lPagesCount = 0; + for (var i = 0; i < this.PagesCount; i++) { var _page = new AscCommon.CPage(); @@ -665,7 +668,6 @@ CDocMeta.prototype = drDoc.m_arrPages[i] = _page; } - drDoc.m_arrPages.splice(0, drDoc.m_lPagesCount); drDoc.m_lCurrentPage = 0; drDoc.m_lPagesCount = this.PagesCount; drDoc.m_lCountCalculatePages = this.PagesCount; @@ -3347,6 +3349,8 @@ CDocMeta.prototype = OnMouseUp : function() { + if (this.Selection.IsSelection) + editor.sendEvent("asc_onSelectionEnd"); this.Selection.IsSelection = false; }, @@ -3478,6 +3482,8 @@ CDocMeta.prototype = this.OnUpdateSelection(); } } + + editor.sendEvent("asc_onSelectionEnd"); }, selectAllCheckStart : function() diff --git a/word/Editor/CollaborativeEditing.js b/word/Editor/CollaborativeEditing.js index e024cd1c69..6f5ac65684 100644 --- a/word/Editor/CollaborativeEditing.js +++ b/word/Editor/CollaborativeEditing.js @@ -59,7 +59,7 @@ CWordCollaborativeEditing.prototype.Clear = function() AscCommon.CCollaborativeEditingBase.prototype.Clear.apply(this, arguments); this.Remove_AllForeignCursors(); }; -CWordCollaborativeEditing.prototype.Send_Changes = function(IsUserSave, AdditionalInfo, IsUpdateInterface) +CWordCollaborativeEditing.prototype.Send_Changes = function(IsUserSave, AdditionalInfo, IsUpdateInterface, isAfterAskSave) { // Пересчитываем позиции this.Refresh_DCChanges(); @@ -137,7 +137,7 @@ CWordCollaborativeEditing.prototype.Send_Changes = function(IsUserSave, Addition } else { - editor.CoAuthoringApi.unLockDocument(true, editor.canUnlockDocument2, null, bCollaborative); + editor.CoAuthoringApi.unLockDocument(!!isAfterAskSave, editor.canUnlockDocument2, null, bCollaborative); } editor.canUnlockDocument2 = false; diff --git a/word/Editor/Document.js b/word/Editor/Document.js index 619a10bafd..293428ae06 100644 --- a/word/Editor/Document.js +++ b/word/Editor/Document.js @@ -2384,8 +2384,7 @@ CDocument.prototype.Recalculate = function(_RecalcData, isForceStrictRecalc) clearTimeout(this.FullRecalc.Id); this.FullRecalc.Id = null; this.DrawingDocument.OnEndRecalculate(false); - - isUseTimeout = true; + } } else if (null !== this.HdrFtrRecalc.Id) { @@ -6084,16 +6083,21 @@ CDocument.prototype.Interface_Update_HdrFtrPr = function() this.Api.sync_HeadersAndFootersPropCallback(this.HdrFtr.Get_Props()); } }; -CDocument.prototype.Internal_GetContentPosByXY = function(X, Y, PageNum, ColumnsInfo) +CDocument.prototype.Internal_GetContentPosByXY = function(X, Y, nCurPage, ColumnsInfo) { if (!ColumnsInfo) ColumnsInfo = {Column : 0, ColumnsCount : 1}; - if (undefined === PageNum || null === PageNum) - PageNum = this.CurPage; + if (undefined === nCurPage || null === nCurPage) + nCurPage = this.CurPage; + + if (nCurPage >= this.Pages.length) + nCurPage = this.Pages.length - 1; + else if (nCurPage < 0) + nCurPage = 0; // Сначала проверим Flow-таблицы - var FlowTable = this.DrawingObjects.getTableByXY(X, Y, PageNum, this); + var FlowTable = this.DrawingObjects.getTableByXY(X, Y, nCurPage, this); if (null != FlowTable) { var ElementPos; @@ -6126,10 +6130,10 @@ CDocument.prototype.Internal_GetContentPosByXY = function(X, Y, PageNum, Columns } // Теперь проверим пустые параграфы с окончанием секций - var SectCount = this.Pages[PageNum].EndSectionParas.length; + var SectCount = this.Pages[nCurPage].EndSectionParas.length; for (var Index = 0; Index < SectCount; ++Index) { - var Item = this.Pages[PageNum].EndSectionParas[Index]; + var Item = this.Pages[nCurPage].EndSectionParas[Index]; var Bounds = Item.Pages[0].Bounds; if (Y < Bounds.Bottom && Y > Bounds.Top && X > Bounds.Left && X < Bounds.Right) @@ -6142,7 +6146,7 @@ CDocument.prototype.Internal_GetContentPosByXY = function(X, Y, PageNum, Columns } // Сначала мы определим секцию и колонку, в которую попали - var Page = this.Pages[PageNum]; + var Page = this.Pages[nCurPage]; var SectionIndex = 0; for (var SectionsCount = Page.Sections.length; SectionIndex < SectionsCount - 1; ++SectionIndex) @@ -6151,7 +6155,7 @@ CDocument.prototype.Internal_GetContentPosByXY = function(X, Y, PageNum, Columns break; } - var PageSection = this.Pages[PageNum].Sections[SectionIndex]; + var PageSection = this.Pages[nCurPage].Sections[SectionIndex]; var ColumnsCount = PageSection.Columns.length; var ColumnIndex = 0; for (; ColumnIndex < ColumnsCount - 1; ++ColumnIndex) @@ -6513,13 +6517,6 @@ CDocument.prototype.Selection_SetEnd = function(X, Y, MouseEvent) var ContentPos = this.Internal_GetContentPosByXY(X, Y); - var OldPos = this.CurPos.ContentPos; - var OldInnerPos = null; - if (type_Paragraph === this.Content[OldPos].GetType()) - OldInnerPos = this.Content[OldPos].CurPos.ContentPos; - else //if ( type_Table === this.Content[OldPos].GetType() ) - OldInnerPos = this.Content[OldPos].CurCell; - this.CurPos.ContentPos = ContentPos; var OldEndPos = this.Selection.EndPos; this.Selection.EndPos = ContentPos; @@ -7387,7 +7384,7 @@ CDocument.prototype.OnKeyDown = function(e) })) { this.Create_NewHistoryPoint(AscDFH.historydescription_Document_AddTabToMath); - ParaMath.Handle_Tab(!e.ShiftKey); + ParaMath.HandleTab(!e.ShiftKey); this.Recalculate(); } } @@ -11147,6 +11144,10 @@ CDocument.prototype.private_MoveCursorDown = function(StartX, StartY, AddToSelec var StartPage = this.CurPage; var CurY = StartY; + // Если данная страница еще не успела пересчитаться, тогда не даем смещаться + if (StartPage >= this.Pages.length) + return true; + var PageH = this.Pages[this.CurPage].Height; this.TurnOff_InterfaceEvents(); @@ -11232,6 +11233,10 @@ CDocument.prototype.private_MoveCursorUp = function(StartX, StartY, AddToSelect) var StartPage = this.CurPage; var CurY = StartY; + // Если данная страница еще не успела пересчитаться, тогда не даем смещаться + if (StartPage >= this.Pages.length) + return true; + var PageH = this.Pages[this.CurPage].Height; this.TurnOff_InterfaceEvents(); @@ -12789,7 +12794,7 @@ CDocument.prototype.Statistics_Stop = function() // Private //---------------------------------------------------------------------------------------------------------------------- CDocument.prototype.EndPreview_MailMergeResult = function(){}; -CDocument.prototype.Continue_TrackRevisions = function(){}; +CDocument.prototype.ContinueTrackRevisions = function(){}; CDocument.prototype.Set_TrackRevisions = function(bTrack){}; //---------------------------------------------------------------------------------------------------------------------- // Функции для работы с составным вводом @@ -12800,7 +12805,7 @@ CDocument.prototype.Set_TrackRevisions = function(bTrack){}; */ CDocument.prototype.Begin_CompositeInput = function() { - if (false === this.Document_Is_SelectionLocked(changestype_Paragraph_Content, null, true)) + if (false === this.Document_Is_SelectionLocked(changestype_Paragraph_Content, null, true, this.IsFormFieldEditing())) { this.Create_NewHistoryPoint(AscDFH.historydescription_Document_CompositeInput); this.DrawingObjects.CreateDocContent(); @@ -16663,7 +16668,7 @@ CDocument.prototype.IsFastCollaboartionBeforeViewModeInReview = function() }; CDocument.prototype.CheckComplexFieldsInSelection = function() { - if (true !== this.Selection.Use) + if (true !== this.Selection.Use || this.Controller !== this.LogicDocumentController) return; // Смотрим сколько полей открытых в начальной и конечной позициях. @@ -18100,31 +18105,25 @@ CTrackRevisionsManager.prototype.Get_ParagraphChanges = function(ParaId) return []; }; -CTrackRevisionsManager.prototype.Continue_TrackRevisions = function() +CTrackRevisionsManager.prototype.ContinueTrackRevisions = function() { // За раз обрабатываем не больше 50 параграфов, чтобы не подвешивать клиент на открытии файлов var nMaxCounter = 50, nCounter = 0; - var bNeedUpdate = false; - for (var ParaId in this.CheckPara) - { - delete this.CheckPara[ParaId]; - var Para = g_oTableId.Get_ById(ParaId); - if (Para && Para instanceof Paragraph && Para.Is_UseInDocument()) - { - delete this.Changes[ParaId]; - Para.Check_RevisionsChanges(this); - bNeedUpdate = true; - } + var bNeedUpdate = false; + for (var sParaId in this.CheckPara) + { + if (this.private_TrackChangesForParagraph(sParaId)) + bNeedUpdate = true; - ++nCounter; - if (nCounter >= nMaxCounter) - break; - } + ++nCounter; + if (nCounter >= nMaxCounter) + break; + } - if (bNeedUpdate) - this.LogicDocument.Document_UpdateInterfaceState(); + if (bNeedUpdate) + this.LogicDocument.Document_UpdateInterfaceState(); }; CTrackRevisionsManager.prototype.Get_NextChange = function() { @@ -18132,9 +18131,9 @@ CTrackRevisionsManager.prototype.Get_NextChange = function() var OldCurPara = this.CurPara; var NextPara = null; - if (null !== this.CurChange && null !== this.CurPara) + if (null !== this.CurChange && null !== this.CurPara && this.Changes[this.CurPara.GetId()]) { - var ChangesArray = this.Changes[this.CurPara.Get_Id()]; + var ChangesArray = this.Changes[this.CurPara.GetId()]; var ChangeIndex = -1; for (var Index = 0, Count = ChangesArray.length; Index < Count; Index++) { @@ -18450,10 +18449,10 @@ CTrackRevisionsManager.prototype.Get_AllChangesLogicDocuments = function() return LogicDocuments; }; -CTrackRevisionsManager.prototype.Get_ChangeRelatedParagraphs = function(Change, bAccept) +CTrackRevisionsManager.prototype.GetChangeRelatedParagraphs = function(oChange, bAccept) { var RelatedParas = {}; - this.private_GetChangeRelatedParagraphs(Change, bAccept, RelatedParas); + this.private_GetChangeRelatedParagraphs(oChange, bAccept, RelatedParas); return this.private_ConvertParagraphsObjectToArray(RelatedParas); }; CTrackRevisionsManager.prototype.private_GetChangeRelatedParagraphs = function(Change, bAccept, RelatedParas) @@ -18576,7 +18575,40 @@ CTrackRevisionsManager.prototype.private_IsAllParagraphsChecked = function() CTrackRevisionsManager.prototype.CompleteTrackChanges = function() { while (!this.private_IsAllParagraphsChecked()) - this.Continue_TrackRevisions(); + this.ContinueTrackRevisions(); +}; +/** + * Завершаем проверку рецензирования для заданных элементов + * @param arrElements + * @returns {boolean} + */ +CTrackRevisionsManager.prototype.CompleteTrackChangesForElements = function(arrElements) +{ + var isChecked = false; + for (var nIndex = 0, nCount = arrElements.length; nIndex < nCount; ++nIndex) + { + var sElementId = arrElements[nIndex].GetId(); + if (this.private_TrackChangesForParagraph(sElementId)) + isChecked = true; + } + + return isChecked; +}; +CTrackRevisionsManager.prototype.private_TrackChangesForParagraph = function(sParaId) +{ + if (this.CheckPara[sParaId]) + { + delete this.CheckPara[sParaId]; + var oParagraph = g_oTableId.Get_ById(sParaId); + if (oParagraph && oParagraph instanceof Paragraph && oParagraph.Is_UseInDocument()) + { + delete this.Changes[sParaId]; + oParagraph.Check_RevisionsChanges(this); + return true; + } + } + + return false; }; function CRevisionsChangeParagraphSearchEngine(Direction, CurrentPara, TrackManager) diff --git a/word/Editor/DocumentContent.js b/word/Editor/DocumentContent.js index 670321c11c..d8d86ff963 100644 --- a/word/Editor/DocumentContent.js +++ b/word/Editor/DocumentContent.js @@ -5969,13 +5969,6 @@ CDocumentContent.prototype.Selection_SetEnd = function(X, Y, CurPage, MouseEvent var ContentPos = this.Internal_GetContentPosByXY(X, Y); - var OldPos = this.CurPos.ContentPos; - var OldInnerPos = null; - if (type_Paragraph === this.Content[OldPos].GetType()) - OldInnerPos = this.Content[OldPos].CurPos.ContentPos; - else //if ( type_Table === this.Content[OldPos].GetType() ) - OldInnerPos = this.Content[OldPos].CurCell; - this.CurPos.ContentPos = ContentPos; var OldEndPos = this.Selection.EndPos; this.Selection.EndPos = ContentPos; @@ -6273,9 +6266,15 @@ CDocumentContent.prototype.SetSelectionToBeginEnd = function(isSelectionStart, i this.Content[0].SetSelectionUse(true); this.Content[0].SetSelectionToBeginEnd(isSelectionStart, true); if (isSelectionStart) + { this.Selection.StartPos = 0; + this.Selection.EndPos = this.CurPos.ContentPos; + } else - this.Selection.EndPos = 0; + { + this.Selection.StartPos = this.CurPos.ContentPos; + this.Selection.EndPos = 0; + } } else { @@ -6283,9 +6282,15 @@ CDocumentContent.prototype.SetSelectionToBeginEnd = function(isSelectionStart, i this.Content[this.Content.length - 1].SetSelectionToBeginEnd(isSelectionStart, false); if (isSelectionStart) + { this.Selection.StartPos = this.Content.length - 1; + this.Selection.EndPos = this.CurPos.ContentPos; + } else - this.Selection.EndPos = this.Content.length - 1; + { + this.Selection.StartPos = this.CurPos.ContentPos; + this.Selection.EndPos = this.Content.length - 1; + } } }; CDocumentContent.prototype.Select_DrawingObject = function(Id) diff --git a/word/Editor/DocumentContentElementBase.js b/word/Editor/DocumentContentElementBase.js index 93b45ad7ef..04d3204658 100644 --- a/word/Editor/DocumentContentElementBase.js +++ b/word/Editor/DocumentContentElementBase.js @@ -53,6 +53,8 @@ function CDocumentContentElementBase(oParent) this.Next = null; this.Index = -1; // перед тем как пользоваться этим параметром нужно у родительского класса вызывать this.Parent.Update_ContentIndexing(); + this.Recalculated = false; // Данный параметр управляет тем, были ли у нас произведены изменения с элементом с момента последнего пересчета + this.X = 0; this.Y = 0; this.XLimit = 0; @@ -964,6 +966,22 @@ CDocumentContentElementBase.prototype.GotoFootnoteRef = function(isNext, isCurre { return false; }; +/** + * Сообщаем, пересчитан ли данный элемент с момента внесения в него изменений + * @param {boolean} isRecalculated + */ +CDocumentContentElementBase.prototype.SetIsRecalculated = function(isRecalculated) +{ + this.Recalculated = isRecalculated; +}; +/** + * Узнаем рассчитан ли данный параграф + * @returns {boolean} + */ +CDocumentContentElementBase.prototype.IsRecalculated = function() +{ + return this.Recalculated; +}; /** * Проверяем выделен ли сейчас какой-либо плейсхолдер, если да, то возвращаем управляющий объект * @returns {?Object} diff --git a/word/Editor/DrawingsController.js b/word/Editor/DrawingsController.js index 27b6ad5467..bb28297cea 100644 --- a/word/Editor/DrawingsController.js +++ b/word/Editor/DrawingsController.js @@ -119,14 +119,26 @@ CDrawingsController.prototype.MoveCursorToEndPos = function(AddToSelect) }; CDrawingsController.prototype.MoveCursorLeft = function(AddToSelect, Word) { + // Заглушка от передвижения автофигур внутри больщих таблиц + if (!this.LogicDocument.Pages[this.LogicDocument.CurPage]) + return true; + return this.DrawingObjects.cursorMoveLeft(AddToSelect, Word); }; CDrawingsController.prototype.MoveCursorRight = function(AddToSelect, Word, FromPaste) { + // Заглушка от передвижения автофигур внутри больщих таблиц + if (!this.LogicDocument.Pages[this.LogicDocument.CurPage]) + return true; + return this.DrawingObjects.cursorMoveRight(AddToSelect, Word, FromPaste); }; CDrawingsController.prototype.MoveCursorUp = function(AddToSelect, CtrlKey) { + // Заглушка от передвижения автофигур внутри больщих таблиц + if (!this.LogicDocument.Pages[this.LogicDocument.CurPage]) + return true; + var RetValue = this.DrawingObjects.cursorMoveUp(AddToSelect, CtrlKey); this.LogicDocument.Document_UpdateInterfaceState(); this.LogicDocument.Document_UpdateSelectionState(); @@ -134,6 +146,10 @@ CDrawingsController.prototype.MoveCursorUp = function(AddToSelect, CtrlKey) }; CDrawingsController.prototype.MoveCursorDown = function(AddToSelect, CtrlKey) { + // Заглушка от передвижения автофигур внутри больщих таблиц + if (!this.LogicDocument.Pages[this.LogicDocument.CurPage]) + return true; + var RetValue = this.DrawingObjects.cursorMoveDown(AddToSelect, CtrlKey); this.LogicDocument.Document_UpdateInterfaceState(); this.LogicDocument.Document_UpdateSelectionState(); diff --git a/word/Editor/History.js b/word/Editor/History.js index a6955c578c..c48f30e5bf 100644 --- a/word/Editor/History.js +++ b/word/Editor/History.js @@ -456,6 +456,9 @@ CHistory.prototype = _Class.WriteToBinary(this.BinaryWriter); } + if (Class && Class.SetIsRecalculated) + Class.SetIsRecalculated(false); + var Binary_Len = this.BinaryWriter.GetCurPosition() - Binary_Pos; var Item = { Class : Class, diff --git a/word/Editor/Math.js b/word/Editor/Math.js index 284b39c13b..59b5f76369 100644 --- a/word/Editor/Math.js +++ b/word/Editor/Math.js @@ -3361,7 +3361,7 @@ ParaMath.prototype.Set_ReviewType = function(ReviewType, RemovePrChange) { return this.Root.Set_ReviewType(ReviewType, RemovePrChange); }; -ParaMath.prototype.Handle_Tab = function(isForward) +ParaMath.prototype.HandleTab = function(isForward) { if(this.ParaMathRPI.bInline == false) { diff --git a/word/Editor/Paragraph.js b/word/Editor/Paragraph.js index 727c2dff02..91b67eb0c5 100644 --- a/word/Editor/Paragraph.js +++ b/word/Editor/Paragraph.js @@ -1217,7 +1217,8 @@ Paragraph.prototype.Internal_Recalculate_CurPos = function(Pos, UpdateCurPos, Up { var Transform = this.Get_ParentTextTransform(); - if (this.Lines.length <= 0) + if (!this.IsRecalculated() || this.Lines.length <= 0) + { return { X : 0, Y : 0, @@ -1226,10 +1227,12 @@ Paragraph.prototype.Internal_Recalculate_CurPos = function(Pos, UpdateCurPos, Up Internal : {Line : 0, Page : 0, Range : 0}, Transform : Transform }; + } var LinePos = this.Get_CurrentParaPos(); if (-1 === LinePos.Line || LinePos.Line >= this.Lines.length) + { return { X : 0, Y : 0, @@ -1238,6 +1241,7 @@ Paragraph.prototype.Internal_Recalculate_CurPos = function(Pos, UpdateCurPos, Up Internal : {Line : 0, Page : 0, Range : 0}, Transform : Transform }; + } var CurLine = LinePos.Line; var CurRange = LinePos.Range; @@ -1250,6 +1254,18 @@ Paragraph.prototype.Internal_Recalculate_CurPos = function(Pos, UpdateCurPos, Up CurRange = this.CurPos.Range; } + if (this.Lines[CurLine].Ranges.length <= 0) + { + return { + X : 0, + Y : 0, + Height : 0, + PageNum : 0, + Internal : {Line : 0, Page : 0, Range : 0}, + Transform : Transform + }; + } + var X = this.Lines[CurLine].Ranges[CurRange].XVisible; var Y = this.Pages[CurPage].Y + this.Lines[CurLine].Y; @@ -4225,7 +4241,11 @@ Paragraph.prototype.Get_ParaContentPosByXY = function(X, Y, PageIndex, bYLine, S var CurRange = 0; var RangesCount = this.Lines[CurLine].Ranges.length; - if (RangesCount > 1) + if (RangesCount <= 0) + { + return SearchPos; + } + else if (RangesCount > 1) { for (; CurRange < RangesCount - 1; CurRange++) { @@ -10953,6 +10973,20 @@ Paragraph.prototype.Refresh_RecalcData = function(Data) } break; } + case AscDFH.historyitem_Paragraph_SectionPr: + { + if (this.Parent instanceof CDocument) + { + this.Parent.UpdateContentIndexing(); + var nSectionIndex = this.Parent.GetSectionIndexByElementIndex(this.GetIndex()); + var oFirstElement = this.Parent.GetFirstElementInSection(nSectionIndex); + + if (oFirstElement) + this.Parent.Refresh_RecalcData2(oFirstElement.GetIndex(), oFirstElement.private_GetRelativePageIndex(0)); + } + + break; + } } if (true === bNeedRecalc) diff --git a/word/Editor/Paragraph_Recalculate.js b/word/Editor/Paragraph_Recalculate.js index a021b24366..b3c1559756 100644 --- a/word/Editor/Paragraph_Recalculate.js +++ b/word/Editor/Paragraph_Recalculate.js @@ -70,7 +70,9 @@ Paragraph.prototype.Recalculate_FastWholeParagraph = function() if (1 === this.Lines.length && true !== this.Is_Inline()) return []; - // Здесь мы отдельно обрабатываем случаи быстрого пересчета параграфов, которые были разбиты на 1-2 + this.SetIsRecalculated(true); + + // Здесь мы отдельно обрабатываем случаи быстрого пересчета параграфов, которые были разбиты на 1-2 // страницы. Если параграф был разбит более чем на 2 страницы, то такое ускорение уже не имеет смысла. if (1 === this.Pages.length) { @@ -370,8 +372,9 @@ Paragraph.prototype.Recalculate_FastRange = function(SimpleChanges) this.CurPos.Range = -1; this.Internal_CheckSpelling(); + this.SetIsRecalculated(true); - //console.log("Recalc Fast Range"); + //console.log("Recalc Fast Range"); this.m_oPRSW.SetFast(false); return this.Get_AbsolutePage(Result); @@ -390,6 +393,7 @@ Paragraph.prototype.Recalculate_Page = function(CurPage) // Во время пересчета сбрасываем привязку курсора к строке. this.CurPos.Line = -1; this.CurPos.Range = -1; + this.SetIsRecalculated(true); this.FontMap.NeedRecalc = true; diff --git a/word/Editor/Table.js b/word/Editor/Table.js index 800a5c1bec..1307202cee 100644 --- a/word/Editor/Table.js +++ b/word/Editor/Table.js @@ -3572,11 +3572,11 @@ CTable.prototype.Document_UpdateRulersState = function(CurPage) if (true == this.Selection.Use && table_Selection_Cell == this.Selection.Type) { - this.Internal_Update_TableMarkup(this.Selection.EndPos.Pos.Row, this.Selection.EndPos.Pos.Cell, CurPage); + this.private_UpdateTableMarkup(this.Selection.EndPos.Pos.Row, this.Selection.EndPos.Pos.Cell, CurPage); } else { - this.Internal_Update_TableMarkup(this.CurCell.Row.Index, this.CurCell.Index, CurPage); + this.private_UpdateTableMarkup(this.CurCell.Row.Index, this.CurCell.Index, CurPage); this.CurCell.Content.Document_UpdateRulersState(CurPage - this.CurCell.Content.Get_StartPage_Relative()); } }; @@ -4655,7 +4655,7 @@ CTable.prototype.Selection_SetStart = function(X, Y, CurPage, MouseEvent) } else { - this.Internal_Update_TableMarkup(Pos.Row, Pos.Cell, CurPage); + this.private_UpdateTableMarkup(Pos.Row, Pos.Cell, CurPage); this.Selection.Type2 = table_Selection_Border; this.Selection.Data2 = {}; this.Selection.Data2.PageNum = CurPage; @@ -5946,22 +5946,33 @@ CTable.prototype.MoveCursorLeft = function(AddToSelect, Word) { if (false === AddToSelect) { - if (0 != this.CurCell.Index || 0 != this.CurCell.Row.Index) + var nCurCell = this.CurCell.GetIndex(); + var nCurRow = this.CurCell.GetRow().GetIndex(); + if (0 !== nCurCell || 0 !== nCurRow) { - if (0 != this.CurCell.Index) + while (true) { - var oStartMergedCell = this.GetStartMergedCell(this.CurCell.Index - 1, this.Selection.CurRow); + if (nCurCell > 0) + { + nCurCell--; + } + else if (nCurRow > 0) + { + nCurRow--; + nCurCell = this.GetRow(nCurRow).GetCellsCount() - 1; + } + else + { + this.CurCell = this.GetRow(0).GetCell(0); + break; + } - if (oStartMergedCell) - this.CurCell = oStartMergedCell; - } - else //if ( 0 != this.CurCell.Row.Index ) - { - this.Selection.CurRow = Math.max(this.Selection.CurRow - 1, 0); + var oTempCell = this.GetRow(nCurRow).GetCell(nCurCell); + if (vmerge_Restart !== oTempCell.GetVMerge()) + continue; - var oStartMergedCell = this.GetStartMergedCell(this.Content[this.Selection.CurRow].Get_CellsCount() - 1, this.Selection.CurRow); - if (oStartMergedCell) - this.CurCell = oStartMergedCell; + this.CurCell = oTempCell; + break; } this.CurCell.Content.MoveCursorToEndPos(); @@ -6118,27 +6129,45 @@ CTable.prototype.MoveCursorRight = function(AddToSelect, Word, FromPaste) { if (false === AddToSelect) { - if (this.Content.length - 1 > this.CurCell.Row.Index || this.Content[this.CurCell.Row.Index].Get_CellsCount() - 1 > this.CurCell.Index) + var nCurCell = this.CurCell.GetIndex(); + var nCurRow = this.CurCell.GetRow().GetIndex(); + var nCellsCount = this.GetRow(nCurRow).GetCellsCount(); + var nRowsCount = this.GetRowsCount(); + if (this.Content.length - 1 > nCurRow || nCellsCount - 1 > nCurCell) { - if (this.Content[this.CurCell.Row.Index].Get_CellsCount() - 1 > this.CurCell.Index) + while (true) { - var oStartMergedCell = this.GetStartMergedCell(this.CurCell.Index + 1, this.Selection.CurRow); - if (oStartMergedCell) - this.CurCell = oStartMergedCell; - } - else //if ( this.Content.length - 1 > this.CurCell.Row.Index ) - { - this.Selection.CurRow = Math.min(this.Content.length - 1, this.Selection.CurRow + 1); + if (nCurCell < nCellsCount - 1) + { + nCurCell++; + } + else if (nCurRow < nRowsCount - 1) + { + nCurRow++; + nCurCell = 0; + nCellsCount = this.GetRow(nCurRow).GetCellsCount(); + } + else + { + var oLastRow = this.GetRow(this.GetRowsCount() - 1); + this.CurCell = oLastRow.GetCell(oLastRow.GetCellsCount() - 1); + break; + } - var oStartMergedCell = this.GetStartMergedCell(0, this.Selection.CurRow); - if (oStartMergedCell) - this.CurCell = oStartMergedCell; + var oTempCell = this.GetRow(nCurRow).GetCell(nCurCell); + if (vmerge_Restart !== oTempCell.GetVMerge()) + continue; + + this.CurCell = oTempCell; + break; } this.CurCell.Content.MoveCursorToStartPos(); } else + { return false; + } } else { @@ -6175,7 +6204,7 @@ CTable.prototype.MoveCursorRight = function(AddToSelect, Word, FromPaste) else { this.Selection.EndPos.Pos = { - Cell : this.GetRoe(this.CurCell.Row.Index + 1).GetCellsCount() - 1, + Cell : this.GetRow(this.CurCell.Row.Index + 1).GetCellsCount() - 1, Row : this.CurCell.Row.Index + 1 }; } @@ -8564,22 +8593,22 @@ CTable.prototype.Internal_CheckMerge = function() { var Pos = this.Selection.Data[Index]; var Row = this.Content[Pos.Row]; - var Cell = Row.Get_Cell(Pos.Cell); + var Cell = Row.GetCell(Pos.Cell); - var StartGridCol = Row.Get_CellInfo(Pos.Cell).StartGridCol; - var EndGridCol = StartGridCol + Cell.Get_GridSpan() - 1; + var CellInfo = Row.GetCellInfo(Pos.Cell); + var StartGridCol = CellInfo.StartGridCol; + var EndGridCol = StartGridCol + Cell.GetGridSpan() - 1; - var VMergeCount = this.Internal_GetVertMergeCount(Pos.Row, Row.Get_CellInfo(Pos.Cell).StartGridCol, Cell.Get_GridSpan()); + var VMergeCount = this.Internal_GetVertMergeCount(Pos.Row, CellInfo.StartGridCol, Cell.GetGridSpan()); for (var RowIndex = Pos.Row; RowIndex <= Pos.Row + VMergeCount - 1; RowIndex++) { if ("undefined" === typeof(RowsInfo[RowIndex])) { - RowsInfo[RowIndex] = - { - Grid_start : StartGridCol, - Grid_end : EndGridCol - }; + RowsInfo[RowIndex] = { + Grid_start : StartGridCol, + Grid_end : EndGridCol + }; if (-1 === nRowMax || RowIndex > nRowMax) nRowMax = RowIndex; @@ -10579,15 +10608,7 @@ CTable.prototype.Internal_Add_Row = function(Index, CellsCount, bReIndexing, _Ne this.Content.splice(Index, 0, NewRow); this.TableRowsBottom.splice(Index, 0, {}); - this.RowsInfo.splice(Index, 0, { - Pages : 1, - Y : [], - H : [], - TopDy : [], - MaxTopBorder : [], - FirstPage : true, - StartPage : 0 - }); + this.RowsInfo.splice(Index, 0, new CTableRowsInfo()); if (true === bReIndexing) { @@ -11212,58 +11233,63 @@ CTable.prototype.private_GetCellIndexByStartGridCol = function(nCurRow, nStartGr return -1; }; -CTable.prototype.Internal_Update_TableMarkup = function(RowIndex, CellIndex, PageNum) +CTable.prototype.private_UpdateTableMarkup = function(nRowIndex, nCellIndex, nCurPage) { - this.Markup.Internal = - { - RowIndex : RowIndex, - CellIndex : CellIndex, - PageNum : PageNum - }; + this.Markup.Internal = { + RowIndex : nRowIndex, + CellIndex : nCellIndex, + PageNum : nCurPage + }; - var Page = this.Pages[PageNum]; - this.Markup.X = Page.X; + var oPage = this.Pages[nCurPage]; + if (!oPage) + return; - var Row = this.Content[RowIndex]; - var CellSpacing = ( null === Row.Get_CellSpacing() ? 0 : Row.Get_CellSpacing() ); - var CellsCount = Row.Get_CellsCount(); + this.Markup.X = oPage.X; - var GridBefore = Row.Get_Before().GridBefore; - this.Markup.X += this.TableSumGrid[GridBefore - 1]; + var oRow = this.GetRow(nRowIndex); + var nCellSpacing = null === oRow.GetCellSpacing() ? 0 : oRow.GetCellSpacing(); + var nCellsCount = oRow.GetCellsCount(); + var nGridBefore = oRow.GetBefore().Grid; + this.Markup.X += this.TableSumGrid[nGridBefore - 1]; this.Markup.Cols = []; this.Markup.Margins = []; - for (var CurCell = 0; CurCell < CellsCount; CurCell++) + + for (var nCurCell = 0; nCurCell < nCellsCount; ++nCurCell) { - var Cell = Row.Get_Cell(CurCell); - var StartGridCol = Row.Get_CellInfo(CurCell).StartGridCol; - var GridSpan = Cell.Get_GridSpan(); - var CellMargin = Cell.GetMargins(); + var oCell = oRow.GetCell(nCurCell); + var oCellInfo = oRow.GetCellInfo(nCurCell); - this.Markup.Cols.push(this.TableSumGrid[StartGridCol + GridSpan - 1] - this.TableSumGrid[StartGridCol - 1]); + var nStartGridCol = oCellInfo.StartGridCol; + var nGridSpan = oCell.GetGridSpan(); + var oCellMargin = oCell.GetMargins(); - var Margin_left = CellMargin.Left.W; - var Margin_right = CellMargin.Right.W; - if (0 === CurCell) - Margin_left += CellSpacing; + this.Markup.Cols.push(this.TableSumGrid[nStartGridCol + nGridSpan - 1] - this.TableSumGrid[nStartGridCol - 1]); + + var nMarginLeft = oCellMargin.Left.W; + var nMarginRight = oCellMargin.Right.W; + + if (0 === nCurCell) + nMarginLeft += nCellSpacing; else - Margin_left += CellSpacing / 2; + nMarginLeft += nCellSpacing / 2; - if (CellsCount - 1 === CurCell) - Margin_right += CellSpacing; + if (nCellsCount - 1 === nCurCell) + nMarginRight += nCellSpacing; else - Margin_right += CellSpacing / 2; + nMarginRight += nCellSpacing / 2; - this.Markup.Margins.push({Left : Margin_left, Right : Margin_right}); + this.Markup.Margins.push({Left : nMarginLeft, Right : nMarginRight}); } // Определим какие строки попадают на данную страницу - var Row_start = this.Pages[PageNum].FirstRow; + var Row_start = this.Pages[nCurPage].FirstRow; var Row_last = Row_start; - if (PageNum + 1 < this.Pages.length) + if (nCurPage + 1 < this.Pages.length) { - Row_last = this.Pages[PageNum + 1].FirstRow; + Row_last = this.Pages[nCurPage + 1].FirstRow; // Возможно, на данной странице строку, с которой началось разбиение на стрнице, // не надо рисовать. (Если начальная и конечная строки совпадают, тогда это 2 @@ -11277,12 +11303,12 @@ CTable.prototype.Internal_Update_TableMarkup = function(RowIndex, CellIndex, Pag this.Markup.Rows = []; for (var CurRow = Row_start; CurRow <= Row_last; CurRow++) { - if (this.RowsInfo[CurRow] && this.RowsInfo[CurRow].Y[PageNum] && this.RowsInfo[CurRow].H[PageNum]) - this.Markup.Rows.push({Y : this.RowsInfo[CurRow].Y[PageNum], H : this.RowsInfo[CurRow].H[PageNum]}); + if (this.RowsInfo[CurRow] && this.RowsInfo[CurRow].Y[nCurPage] && this.RowsInfo[CurRow].H[nCurPage]) + this.Markup.Rows.push({Y : this.RowsInfo[CurRow].Y[nCurPage], H : this.RowsInfo[CurRow].H[nCurPage]}); } - this.Markup.CurCol = CellIndex; - this.Markup.CurRow = RowIndex - Row_start; + this.Markup.CurCol = nCellIndex; + this.Markup.CurRow = nRowIndex - Row_start; var Transform = this.Get_ParentTextTransform(); this.DrawingDocument.Set_RulerState_Table(this.Markup, Transform); @@ -11826,7 +11852,7 @@ CTable.prototype.private_UpdateTableRulerOnBorderMove = function(Pos) // Обновляем Markup по ячейке в которой мы двигаем границу. Так делаем, потому что мы можем находится изначально // на другой странице данной таблице, а там Markup может быть совершенно другим. В конце движения границы // произойдет обновление селекта, и Markup обновится по текущему положению курсора. - this.Internal_Update_TableMarkup(this.Selection.Data2.Pos.Row, this.Selection.Data2.Pos.Cell, this.Selection.Data2.PageNum); + this.private_UpdateTableMarkup(this.Selection.Data2.Pos.Row, this.Selection.Data2.Pos.Cell, this.Selection.Data2.PageNum); this.DrawingDocument.UpdateTableRuler(this.Selection.Data2.bCol, this.Selection.Data2.Index, Pos); return Pos; @@ -12317,6 +12343,9 @@ CTable.prototype.SetContentSelection = function(StartDocPos, EndDocPos, Depth, S }; CTable.prototype.SetContentPosition = function(DocPos, Depth, Flag) { + if (this.GetRowsCount() <= 0) + return; + if (0 === Flag && (!DocPos[Depth] || this !== DocPos[Depth].Class)) return; @@ -12349,18 +12378,35 @@ CTable.prototype.SetContentPosition = function(DocPos, Depth, Flag) } } + if (CurRow >= this.GetRowsCount()) + { + CurRow = this.GetRowsCount() - 1; + _DocPos = null; + _Flag = -1; + } + else if (CurRow < 0) + { + CurRow = 0; + _DocPos = null; + _Flag = 1; + } + + var Row = this.GetRow(CurRow); + if (!Row) + return; + var CurCell = 0; switch (_Flag) { case 0 : CurCell = _DocPos[Depth + 1].Position; break; case 1 : CurCell = 0; break; - case -1: CurCell = this.Content[CurRow].Get_CellsCount() - 1; break; + case -1: CurCell = Row.GetCellsCount() - 1; break; } var __DocPos = _DocPos, __Flag = _Flag; if (null !== _DocPos && true === _DocPos[Depth + 1].Deleted) { - if (CurCell < this.Content[CurRow].Get_CellsCount()) + if (CurCell < Row.GetCellsCount()) { __DocPos = null; __Flag = 1; @@ -12378,11 +12424,20 @@ CTable.prototype.SetContentPosition = function(DocPos, Depth, Flag) } } - var Row = this.Get_Row(CurRow); - if (!Row) - return; + if (CurCell >= Row.GetCellsCount()) + { + CurCell = Row.GetCellsCount() - 1; + __DocPos = null; + __Flag = -1; + } + else if (CurCell < 0) + { + CurCell = 0; + __DocPos = null; + __Flag = 1; + } - var Cell = Row.Get_Cell(CurCell); + var Cell = Row.GetCell(CurCell); if (!Cell) return; @@ -12853,41 +12908,37 @@ CTable.prototype.GotoFootnoteRef = function(isNext, isCurrent) return false; }; -CTable.prototype.CanUpdateTarget = function(CurPage) +/** + * Проверяем можно ли обновлять положение курсора на заданной странице + * @param nCurPage + * @returns {boolean} + */ +CTable.prototype.CanUpdateTarget = function(nCurPage) { - if (this.Pages.length <= 0) - return false; - - if (this.Pages.length <= CurPage) - return true; - - if (!this.Pages[CurPage]) + if (this.Pages.length <= 0 || !this.Pages[nCurPage]) return false; var oRow, oCell; if (this.IsSelectionUse()) { - oCell = this.CurCell; - oRow = this.CurCell.Row; + oRow = this.GetRow(this.Selection.EndPos.Pos.Row); + oCell = oRow.GetCell(this.Selection.EndPos.Pos.Cell); } else { - var CurCell = this.Selection.EndPos.Pos.Cell; - var CurRow = this.Selection.EndPos.Pos.Row; - - oRow = this.Content[CurRow]; - oCell = oRow.Get_Cell(CurCell); + oCell = this.CurCell; + oRow = this.CurCell.GetRow(); } if (!oRow || !oCell) return false; - if (this.Pages[CurPage].LastRow > oRow.Index) + if (this.Pages[nCurPage].LastRow > oRow.Index) return true; - else if (this.Pages[CurPage].LastRow < oRow.Index) + else if (this.Pages[nCurPage].LastRow < oRow.Index) return false; - return oCell.Content.CanUpdateTarget(CurPage - oCell.Content.Get_StartPage_Relative()); + return oCell.Content.CanUpdateTarget(nCurPage - oCell.Content.Get_StartPage_Relative()); }; /** * Проверяем, выделение идет по ячейкам или нет @@ -14496,6 +14547,27 @@ CTableAnchorPosition.prototype = } }; +function CTableRowsInfo() +{ + this.Pages = 1; + this.Y = []; + this.H = []; + this.TopDy = []; + this.MaxTopBorder = []; + this.FirstPage = true; + this.StartPage = 0; + this.X0 = 0; + this.X1 = 0; + this.MaxBotBorder = 0; +} +CTableRowsInfo.prototype.Init = function() +{ + this.Y[0] = 0.0; + this.H[0] = 0.0; + this.TopDy[0] = 0.0; + this.MaxTopBorder[0] = 0.0; +}; + //--------------------------------------------------------export---------------------------------------------------- window['AscCommonWord'] = window['AscCommonWord'] || {}; window['AscCommonWord'].CTable = CTable; diff --git a/word/Editor/Table/TableChanges.js b/word/Editor/Table/TableChanges.js index aa072f7e77..2cc2b0d1a9 100644 --- a/word/Editor/Table/TableChanges.js +++ b/word/Editor/Table/TableChanges.js @@ -645,7 +645,7 @@ CChangesTableAddRow.prototype.Redo = function() oTable.Content.splice(this.Pos, 0, this.Items[0]); oTable.TableRowsBottom.splice(this.Pos, 0, {}); - oTable.RowsInfo.splice(this.Pos, 0, {}); + oTable.RowsInfo.splice(this.Pos, 0, new CTableRowsInfo()); oTable.Internal_ReIndexing(this.Pos); oTable.Recalc_CompiledPr2(); @@ -708,7 +708,7 @@ CChangesTableRemoveRow.prototype.Undo = function() oTable.Content.splice(this.Pos, 0, this.Items[0]); oTable.TableRowsBottom.splice(this.Pos, 0, {}); - oTable.RowsInfo.splice(this.Pos, 0, {}); + oTable.RowsInfo.splice(this.Pos, 0, new CTableRowsInfo()); oTable.Internal_ReIndexing(this.Pos); oTable.Recalc_CompiledPr2(); diff --git a/word/Editor/Table/TableRecalculate.js b/word/Editor/Table/TableRecalculate.js index 699ba093c1..c7d682b806 100644 --- a/word/Editor/Table/TableRecalculate.js +++ b/word/Editor/Table/TableRecalculate.js @@ -130,23 +130,8 @@ CTable.prototype.StartFromNewPage = function() this.HeaderInfo.Pages[0] = {}; this.HeaderInfo.Pages[0].Draw = false; - this.RowsInfo[0] = {}; - this.RowsInfo[0].Pages = 1; - this.RowsInfo[0].Y = []; - this.RowsInfo[0].H = []; - this.RowsInfo[0].TopDy = []; - this.RowsInfo[0].MaxTopBorder = []; - this.RowsInfo[0].FirstPage = false; - this.RowsInfo[0].StartPage = 0; - - this.RowsInfo[0].X0 = 0; - this.RowsInfo[0].X1 = 0; - this.RowsInfo[0].MaxBotBorder = 0; - - this.RowsInfo[0].Y[0] = 0.0; - this.RowsInfo[0].H[0] = 0.0; - this.RowsInfo[0].TopDy[0] = 0.0; - this.RowsInfo[0].MaxTopBorder[0] = 0.0; + this.RowsInfo[0] = new CTableRowsInfo(); + this.RowsInfo[0].Init(); // Обнуляем таблицу суммарных высот ячеек for (var Index = -1; Index < this.Content.length; Index++) @@ -2176,15 +2161,9 @@ CTable.prototype.private_RecalculatePage = function(CurPage) if ((0 === CurRow && true === this.Check_EmptyPages(CurPage - 1)) || CurRow != FirstRow || (CurRow === FirstRow && true === ResetStartElement)) { - this.RowsInfo[CurRow] = {}; - this.RowsInfo[CurRow].Pages = 1; - this.RowsInfo[CurRow].Y = []; - this.RowsInfo[CurRow].H = []; - this.RowsInfo[CurRow].TopDy = []; - this.RowsInfo[CurRow].MaxTopBorder = []; - this.RowsInfo[CurRow].FirstPage = true; - this.RowsInfo[CurRow].StartPage = CurPage; - this.TableRowsBottom[CurRow] = []; + this.RowsInfo[CurRow] = new CTableRowsInfo(); + this.RowsInfo[CurRow].StartPage = CurPage; + this.TableRowsBottom[CurRow] = []; } else { diff --git a/word/Editor/Table/TableRow.js b/word/Editor/Table/TableRow.js index 98cf5280ae..eef5c896f7 100644 --- a/word/Editor/Table/TableRow.js +++ b/word/Editor/Table/TableRow.js @@ -536,6 +536,9 @@ CTableRow.prototype = Get_CellInfo : function(Index) { + if (!this.CellsInfo[Index] || undefined === this.CellsInfo[Index].StartGridCol) + this.GetTable().private_RecalculateGridCols(); + return this.CellsInfo[Index]; }, diff --git a/word/Local/api.js b/word/Local/api.js index 840d1a700e..37dbfb0e76 100644 --- a/word/Local/api.js +++ b/word/Local/api.js @@ -192,9 +192,9 @@ Asc['asc_docs_api'].prototype.SetDocumentModified = function(bValue) } }; -Asc['asc_docs_api'].prototype.asc_Save = function (isNoUserSave, isSaveAs) +Asc['asc_docs_api'].prototype.asc_Save = function (isNoUserSave, isSaveAs, isResaveAttack) { - if (!isSaveAs && !this.asc_isDocumentCanSave()) + if (!isResaveAttack && !isSaveAs && !this.asc_isDocumentCanSave()) return; if (true !== isNoUserSave) @@ -276,6 +276,11 @@ window["DesktopOfflineAppDocumentEndSave"] = function(error, hash, password) { if (window.g_asc_plugins && window.g_asc_plugins.isRunnedEncryption()) { + editor._callbackPluginEndAction = function() + { + this._callbackPluginEndAction = null; + window["AscDesktopEditor"]["buildCryptedEnd"](true); + }; window.g_asc_plugins.sendToEncryption({"type": "setPasswordByFile", "hash": hash, "password": password}); } } diff --git a/word/Math/base.js b/word/Math/base.js index 9d39c4328e..5d4a5276e1 100644 --- a/word/Math/base.js +++ b/word/Math/base.js @@ -2504,6 +2504,9 @@ CMathBase.prototype.Get_Range_VisibleWidth = function(RangeW, _CurLine, _CurRang }; CMathBase.prototype.Displace_BreakOperator = function(isForward, bBrkBefore, CountOperators) { + if (!this.Content[this.NumBreakContent]) + return; + this.Content[this.NumBreakContent].Displace_BreakOperator(isForward, bBrkBefore, CountOperators); }; CMathBase.prototype.Get_AlignBrk = function(_CurLine, bBrkBefore) diff --git a/word/Math/mathContent.js b/word/Math/mathContent.js index 1850a8521b..4161824558 100644 --- a/word/Math/mathContent.js +++ b/word/Math/mathContent.js @@ -4657,22 +4657,22 @@ CMathContent.prototype.IsEmptyRange = function(_CurLine, _CurRange) }; CMathContent.prototype.Displace_BreakOperator = function(isForward, bBrkBefore, CountOperators) { - var Pos = this.CurPos; + var Pos = this.CurPos; - if(this.Content[Pos].Type == para_Math_Run) - { - var bApplyBreak = this.Content[Pos].Displace_BreakOperator(isForward, bBrkBefore, CountOperators); - var NewPos = bBrkBefore ? Pos + 1 : Pos - 1; + if (this.Content[Pos].Type == para_Math_Run) + { + var bApplyBreak = this.Content[Pos].Displace_BreakOperator(isForward, bBrkBefore, CountOperators); + var NewPos = bBrkBefore ? Pos + 1 : Pos - 1; - if(bApplyBreak == false && (this.Content[NewPos].Type == para_Math_Run || this.Content[NewPos].kind == MATH_BOX)) - { - this.Content[NewPos].Displace_BreakOperator(isForward, bBrkBefore, CountOperators); - } - } - else - { - this.Content[Pos].Displace_BreakOperator(isForward, bBrkBefore, CountOperators); - } + if (this.Content[NewPos] && bApplyBreak == false && (this.Content[NewPos].Type == para_Math_Run || this.Content[NewPos].kind == MATH_BOX)) + { + this.Content[NewPos].Displace_BreakOperator(isForward, bBrkBefore, CountOperators); + } + } + else + { + this.Content[Pos].Displace_BreakOperator(isForward, bBrkBefore, CountOperators); + } }; CMathContent.prototype.Recalculate_Range_Width = function(PRSC, _CurLine, _CurRange) { diff --git a/word/Private/TrackRevisions.js b/word/Private/TrackRevisions.js index 46a31d6e80..fcce046fb7 100644 --- a/word/Private/TrackRevisions.js +++ b/word/Private/TrackRevisions.js @@ -170,43 +170,33 @@ CDocument.prototype.Set_TrackRevisions = function(bTrack) { this.TrackRevisions = bTrack; }; -CDocument.prototype.Continue_TrackRevisions = function() +CDocument.prototype.ContinueTrackRevisions = function() { - this.TrackRevisionsManager.Continue_TrackRevisions(); + this.TrackRevisionsManager.ContinueTrackRevisions(); }; CDocument.prototype.Get_NextRevisionChange = function() { - this.TrackRevisionsManager.Continue_TrackRevisions(); - var Change = this.TrackRevisionsManager.Get_NextChange(); - if (null !== Change) - { - this.RemoveSelection(); - var Para = Change.get_Paragraph(); - Para.Selection.Use = true; - Para.Set_SelectionContentPos(Change.get_StartPos(), Change.get_EndPos()); - Para.Set_ParaContentPos(Change.get_StartPos(), false, -1, -1); - Para.Document_SetThisElementCurrent(false); - - this.Document_UpdateSelectionState(); - this.Document_UpdateInterfaceState(true); - } + this.TrackRevisionsManager.ContinueTrackRevisions(); + var oChange = this.TrackRevisionsManager.Get_NextChange(); + if (oChange) + { + this.RemoveSelection(); + this.private_SelectRevisionChange(oChange); + this.Document_UpdateSelectionState(); + this.Document_UpdateInterfaceState(true); + } }; CDocument.prototype.Get_PrevRevisionChange = function() { - this.TrackRevisionsManager.Continue_TrackRevisions(); - var Change = this.TrackRevisionsManager.Get_PrevChange(); - if (null !== Change) - { - this.RemoveSelection(); - var Para = Change.get_Paragraph(); - Para.Selection.Use = true; - Para.Set_SelectionContentPos(Change.get_StartPos(), Change.get_EndPos()); - Para.Set_ParaContentPos(Change.get_StartPos(), false, -1, -1); - Para.Document_SetThisElementCurrent(false); - - this.Document_UpdateSelectionState(); - this.Document_UpdateInterfaceState(true); - } + this.TrackRevisionsManager.ContinueTrackRevisions(); + var oChange = this.TrackRevisionsManager.Get_PrevChange(); + if (oChange) + { + this.RemoveSelection(); + this.private_SelectRevisionChange(oChange); + this.Document_UpdateSelectionState(); + this.Document_UpdateInterfaceState(true); + } }; CDocument.prototype.GetRevisionsChangeParagraph = function(Direction, CurrentPara) { @@ -401,49 +391,79 @@ CDocument.prototype.private_GetRevisionsChangeParagraphInFooters = function(Sear arrFootnotes[nPos].GetRevisionsChangeParagraph(SearchEngine); } }; -CDocument.prototype.private_SelectRevisionChange = function(Change) +CDocument.prototype.private_SelectRevisionChange = function(oChange) { - if (undefined !== Change && Change.get_Paragraph()) - { - this.RemoveSelection(); - var Para = Change.get_Paragraph(); - Para.Selection.Use = true; - Para.Set_SelectionContentPos(Change.get_StartPos(), Change.get_EndPos()); - Para.Set_ParaContentPos(Change.get_StartPos(), false, -1, -1); - Para.Document_SetThisElementCurrent(false); - } + if (oChange && oChange.get_Paragraph()) + { + this.RemoveSelection(); + var oParagraph = oChange.get_Paragraph(); + + if (this.TrackRevisionsManager.CompleteTrackChangesForElements([oParagraph])) + return; + + oParagraph.Selection.Use = true; + oParagraph.Set_SelectionContentPos(oChange.get_StartPos(), oChange.get_EndPos()); + oParagraph.Set_ParaContentPos(oChange.get_StartPos(), false, -1, -1); + oParagraph.Document_SetThisElementCurrent(false); + } }; -CDocument.prototype.Accept_RevisionChange = function(Change) +CDocument.prototype.Accept_RevisionChange = function(oChange) { - if (undefined !== Change) - { - var RelatedParas = this.TrackRevisionsManager.Get_ChangeRelatedParagraphs(Change, true); - if (false === this.Document_Is_SelectionLocked(AscCommon.changestype_None, { Type : changestype_2_ElementsArray_and_Type, Elements : RelatedParas, CheckType : AscCommon.changestype_Paragraph_Content})) - { - this.Create_NewHistoryPoint(AscDFH.historydescription_Document_AcceptRevisionChange); - this.private_SelectRevisionChange(Change); - this.AcceptRevisionChanges(Change.get_Type(), false); - } - } + if (oChange) + { + var arrRelatedParas = this.TrackRevisionsManager.GetChangeRelatedParagraphs(oChange, true); + + if (this.TrackRevisionsManager.CompleteTrackChangesForElements(arrRelatedParas)) + { + this.Document_UpdateInterfaceState(); + this.Document_UpdateSelectionState(); + return; + } + + if (false === this.Document_Is_SelectionLocked(AscCommon.changestype_None, { + Type : changestype_2_ElementsArray_and_Type, + Elements : arrRelatedParas, + CheckType : AscCommon.changestype_Paragraph_Content + })) + { + this.Create_NewHistoryPoint(AscDFH.historydescription_Document_AcceptRevisionChange); + this.private_SelectRevisionChange(oChange); + this.AcceptRevisionChanges(oChange.get_Type(), false); + } + } }; -CDocument.prototype.Reject_RevisionChange = function(Change) +CDocument.prototype.Reject_RevisionChange = function(oChange) { - if (undefined !== Change) - { - var RelatedParas = this.TrackRevisionsManager.Get_ChangeRelatedParagraphs(Change, false); - if (false === this.Document_Is_SelectionLocked(AscCommon.changestype_None, { Type : changestype_2_ElementsArray_and_Type, Elements : RelatedParas, CheckType : AscCommon.changestype_Paragraph_Content})) - { - this.Create_NewHistoryPoint(AscDFH.historydescription_Document_RejectRevisionChange); - this.private_SelectRevisionChange(Change); - this.RejectRevisionChanges(Change.get_Type(), false); - } - } + if (oChange) + { + var arrRelatedParas = this.TrackRevisionsManager.GetChangeRelatedParagraphs(oChange, false); + + if (this.TrackRevisionsManager.CompleteTrackChangesForElements(arrRelatedParas)) + { + this.Document_UpdateInterfaceState(); + this.Document_UpdateSelectionState(); + return; + } + + if (false === this.Document_Is_SelectionLocked(AscCommon.changestype_None, { + Type : changestype_2_ElementsArray_and_Type, + Elements : arrRelatedParas, + CheckType : AscCommon.changestype_Paragraph_Content + })) + { + this.Create_NewHistoryPoint(AscDFH.historydescription_Document_RejectRevisionChange); + this.private_SelectRevisionChange(oChange); + this.RejectRevisionChanges(oChange.get_Type(), false); + } + } }; CDocument.prototype.AcceptRevisionChangesBySelection = function() { var CurrentChange = this.TrackRevisionsManager.Get_CurrentChange(); if (null !== CurrentChange) - this.Accept_RevisionChange(CurrentChange); + { + this.Accept_RevisionChange(CurrentChange); + } else { var SelectedParagraphs = this.GetAllParagraphs({Selected : true}); @@ -458,13 +478,16 @@ CDocument.prototype.AcceptRevisionChangesBySelection = function() } } + this.TrackRevisionsManager.Clear_CurrentChange(); this.Get_NextRevisionChange(); }; CDocument.prototype.RejectRevisionChangesBySelection = function() { var CurrentChange = this.TrackRevisionsManager.Get_CurrentChange(); if (null !== CurrentChange) - this.Reject_RevisionChange(CurrentChange); + { + this.Reject_RevisionChange(CurrentChange); + } else { var SelectedParagraphs = this.GetAllParagraphs({Selected : true}); @@ -479,6 +502,7 @@ CDocument.prototype.RejectRevisionChangesBySelection = function() } } + this.TrackRevisionsManager.Clear_CurrentChange(); this.Get_NextRevisionChange(); }; CDocument.prototype.Accept_AllRevisionChanges = function(isSkipCheckLock) @@ -729,7 +753,7 @@ CDocument.prototype.RejectRevisionChanges = function(Type, bAll) }; CDocument.prototype.Have_RevisionChanges = function() { - this.TrackRevisionsManager.Continue_TrackRevisions(); + this.TrackRevisionsManager.ContinueTrackRevisions(); return this.TrackRevisionsManager.HaveOtherUsersChanges(); }; //---------------------------------------------------------------------------------------------------------------------- diff --git a/word/api.js b/word/api.js index 515fc8db22..959dea5c94 100644 --- a/word/api.js +++ b/word/api.js @@ -1548,37 +1548,51 @@ background-repeat: no-repeat;\ if (window["AscDesktopEditor"]["IsLocalFile"] && !window["AscDesktopEditor"]["IsLocalFile"]()) { this.sendEvent('asc_onSpellCheckInit', [ - "1027", - "1029", - "1030", - "1031", - "1032", - "1033", - "1036", - "1038", - "1040", - "1042", - "1043", - "1044", - "1045", - "1046", - "1048", - "1049", - "1051", - "1053", - "1055", - "1058", - "1062", - "1063", - "1066", - "1068", - "2055", - "2057", - "2068", - "2070", - "3079", - "3081", - "3082" + "1026", + "1027", + "1029", + "1030", + "1031", + "1032", + "1033", + "1036", + "1038", + "1040", + "1042", + "1043", + "1044", + "1045", + "1046", + "1048", + "1049", + "1050", + "1051", + "1053", + "1055", + "1057", + "1058", + "1060", + "1062", + "1063", + "1066", + "1068", + "1069", + "1087", + "1104", + "1110", + "1134", + "2051", + "2055", + "2057", + "2068", + "2070", + "3079", + "3081", + "3082", + "4105", + "7177", + "9242", + "10266" ]); } } else { @@ -2268,6 +2282,24 @@ background-repeat: no-repeat;\ this.sendEvent("asc_onShowSpecialPasteOptions", props); } }; + + asc_docs_api.prototype.beginInlineDropTarget = function(e) + { + if (this.WordControl.m_oLogicDocument && this.WordControl.m_oDrawingDocument) + { + this.WordControl.m_oDrawingDocument.StartTrackText(); + this.WordControl.StartUpdateOverlay(); + this.WordControl.onMouseMove(e); + this.WordControl.EndUpdateOverlay(); + } + }; + asc_docs_api.prototype.endInlineDropTarget = function(e) + { + if (this.WordControl.m_oLogicDocument && this.WordControl.m_oDrawingDocument) + { + this.WordControl.m_oDrawingDocument.EndTrackText(true); + } + }; asc_docs_api.prototype._onSaveCallbackInner = function() { @@ -2336,7 +2368,7 @@ background-repeat: no-repeat;\ UserId : this.CoAuthoringApi.getUserConnectionId(), UserShortId : this.DocInfo.get_UserId(), CursorInfo : CursorInfo - }, HaveOtherChanges); + }, HaveOtherChanges, true); } }; asc_docs_api.prototype._autoSaveInner = function () { @@ -3551,7 +3583,7 @@ background-repeat: no-repeat;\ return -1; var oNumPr = oLogicDocument.GetSelectedNum(true); - if (!oNumPr) + if (!oNumPr || !oNumPr.Lvl) return -1; return oNumPr.Lvl; @@ -6403,10 +6435,12 @@ background-repeat: no-repeat;\ if (this.isApplyChangesOnOpenEnabled) { - if (AscCommon.EncryptionWorker && !AscCommon.EncryptionWorker.isChangesHandled) - { - return AscCommon.EncryptionWorker.handleChanges(AscCommon.CollaborativeEditing.m_aChanges, this, this.OpenDocumentEndCallback); - } + if (AscCommon.EncryptionWorker) + { + AscCommon.EncryptionWorker.init(); + if (!AscCommon.EncryptionWorker.isChangesHandled) + return AscCommon.EncryptionWorker.handleChanges(AscCommon.CollaborativeEditing.m_aChanges, this, this.OpenDocumentEndCallback); + } this.isApplyChangesOnOpenEnabled = false; this._applyPreOpenLocks(); @@ -7119,9 +7153,10 @@ background-repeat: no-repeat;\ var t = this; AscCommon.openFileCommand(data, this.documentUrlChanges, AscCommon.c_oSerFormat.Signature, function(error, result) { - if (error) + if (error || (!result.bSerFormat && !Asc.c_rUneditableTypes.test(t.DocInfo && t.DocInfo.get_Format()))) { - t.sendEvent("asc_onError", c_oAscError.ID.Unknown, c_oAscError.Level.Critical); + var err = error ? c_oAscError.ID.Unknown : c_oAscError.ID.ConvertationOpenError; + t.sendEvent("asc_onError", err, c_oAscError.Level.Critical); return; } t.onEndLoadFile(result); diff --git a/word/apiCommon.js b/word/apiCommon.js index 83c3286e9d..a201394c81 100644 --- a/word/apiCommon.js +++ b/word/apiCommon.js @@ -1160,7 +1160,7 @@ this.Italic = (undefined != obj.Italic) ? obj.Italic : null; this.Underline = (undefined != obj.Underline) ? obj.Underline : null; this.Strikeout = (undefined != obj.Strikeout) ? obj.Strikeout : null; - this.FontFamily = (undefined != obj.FontFamily && null != obj.FontFamily) ? new AscCommon.asc_CTextFontFamily(obj.FontFamily) : null; + this.FontFamily = (undefined != obj.FontFamily && null != obj.FontFamily) ? new AscCommon.asc_CTextFontFamily(obj.FontFamily) : new AscCommon.asc_CTextFontFamily({Name : "", Index : -1}); this.FontSize = (undefined != obj.FontSize) ? obj.FontSize : null; this.Color = (undefined != obj.Color && null != obj.Color) ? AscCommon.CreateAscColorCustom(obj.Color.r, obj.Color.g, obj.Color.b) : null; this.VertAlign = (undefined != obj.VertAlign) ? obj.VertAlign : null; @@ -1709,6 +1709,8 @@ return this.Lvl[0]; else if (nLvl > 8) return this.Lvl[8]; + else if (!this.Lvl[nLvl]) + return this.Lvl[0]; return this.Lvl[nLvl]; };