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];
};