DocumentServer/OfficeWeb/sdk/Excel/model/CellComment.js
2015-04-28 17:59:00 +03:00

1457 lines
56 KiB
JavaScript

/*
* (c) Copyright Ascensio System SIA 2010-2015
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
* EU, LV-1021.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
function asc_CCommentCoords(obj) {
this.nRow = null;
this.nCol = null;
this.nLeft = null;
this.nLeftOffset = null;
this.nTop = null;
this.nTopOffset = null;
this.nRight = null;
this.nRightOffset = null;
this.nBottom = null;
this.nBottomOffset = null;
this.dLeftMM = null;
this.dTopMM = null;
this.dLeftPX = null;
this.dReverseLeftPX = null;
this.dTopPX = null;
this.dWidthMM = null;
this.dHeightMM = null;
this.dWidthPX = null;
this.dHeightPX = null;
this.bMoveWithCells = false;
this.bSizeWithCells = false;
if (obj) {
this.nRow = obj.nRow;
this.nCol = obj.nCol;
this.nLeft = obj.nLeft;
this.nLeftOffset = obj.nLeftOffset;
this.nTop = obj.nTop;
this.nTopOffset = obj.nTopOffset;
this.nRight = obj.nRight;
this.nRightOffset = obj.nRightOffset;
this.nBottom = obj.nBottom;
this.nBottomOffset = obj.nBottomOffset;
this.dLeftMM = obj.dLeftMM;
this.dTopMM = obj.dTopMM;
this.dLeftPX = obj.dLeftPX;
this.dReverseLeftPX = obj.dReverseLeftPX;
this.dTopPX = obj.dTopPX;
this.dWidthMM = obj.dWidthMM;
this.dHeightMM = obj.dHeightMM;
this.dWidthPX = obj.dWidthPX;
this.dHeightPX = obj.dHeightPX;
this.bMoveWithCells = obj.bMoveWithCells;
this.bSizeWithCells = obj.bSizeWithCells;
}
}
asc_CCommentCoords.prototype = {
asc_setRow: function (val) {
this.nRow = val;
},
asc_getRow: function () {
return this.nRow;
},
asc_setCol: function (val) {
this.nCol = val;
},
asc_getCol: function () {
return this.nCol;
},
asc_setLeft: function (val) {
this.nLeft = val;
},
asc_getLeft: function () {
return this.nLeft;
},
asc_setLeftOffset: function (val) {
this.nLeftOffset = val;
},
asc_getLeftOffset: function () {
return this.nLeftOffset;
},
asc_setTop: function (val) {
this.nTop = val;
},
asc_getTop: function () {
return this.nTop;
},
asc_setTopOffset: function (val) {
this.nTopOffset = val;
},
asc_getTopOffset: function () {
return this.nTopOffset;
},
asc_setRight: function (val) {
this.nRight = val;
},
asc_getRight: function () {
return this.nRight;
},
asc_setRightOffset: function (val) {
this.nRightOffset = val;
},
asc_getRightOffset: function () {
return this.nRightOffset;
},
asc_setBottom: function (val) {
this.nBottom = val;
},
asc_getBottom: function () {
return this.nBottom;
},
asc_setBottomOffset: function (val) {
this.nBottomOffset = val;
},
asc_getBottomOffset: function () {
return this.nBottomOffset;
},
asc_setLeftMM: function (val) {
this.dLeftMM = val;
},
asc_getLeftMM: function () {
return this.dLeftMM;
},
asc_setLeftPX: function (val) {
this.dLeftPX = val;
},
asc_getLeftPX: function () {
return this.dLeftPX;
},
asc_setReverseLeftPX: function (val) {
this.dReverseLeftPX = val;
},
asc_getReverseLeftPX: function () {
return this.dReverseLeftPX;
},
asc_setTopMM: function (val) {
this.dTopMM = val;
},
asc_getTopMM: function () {
return this.dTopMM;
},
asc_setTopPX: function (val) {
this.dTopPX = val;
},
asc_getTopPX: function () {
return this.dTopPX;
},
asc_setWidthMM: function (val) {
this.dWidthMM = val;
},
asc_getWidthMM: function () {
return this.dWidthMM;
},
asc_setHeightMM: function (val) {
this.dHeightMM = val;
},
asc_getHeightMM: function () {
return this.dHeightMM;
},
asc_setWidthPX: function (val) {
this.dWidthPX = val;
},
asc_getWidthPX: function () {
return this.dWidthPX;
},
asc_setHeightPX: function (val) {
this.dHeightPX = val;
},
asc_getHeightPX: function () {
return this.dHeightPX;
},
asc_setMoveWithCells: function (val) {
this.bMoveWithCells = val;
},
asc_getMoveWithCells: function () {
return this.bMoveWithCells;
},
asc_setSizeWithCells: function (val) {
this.bSizeWithCells = val;
},
asc_getSizeWithCells: function () {
return this.bSizeWithCells;
}
};
window["Asc"]["asc_CCommentCoords"] = window["Asc"].asc_CCommentCoords = asc_CCommentCoords;
var g_oCCommentDataProperties = {
wsId: 0,
nCol: 1,
nRow: 2,
nId: 3,
nLevel: 5,
sText: 6,
sQuoteText: 7,
sTime: 8,
sUserId: 9,
sUserName: 10,
bDocument: 11,
bSolved: 12,
aReplies: 13,
bHidden: 14
};
function asc_CCommentData(obj) {
this.Properties = g_oCCommentDataProperties;
this.bHidden = false;
this.wsId = null;
this.nCol = 0;
this.nRow = 0;
this.nId = null;
this.oParent = null;
this.nLevel = 0;
this.sText = "";
this.sQuoteText = "";
this.sTime = "";
this.sUserId = "";
this.sUserName = "";
this.bDocument = true;
this.bSolved = false;
this.aReplies = [];
if (obj) {
this.bHidden = obj.bHidden;
this.wsId = obj.wsId;
this.nCol = obj.nCol;
this.nRow = obj.nRow;
this.nId = obj.nId;
this.oParent = obj.oParent;
this.nLevel = (null === this.oParent) ? 0 : this.oParent.asc_getLevel() + 1;
this.sText = obj.sText;
this.sQuoteText = obj.sQuoteText;
this.sTime = obj.sTime;
this.sUserId = obj.sUserId;
this.sUserName = obj.sUserName;
this.bDocument = obj.bDocument;
this.bSolved = obj.bSolved;
this.aReplies = [];
for (var i = 0; i < obj.aReplies.length; i++) {
var item = new asc_CCommentData(obj.aReplies[i]);
this.aReplies.push(item);
}
}
}
asc_CCommentData.prototype = {
guid: function () {
function S4() {
return (((1 + Math.random()) * 65536) | 0).toString(16).substring(1);
}
return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
},
setId: function () {
if (this.bDocument) {
this.nId = "doc_" + this.guid();
} else {
this.nId = "sheet" + this.wsId + "_" + this.guid();
}
},
asc_putQuoteText: function (val) {
this.sQuoteText = val;
},
asc_getQuoteText: function () {
return this.sQuoteText;
},
asc_putRow: function (val) {
this.nRow = val;
},
asc_getRow: function () {
return this.nRow;
},
asc_putCol: function (val) {
this.nCol = val;
},
asc_getCol: function () {
return this.nCol;
},
asc_putId: function (val) {
this.nId = val;
},
asc_getId: function () {
return this.nId;
},
asc_putLevel: function (val) {
this.nLevel = val;
},
asc_getLevel: function () {
return this.nLevel;
},
asc_putParent: function (obj) {
this.oParent = obj;
},
asc_getParent: function () {
return this.oParent;
},
asc_putText: function (val) {
this.sText = val ? val.slice(0, c_oAscMaxCellOrCommentLength) : val;
},
asc_getText: function () {
return this.sText;
},
asc_putTime: function (val) {
this.sTime = val;
},
asc_getTime: function () {
return this.sTime;
},
asc_putUserId: function (val) {
this.sUserId = val;
},
asc_getUserId: function () {
return this.sUserId;
},
asc_putUserName: function (val) {
this.sUserName = val;
},
asc_getUserName: function () {
return this.sUserName;
},
asc_putDocumentFlag: function (val) {
this.bDocument = val;
},
asc_getDocumentFlag: function () {
return this.bDocument;
},
asc_putHiddenFlag: function (val) {
this.bHidden = val;
},
asc_getHiddenFlag: function () {
return this.bHidden;
},
asc_putSolved: function (val) {
this.bSolved = val;
},
asc_getSolved: function () {
return this.bSolved;
},
asc_getRepliesCount: function () {
return this.aReplies.length;
},
asc_getReply: function (index) {
return this.aReplies[index];
},
asc_addReply: function (oReply) {
oReply.asc_putParent(this);
oReply.asc_putDocumentFlag(this.asc_getDocumentFlag());
oReply.asc_putLevel((oReply.oParent == null) ? 0 : oReply.oParent.asc_getLevel() + 1);
oReply.wsId = (oReply.oParent == null) ? -1 : oReply.oParent.wsId;
oReply.setId();
oReply.asc_putCol(this.nCol);
oReply.asc_putRow(this.nRow);
this.aReplies.push(oReply);
return oReply;
},
asc_getMasterCommentId: function () {
return this.wsId;
},
getType: function () {
return UndoRedoDataTypes.CommentData;
},
getProperties: function () {
return this.Properties;
},
getProperty: function (nType) {
switch (nType) {
case this.Properties.wsId:
return this.wsId;
break;
case this.Properties.nCol:
return this.nCol;
break;
case this.Properties.nRow:
return this.nRow;
break;
case this.Properties.nId:
return this.nId;
break;
case this.Properties.nLevel:
return this.nLevel;
break;
case this.Properties.sText:
return this.sText;
break;
case this.Properties.sQuoteText:
return this.sQuoteText;
break;
case this.Properties.sTime:
return this.sTime;
break;
case this.Properties.sUserId:
return this.sUserId;
break;
case this.Properties.sUserName:
return this.sUserName;
break;
case this.Properties.bDocument:
return this.bDocument;
break;
case this.Properties.bSolved:
return this.bSolved;
break;
case this.Properties.aReplies:
return this.aReplies;
break;
case this.Properties.bHidden:
return this.bHidden;
break;
}
return null;
},
setProperty: function (nType, value) {
switch (nType) {
case this.Properties.wsId:
this.wsId = value;
break;
case this.Properties.nCol:
this.nCol = value;
break;
case this.Properties.nRow:
this.nRow = value;
break;
case this.Properties.nId:
this.nId = value;
break;
case this.Properties.nLevel:
this.nLevel = value;
break;
case this.Properties.sText:
this.sText = value;
break;
case this.Properties.sQuoteText:
this.sQuoteText = value;
break;
case this.Properties.sTime:
this.sTime = value;
break;
case this.Properties.sUserId:
this.sUserId = value;
break;
case this.Properties.sUserName:
this.sUserName = value;
break;
case this.Properties.bDocument:
this.bDocument = value;
break;
case this.Properties.bSolved:
this.bSolved = value;
break;
case this.Properties.aReplies:
this.aReplies = value;
break;
case this.Properties.bHidden:
this.bHidden = value;
break;
}
},
applyCollaborative: function (nSheetId, collaborativeEditing) {
if (!this.bDocument) {
this.nCol = collaborativeEditing.getLockMeColumn2(nSheetId, this.nCol);
this.nRow = collaborativeEditing.getLockMeRow2(nSheetId, this.nRow);
}
}
};
window["Asc"]["asc_CCommentData"] = window["Asc"].asc_CCommentData = asc_CCommentData;
prot = asc_CCommentData.prototype;
prot["asc_putRow"] = prot.asc_putRow;
prot["asc_getRow"] = prot.asc_getRow;
prot["asc_putCol"] = prot.asc_putCol;
prot["asc_getCol"] = prot.asc_getCol;
prot["asc_putId"] = prot.asc_putId;
prot["asc_getId"] = prot.asc_getId;
prot["asc_putLevel"] = prot.asc_putLevel;
prot["asc_getLevel"] = prot.asc_getLevel;
prot["asc_putParent"] = prot.asc_putParent;
prot["asc_getParent"] = prot.asc_getParent;
prot["asc_putText"] = prot.asc_putText;
prot["asc_getText"] = prot.asc_getText;
prot["asc_putQuoteText"] = prot.asc_putQuoteText;
prot["asc_getQuoteText"] = prot.asc_getQuoteText;
prot["asc_putTime"] = prot.asc_putTime;
prot["asc_getTime"] = prot.asc_getTime;
prot["asc_putUserId"] = prot.asc_putUserId;
prot["asc_getUserId"] = prot.asc_getUserId;
prot["asc_putUserName"] = prot.asc_putUserName;
prot["asc_getUserName"] = prot.asc_getUserName;
prot["asc_putDocumentFlag"] = prot.asc_putDocumentFlag;
prot["asc_getDocumentFlag"] = prot.asc_getDocumentFlag;
prot["asc_putHiddenFlag"] = prot.asc_putHiddenFlag;
prot["asc_getHiddenFlag"] = prot.asc_getHiddenFlag;
prot["asc_putSolved"] = prot.asc_putSolved;
prot["asc_getSolved"] = prot.asc_getSolved;
prot["asc_getRepliesCount"] = prot.asc_getRepliesCount;
prot["asc_getReply"] = prot.asc_getReply;
prot["asc_addReply"] = prot.asc_addReply;
prot["asc_getMasterCommentId"] = prot.asc_getMasterCommentId;
var g_oCompositeCommentDataProperties = {
commentBefore: 0,
commentAfter: 1
};
function CompositeCommentData() {
this.commentBefore = null;
this.commentAfter = null;
this.Properties = g_oCompositeCommentDataProperties;
}
CompositeCommentData.prototype = {
getType: function () {
return UndoRedoDataTypes.CompositeCommentData;
},
getProperties: function () {
return this.Properties;
},
getProperty: function (nType) {
switch (nType) {
case this.Properties.commentBefore:
return this.commentBefore;
break;
case this.Properties.commentAfter:
return this.commentAfter;
break;
}
return null;
},
setProperty: function (nType, value) {
switch (nType) {
case this.Properties.commentBefore:
this.commentBefore = value;
break;
case this.Properties.commentAfter:
this.commentAfter = value;
break;
}
}
};
function CCellCommentator(currentSheet) {
this.worksheet = currentSheet;
this.overlayCtx = currentSheet.overlayCtx;
this.drawingCtx = currentSheet.drawingCtx;
this.bShow = true;
this.commentIconColor = new CColor(255, 144, 0);
this.commentFillColor = new CColor(255, 255, 0);
this.commentPadding = 4;
this.minAreaWidth = 160;
this.minAreaHeight = 80;
this.aComments = [];
this.aCommentCoords = [];
this.lastSelectedId = null;
this.bSaveHistory = true;
}
CCellCommentator.sStartCommentId = "comment_";
CCellCommentator.prototype.isViewerMode = function () {
return this.worksheet.handlers.trigger("getViewerMode");
};
CCellCommentator.prototype.isLockedComment = function (oComment, callbackFunc) {
Asc.applyFunction(callbackFunc, true);
};
CCellCommentator.prototype.moveRangeComments = function (rangeFrom, rangeTo) {
if (rangeFrom && rangeTo) {
var colOffset = rangeTo.c1 - rangeFrom.c1;
var rowOffset = rangeTo.r1 - rangeFrom.r1;
this.worksheet.model.workbook.handlers.trigger("asc_onHideComment");
for (var i = 0; i < this.aComments.length; i++) {
var comment = this.aComments[i];
if ((comment.nCol >= rangeFrom.c1) && (comment.nCol <= rangeFrom.c2) && (comment.nRow >= rangeFrom.r1) && (comment.nRow <= rangeFrom.r2)) {
var commentBefore = new asc_CCommentData(comment);
comment.nCol += colOffset;
comment.nRow += rowOffset;
var cellAddress = new CellAddress(comment.nRow, comment.nCol, 0);
comment.sQuoteText = cellAddress.getID() + " : " + this.worksheet.model.getCell(cellAddress).getValueWithFormat();
this.worksheet.model.workbook.handlers.trigger("asc_onChangeCommentData", comment.asc_getId(), comment);
var commentAfter = new asc_CCommentData(comment);
var compositeComment = new CompositeCommentData();
compositeComment.commentBefore = commentBefore;
compositeComment.commentAfter = commentAfter;
History.Create_NewPoint();
History.Add(g_oUndoRedoComment, historyitem_Comment_Change, this.worksheet.model.getId(), null, compositeComment);
}
}
}
};
CCellCommentator.prototype.deleteCommentsRange = function (range) {
if (range) {
var aCommentId = [],
i;
for (i = 0; i < this.aComments.length; ++i) {
var comment = this.aComments[i];
if ((comment.nCol >= range.c1) && (comment.nCol <= range.c2) && (comment.nRow >= range.r1) && (comment.nRow <= range.r2)) {
aCommentId.push(comment.asc_getId());
}
}
History.StartTransaction();
for (i = 0; i < aCommentId.length; i++) {
this.asc_removeComment(aCommentId[i]);
}
History.EndTransaction();
}
};
CCellCommentator.prototype.prepareComments = function (arrComments) {
var commentList = [];
for (var i = 0; i < arrComments.length; ++i) {
var comment = {
"Id": arrComments[i].asc_getId(),
"Comment": arrComments[i]
};
this.addCommentSerialize(comment["Comment"]);
commentList.push(comment);
}
return commentList;
};
CCellCommentator.prototype.addCommentSerialize = function (oComment) {
if (oComment) {
if (!oComment.bDocument && (oComment.nCol != null) && (oComment.nRow != null)) {
var cellAddress = new CellAddress(oComment.nRow, oComment.nCol, 0);
oComment.sQuoteText = cellAddress.getID() + " : " + this.worksheet.model.getCell(cellAddress).getValueWithFormat();
}
this.aComments.push(oComment);
}
};
CCellCommentator.prototype.getCommentsXY = function (x, y) {
var findCol = this.worksheet._findColUnderCursor(this.pxToPt(x), true);
var findRow = this.worksheet._findRowUnderCursor(this.pxToPt(y), true);
return (findCol && findRow) ? this.asc_getComments(findCol.col, findRow.row) : [];
};
CCellCommentator.prototype.drawCommentCells = function () {
if (this.isViewerMode() || !this.bShow) {
return;
}
this.drawingCtx.setFillStyle(this.commentIconColor);
var commentCell, mergedRange, nCol, nRow, x, y, metrics;
for (var i = 0; i < this.aComments.length; ++i) {
commentCell = this.aComments[i];
if (commentCell.asc_getDocumentFlag() || commentCell.asc_getHiddenFlag() || commentCell.asc_getSolved()) {
continue;
}
mergedRange = this.worksheet.model.getMergedByCell(commentCell.nRow, commentCell.nCol);
nCol = mergedRange ? mergedRange.c2 : commentCell.nCol;
nRow = mergedRange ? mergedRange.r1 : commentCell.nRow;
if (metrics = this.worksheet.getCellMetrics(nCol, nRow)) {
x = metrics.left + metrics.width;
y = metrics.top;
this.drawingCtx.beginPath();
this.drawingCtx.moveTo(x - this.pxToPt(7), y);
this.drawingCtx.lineTo(x - this.pxToPt(1), y);
this.drawingCtx.lineTo(x - this.pxToPt(1), y + this.pxToPt(6));
this.drawingCtx.fill();
}
}
};
CCellCommentator.prototype.getTextMetrics = function (text, units) {
var metrics = {
width: 0,
height: 0
};
if (text && text.length && ((typeof(text) == "string") || (typeof(text) == "number"))) {
var textOptions = this.overlayCtx.measureText(text, units);
metrics.width = textOptions.width;
metrics.height = textOptions.lineHeight;
}
return metrics;
};
CCellCommentator.prototype.updateCommentPosition = function () {
if (this.lastSelectedId) {
var comment = this.asc_findComment(this.lastSelectedId);
if (comment) {
var commentList = this.asc_getComments(comment.asc_getCol(), comment.asc_getRow());
if (commentList.length) {
this.drawCommentCells();
var coords = this.getCommentsCoords(commentList);
var indexes = [];
for (var i = 0; i < commentList.length; i++) {
indexes.push(commentList[i].asc_getId());
}
var isVisible = (null !== this.worksheet.getCellVisibleRange(comment.asc_getCol(), comment.asc_getRow()));
this.worksheet.model.workbook.handlers.trigger("asc_onUpdateCommentPosition", indexes, (isVisible ? coords.asc_getLeftPX() : -1), (isVisible ? coords.asc_getTopPX() : -1), (isVisible ? coords.asc_getReverseLeftPX() : -1));
}
}
}
};
CCellCommentator.prototype.updateCommentsDependencies = function (bInsert, operType, updateRange) {
var t = this;
var UpdatePair = function (comment, bChange) {
this.comment = comment;
this.bChange = bChange;
};
var aChangedComments = [];
function updateCommentsList(aComments) {
if (aComments.length) {
t.bSaveHistory = false;
var changeArray = [];
var removeArray = [];
for (var i = 0; i < aComments.length; i++) {
if (aComments[i].bChange) {
t.asc_changeComment(aComments[i].comment.asc_getId(), aComments[i].comment, true, true, true, false);
changeArray.push({
"Id": aComments[i].comment.asc_getId(),
"Comment": aComments[i].comment
});
} else {
t.asc_removeComment(aComments[i].comment.asc_getId(), true, true, false);
removeArray.push(aComments[i].comment.asc_getId());
}
}
if (changeArray.length) {
t.worksheet.model.workbook.handlers.trigger("asc_onChangeComments", changeArray);
}
if (removeArray.length) {
t.worksheet.model.workbook.handlers.trigger("asc_onRemoveComments", removeArray);
}
t.bSaveHistory = true;
}
}
var i, comment;
if (bInsert) {
switch (operType) {
case c_oAscInsertOptions.InsertCellsAndShiftDown:
for (i = 0; i < this.aComments.length; i++) {
comment = new asc_CCommentData(this.aComments[i]);
if ((comment.nRow >= updateRange.r1) && (comment.nCol >= updateRange.c1) && (comment.nCol <= updateRange.c2)) {
comment.nRow += updateRange.r2 - updateRange.r1 + 1;
aChangedComments.push(new UpdatePair(comment, true));
}
}
break;
case c_oAscInsertOptions.InsertCellsAndShiftRight:
for (i = 0; i < this.aComments.length; i++) {
comment = new asc_CCommentData(this.aComments[i]);
if ((comment.nCol >= updateRange.c1) && (comment.nRow >= updateRange.r1) && (comment.nRow <= updateRange.r2)) {
comment.nCol += updateRange.c2 - updateRange.c1 + 1;
aChangedComments.push(new UpdatePair(comment, true));
}
}
break;
case c_oAscInsertOptions.InsertColumns:
for (i = 0; i < this.aComments.length; i++) {
comment = new asc_CCommentData(this.aComments[i]);
if (comment.nCol >= updateRange.c1) {
comment.nCol += updateRange.c2 - updateRange.c1 + 1;
aChangedComments.push(new UpdatePair(comment, true));
}
}
break;
case c_oAscInsertOptions.InsertRows:
for (i = 0; i < this.aComments.length; i++) {
comment = new asc_CCommentData(this.aComments[i]);
if (comment.nRow >= updateRange.r1) {
comment.nRow += updateRange.r2 - updateRange.r1 + 1;
aChangedComments.push(new UpdatePair(comment, true));
}
}
break;
}
} else {
switch (operType) {
case c_oAscDeleteOptions.DeleteCellsAndShiftTop:
for (i = 0; i < this.aComments.length; i++) {
comment = new asc_CCommentData(this.aComments[i]);
if ((comment.nRow > updateRange.r1) && (comment.nCol >= updateRange.c1) && (comment.nCol <= updateRange.c2)) {
comment.nRow -= updateRange.r2 - updateRange.r1 + 1;
aChangedComments.push(new UpdatePair(comment, true));
} else {
if ((updateRange.c1 <= comment.nCol) && (updateRange.c2 >= comment.nCol) && (comment.nRow >= updateRange.r1) && (comment.nRow <= updateRange.r2)) {
aChangedComments.push(new UpdatePair(comment, false));
}
}
}
break;
case c_oAscDeleteOptions.DeleteCellsAndShiftLeft:
for (i = 0; i < this.aComments.length; i++) {
comment = new asc_CCommentData(this.aComments[i]);
if ((comment.nCol > updateRange.c2) && (comment.nRow >= updateRange.r1) && (comment.nRow <= updateRange.r2)) {
comment.nCol -= updateRange.c2 - updateRange.c1 + 1;
aChangedComments.push(new UpdatePair(comment, true));
} else {
if ((updateRange.c1 <= comment.nCol) && (updateRange.c2 >= comment.nCol) && (comment.nRow >= updateRange.r1) && (comment.nRow <= updateRange.r2)) {
aChangedComments.push(new UpdatePair(comment, false));
}
}
}
break;
case c_oAscDeleteOptions.DeleteColumns:
for (i = 0; i < this.aComments.length; i++) {
comment = new asc_CCommentData(this.aComments[i]);
if (comment.nCol > updateRange.c2) {
comment.nCol -= updateRange.c2 - updateRange.c1 + 1;
aChangedComments.push(new UpdatePair(comment, true));
} else {
if ((updateRange.c1 <= comment.nCol) && (updateRange.c2 >= comment.nCol)) {
aChangedComments.push(new UpdatePair(comment, false));
}
}
}
break;
case c_oAscDeleteOptions.DeleteRows:
for (i = 0; i < this.aComments.length; i++) {
comment = new asc_CCommentData(this.aComments[i]);
if (comment.nRow > updateRange.r2) {
comment.nRow -= updateRange.r2 - updateRange.r1 + 1;
aChangedComments.push(new UpdatePair(comment, true));
} else {
if ((updateRange.r1 <= comment.nRow) && (updateRange.r2 >= comment.nRow)) {
aChangedComments.push(new UpdatePair(comment, false));
}
}
}
break;
}
}
updateCommentsList(aChangedComments);
};
CCellCommentator.prototype.sortComments = function (activeRange, changes) {
var t = this;
if (changes && activeRange) {
var updateCommentsList = function (aComments) {
if (aComments.length) {
History.StartTransaction();
for (var i = 0; i < aComments.length; i++) {
t.asc_changeComment(aComments[i].asc_getId(), aComments[i], true);
}
History.EndTransaction();
t.drawCommentCells();
}
};
var aChangedComments = [];
for (var i = 0; i < changes.places.length; i++) {
var list = this.asc_getComments(activeRange.c1, changes.places[i].from);
for (var j = 0; j < list.length; j++) {
var comment = new asc_CCommentData(list[j]);
comment.nRow = changes.places[i].to;
aChangedComments.push(comment);
}
}
updateCommentsList(aChangedComments);
}
};
CCellCommentator.prototype.resetLastSelectedId = function () {
this.cleanLastSelection();
this.lastSelectedId = null;
};
CCellCommentator.prototype.cleanLastSelection = function () {
var metrics;
if (this.lastSelectedId) {
var lastComment = this.asc_findComment(this.lastSelectedId);
if (lastComment && (metrics = this.worksheet.getCellMetrics(lastComment.nCol, lastComment.nRow))) {
var extraOffset = this.pxToPt(1);
this.overlayCtx.clearRect(metrics.left, metrics.top, metrics.width - extraOffset, metrics.height - extraOffset);
}
}
};
CCellCommentator.prototype.calcCommentsCoords = function (bSave) {
this.aCommentCoords = [];
for (var i = 0; i < this.aComments.length; i++) {
var commentCell = this.aComments[i];
if (commentCell.asc_getDocumentFlag() || !this.commentCoordsExist(commentCell.asc_getCol(), commentCell.asc_getRow())) {
var commentList = this.asc_getComments(commentCell.asc_getCol(), commentCell.asc_getRow());
if (bSave && (commentCell.asc_getCol() == 0) && (commentCell.asc_getRow() == 0)) {
var documentComments = this.asc_getDocumentComments();
for (var j = 0; j < documentComments.length; j++) {
commentList.push(documentComments[j]);
}
}
if (commentList.length) {
this.aCommentCoords.push(this.getCommentsCoords(commentList));
}
}
}
};
CCellCommentator.prototype.calcCommentArea = function (comment, coords) {
var originalFont = this.overlayCtx.getFont();
var outputFont = originalFont.clone();
outputFont.Bold = true;
outputFont.FontSize = 9;
this.overlayCtx.setFont(outputFont);
var txtMetrics = this.getTextMetrics(comment.sUserName, 1);
coords.dHeightPX += this.ptToPx(txtMetrics.height);
var userWidth = this.ptToPx(txtMetrics.width);
if (coords.dWidthPX < userWidth) {
coords.dWidthPX = userWidth;
}
txtMetrics = this.getTextMetrics(comment.sTime, 1);
coords.dHeightPX += this.ptToPx(txtMetrics.height);
var timeWidth = this.ptToPx(txtMetrics.width);
if (coords.dWidthPX < timeWidth) {
coords.dWidthPX = timeWidth;
}
outputFont.Bold = false;
outputFont.FontSize = 9;
this.overlayCtx.setFont(outputFont);
var commentSpl = comment.sText.split("\n"),
i;
for (i = 0; i < commentSpl.length; i++) {
txtMetrics = this.getTextMetrics(commentSpl[i], 1);
coords.dHeightPX += this.ptToPx(txtMetrics.height);
var lineWidth = this.ptToPx(txtMetrics.width);
if (coords.dWidthPX < lineWidth) {
coords.dWidthPX = lineWidth;
}
}
for (i = 0; i < comment.aReplies.length; i++) {
this.calcCommentArea(comment.aReplies[i], coords);
}
if (coords.dWidthPX < this.minAreaWidth) {
coords.dWidthPX = this.minAreaWidth;
}
if (coords.dHeightPX < this.minAreaHeight) {
coords.dHeightPX = this.minAreaHeight;
}
coords.dWidthMM = this.pxToMm(coords.dWidthPX);
coords.dHeightMM = this.pxToMm(coords.dHeightPX);
var headerRowOffPx = this.worksheet.getCellTop(0, 0);
var headerColOffPx = this.worksheet.getCellLeft(0, 0);
var headerCellsOffsetPt = this.worksheet.getCellsOffset(1);
coords.nCol = comment.nCol;
coords.nRow = comment.nRow;
var mergedRange = this.worksheet.model.getMergedByCell(comment.nRow, comment.nCol);
coords.nLeft = (mergedRange ? mergedRange.c2 : comment.nCol) + 1;
if (!this.worksheet.cols[coords.nLeft]) {
this.worksheet.expandColsOnScroll(true);
this.worksheet.handlers.trigger("reinitializeScrollX");
}
coords.nTop = mergedRange ? mergedRange.r1 : comment.nRow;
coords.nLeftOffset = 0;
coords.nTopOffset = 0;
var fvr = this.worksheet.getFirstVisibleRow(false);
var fvc = this.worksheet.getFirstVisibleCol(false);
var frozenOffset = this.worksheet.getFrozenPaneOffset();
if (this.worksheet.topLeftFrozenCell) {
if (comment.nCol < fvc) {
frozenOffset.offsetX = 0;
fvc = 0;
}
if (comment.nRow < fvr) {
frozenOffset.offsetY = 0;
fvr = 0;
}
}
var fvrLeft = this.worksheet.getCellLeft(fvc, 1) - headerCellsOffsetPt.left;
var fvcTop = this.worksheet.getCellTop(fvr, 1) - headerCellsOffsetPt.top;
coords.dReverseLeftPX = this.ptToPx(this.worksheet.getCellLeft(comment.nCol, 1) - fvrLeft + frozenOffset.offsetX);
coords.dLeftPX = this.ptToPx(this.worksheet.getCellLeft(coords.nLeft, 1) - fvrLeft + frozenOffset.offsetX);
coords.dTopPX = this.ptToPx(this.worksheet.getCellTop(coords.nTop, 1) - fvcTop + frozenOffset.offsetY);
var fvrPx = this.worksheet.getCellTop(0, 0);
if (coords.dTopPX < fvrPx) {
coords.dTopPX = fvrPx;
}
coords.dLeftMM = this.worksheet.getCellLeft(coords.nLeft, 3) - this.worksheet.getCellLeft(fvc, 3);
coords.dTopMM = this.worksheet.getCellTop(coords.nTop, 3) - this.worksheet.getCellTop(fvr, 3);
var findCol = this.worksheet._findColUnderCursor(this.worksheet.getCellLeft(coords.nLeft, 1) + this.pxToPt(coords.dWidthPX + headerColOffPx) - this.worksheet.getCellLeft(fvc, 1), true);
var findRow = this.worksheet._findRowUnderCursor(this.worksheet.getCellTop(coords.nTop, 1) + this.pxToPt(coords.dHeightPX + headerRowOffPx) - this.worksheet.getCellTop(fvr, 1), true);
coords.nRight = findCol ? findCol.col : 0;
coords.nBottom = findRow ? findRow.row : 0;
coords.nRightOffset = this.worksheet.getCellLeft(coords.nLeft, 0) + coords.nLeftOffset + coords.dWidthPX + headerColOffPx - this.worksheet.getCellLeft(coords.nRight, 0);
coords.nBottomOffset = this.worksheet.getCellTop(coords.nTop, 0) + coords.nTopOffset + coords.dHeightPX + headerRowOffPx - this.worksheet.getCellTop(coords.nBottom, 0);
this.overlayCtx.setFont(originalFont);
};
CCellCommentator.prototype.getCommentsCoords = function (comments) {
var coords = new asc_CCommentCoords();
for (var i = 0; i < comments.length; i++) {
this.calcCommentArea(comments[i], coords);
}
if (comments.length) {
coords.dWidthPX += this.commentPadding * 2;
coords.dWidthMM = this.pxToMm(coords.dWidthPX);
coords.dHeightPX += this.commentPadding * 2;
coords.dHeightMM = this.pxToMm(coords.dHeightPX);
}
return coords;
};
CCellCommentator.prototype.commentCoordsExist = function (col, row) {
var result = false;
for (var i = 0; i < this.aCommentCoords.length; i++) {
if ((col == this.aCommentCoords[i].nCol) && (row == this.aCommentCoords[i].nRow)) {
return true;
}
}
return result;
};
CCellCommentator.prototype.prepareCommentsToSave = function () {
this.calcCommentsCoords(true);
};
CCellCommentator.prototype.cleanSelectedComment = function () {
var metrics;
if (this.lastSelectedId) {
var comment = this.asc_findComment(this.lastSelectedId);
if (comment && !comment.asc_getDocumentFlag() && !comment.asc_getSolved() && (metrics = this.worksheet.getCellMetrics(comment.asc_getCol(), comment.asc_getRow()))) {
this.overlayCtx.clearRect(metrics.left, metrics.top, metrics.width, metrics.height);
}
}
};
CCellCommentator.prototype.pxToPt = function (val) {
return val * this.ascCvtRatio(0, 1);
};
CCellCommentator.prototype.ptToPx = function (val) {
return val * this.ascCvtRatio(1, 0);
};
CCellCommentator.prototype.mmToPx = function (val) {
return val * this.ascCvtRatio(3, 0);
};
CCellCommentator.prototype.pxToMm = function (val) {
return val * this.ascCvtRatio(0, 3);
};
CCellCommentator.prototype.ascCvtRatio = function (fromUnits, toUnits) {
return Asc.getCvtRatio(fromUnits, toUnits, this.overlayCtx.getPPIX());
};
CCellCommentator.prototype.asc_showComments = function () {
if (!this.bShow) {
this.bShow = true;
this.drawCommentCells();
}
};
CCellCommentator.prototype.asc_hideComments = function () {
this.bShow = false;
this.drawCommentCells();
this.worksheet.model.workbook.handlers.trigger("asc_onHideComment");
};
CCellCommentator.prototype.asc_showComment = function (id, bNew) {
var comment = this.asc_findComment(id);
if (comment) {
var commentList = this.asc_getComments(comment.asc_getCol(), comment.asc_getRow());
var coords = this.getCommentsCoords(commentList);
var indexes = [];
for (var i = 0; i < commentList.length; i++) {
indexes.push(commentList[i].asc_getId());
}
if (indexes.length) {
this.worksheet.model.workbook.handlers.trigger("asc_onShowComment", indexes, coords.asc_getLeftPX(), coords.asc_getTopPX(), coords.asc_getReverseLeftPX(), bNew);
this.drawCommentCells();
}
this.lastSelectedId = id;
} else {
this.lastSelectedId = null;
}
};
CCellCommentator.prototype.asc_selectComment = function (id, bMove) {
var comment = this.asc_findComment(id);
var metrics;
this.cleanLastSelection();
this.lastSelectedId = null;
if (comment && !comment.asc_getDocumentFlag() && !comment.asc_getSolved()) {
this.lastSelectedId = id;
var col = comment.asc_getCol();
var row = comment.asc_getRow();
var fvc = this.worksheet.getFirstVisibleCol(true);
var fvr = this.worksheet.getFirstVisibleRow(true);
var lvc = this.worksheet.getLastVisibleCol();
var lvr = this.worksheet.getLastVisibleRow();
var offset;
if (bMove) {
if ((row < fvr) || (row > lvr)) {
offset = row - fvr - Math.round((lvr - fvr) / 2);
this.worksheet.scrollVertical(offset);
this.worksheet.handlers.trigger("reinitializeScrollY");
}
if ((col < fvc) || (col > lvc)) {
offset = col - fvc - Math.round((lvc - fvc) / 2);
this.worksheet.scrollHorizontal(offset);
this.worksheet.handlers.trigger("reinitializeScrollX");
}
}
if (metrics = this.worksheet.getCellMetrics(col, row)) {
var extraOffset = this.pxToPt(1);
this.overlayCtx.ctx.globalAlpha = 0.2;
this.overlayCtx.beginPath();
this.overlayCtx.clearRect(metrics.left, metrics.top, metrics.width - extraOffset, metrics.height - extraOffset);
this.overlayCtx.setFillStyle(this.commentFillColor);
this.overlayCtx.fillRect(metrics.left, metrics.top, metrics.width - extraOffset, metrics.height - extraOffset);
this.overlayCtx.ctx.globalAlpha = 1;
}
}
};
CCellCommentator.prototype.asc_findComment = function (id) {
function checkCommentId(id, commentObject) {
if (commentObject.asc_getId() == id) {
return commentObject;
}
for (var i = 0; i < commentObject.aReplies.length; i++) {
var comment = checkCommentId(id, commentObject.aReplies[i]);
if (comment) {
return comment;
}
}
return null;
}
for (var i = 0; i < this.aComments.length; i++) {
var commentCell = this.aComments[i];
var obj = checkCommentId(id, commentCell);
if (obj) {
return obj;
}
}
return null;
};
CCellCommentator.prototype.asc_addComment = function (comment, bIsNotUpdate) {
var t = this;
var oComment = comment;
var bChange = false;
oComment.wsId = this.worksheet.model.getId();
oComment.setId();
if (!oComment.bDocument) {
if (!bIsNotUpdate) {
oComment.asc_putCol(this.worksheet.getSelectedColumnIndex());
oComment.asc_putRow(this.worksheet.getSelectedRowIndex());
}
var existComments = this.asc_getComments(oComment.nCol, oComment.nRow);
if (existComments.length) {
oComment = existComments[0];
bChange = true;
} else {
if ((oComment.nCol != null) && (oComment.nRow != null)) {
var cellAddress = new CellAddress(oComment.nRow, oComment.nCol, 0);
oComment.sQuoteText = cellAddress.getID() + " : " + this.worksheet.model.getCell(cellAddress).getValueWithFormat();
}
}
}
var onAddCommentCallback = function (isSuccess) {
if (false === isSuccess) {
return;
}
t._addComment(oComment, bChange, bIsNotUpdate);
};
this.isLockedComment(oComment, onAddCommentCallback);
};
CCellCommentator.prototype.asc_changeComment = function (id, oComment, bChangeCoords, bNoEvent, bNoAscLock, bNoDraw) {
var t = this;
var comment = this.asc_findComment(id);
if (null === comment) {
return;
}
var onChangeCommentCallback = function (isSuccess) {
if (false === isSuccess) {
return;
}
var commentBefore = new asc_CCommentData(comment);
if (comment) {
if (bChangeCoords) {
comment.asc_putCol(oComment.asc_getCol());
comment.asc_putRow(oComment.asc_getRow());
}
comment.asc_putText(oComment.asc_getText());
comment.asc_putQuoteText(oComment.asc_getQuoteText());
comment.asc_putUserId(oComment.asc_getUserId());
comment.asc_putUserName(oComment.asc_getUserName());
comment.asc_putTime(oComment.asc_getTime());
comment.asc_putSolved(oComment.asc_getSolved());
comment.asc_putHiddenFlag(oComment.asc_getHiddenFlag());
comment.aReplies = [];
if (!comment.bDocument && (comment.nCol != null) && (comment.nRow != null)) {
var cellAddress = new CellAddress(comment.nRow, comment.nCol, 0);
comment.sQuoteText = cellAddress.getID() + " : " + t.worksheet.model.getCell(cellAddress).getValueWithFormat();
}
var count = oComment.asc_getRepliesCount();
for (var i = 0; i < count; i++) {
comment.asc_addReply(oComment.asc_getReply(i));
}
if (!bNoEvent) {
t.worksheet.model.workbook.handlers.trigger("asc_onChangeCommentData", comment.asc_getId(), comment);
}
}
if (t.bSaveHistory) {
var commentAfter = new asc_CCommentData(comment);
var compositeComment = new CompositeCommentData();
compositeComment.commentBefore = commentBefore;
compositeComment.commentAfter = commentAfter;
History.Create_NewPoint();
History.Add(g_oUndoRedoComment, historyitem_Comment_Change, t.worksheet.model.getId(), null, compositeComment);
}
if (!bNoDraw) {
t.drawCommentCells();
}
};
if (bNoAscLock) {
onChangeCommentCallback(true);
} else {
this.isLockedComment(comment, onChangeCommentCallback);
}
};
CCellCommentator.prototype.asc_removeComment = function (id, bNoEvent, bNoAscLock, bNoDraw) {
var t = this;
var comment = this.asc_findComment(id);
if (null === comment) {
return;
}
var onRemoveCommentCallback = function (isSuccess) {
if (false === isSuccess) {
return;
}
t._removeComment(comment, bNoEvent, !bNoDraw);
};
if (bNoAscLock) {
onRemoveCommentCallback(true);
} else {
this.isLockedComment(comment, onRemoveCommentCallback);
}
};
CCellCommentator.prototype.asc_getComments = function (col, row) {
var comments = [];
var _col = col,
_row = row,
mergedRange = null;
var length = this.aComments.length;
if (!this.bShow) {
return comments;
}
if (0 < length) {
if (null == _col || null == _row) {
var selectedCell = this.worksheet.getSelectedRange();
var oFirst = selectedCell.getFirst();
_col = oFirst.col - 1;
_row = oFirst.row - 1;
} else {
mergedRange = this.worksheet.model.getMergedByCell(row, col);
}
for (var i = 0; i < length; i++) {
var commentCell = this.aComments[i];
if (!commentCell.asc_getDocumentFlag() && !commentCell.asc_getHiddenFlag() && (commentCell.nLevel == 0)) {
if (!mergedRange) {
if ((_col == commentCell.nCol) && (_row == commentCell.nRow)) {
comments.push(commentCell);
}
} else {
if ((commentCell.nCol >= mergedRange.c1) && (commentCell.nRow >= mergedRange.r1) && (commentCell.nCol <= mergedRange.c2) && (commentCell.nRow <= mergedRange.r2)) {
comments.push(commentCell);
}
}
}
}
}
return comments;
};
CCellCommentator.prototype.asc_getDocumentComments = function () {
var comments = [];
for (var i = 0; i < this.aComments.length; i++) {
var commentCell = this.aComments[i];
if ((commentCell.nLevel == 0) && commentCell.asc_getDocumentFlag()) {
comments.push(commentCell);
}
}
return comments;
};
CCellCommentator.prototype._addComment = function (oComment, bChange, bIsNotUpdate) {
if (!bChange) {
History.Create_NewPoint();
History.Add(g_oUndoRedoComment, historyitem_Comment_Add, this.worksheet.model.getId(), null, new asc_CCommentData(oComment));
this.aComments.push(oComment);
if (!bIsNotUpdate) {
this.drawCommentCells();
}
}
this.worksheet.model.workbook.handlers.trigger("asc_onAddComment", oComment.asc_getId(), oComment);
};
CCellCommentator.prototype._removeComment = function (comment, bNoEvent, isDraw) {
if (!comment) {
return;
}
var i, id = comment.asc_getId();
if (comment.oParent) {
for (i = 0; i < comment.oParent.aReplies.length; ++i) {
if (comment.asc_getId() == comment.oParent.aReplies[i].asc_getId()) {
if (this.bSaveHistory) {
History.Create_NewPoint();
History.Add(g_oUndoRedoComment, historyitem_Comment_Remove, this.worksheet.model.getId(), null, new asc_CCommentData(comment.oParent.aReplies[i]));
}
comment.oParent.aReplies.splice(i, 1);
break;
}
}
} else {
for (i = 0; i < this.aComments.length; i++) {
if (comment.asc_getId() == this.aComments[i].asc_getId()) {
if (this.bSaveHistory) {
History.Create_NewPoint();
History.Add(g_oUndoRedoComment, historyitem_Comment_Remove, this.worksheet.model.getId(), null, new asc_CCommentData(this.aComments[i]));
}
this.aComments.splice(i, 1);
break;
}
}
if (isDraw) {
this.worksheet.draw();
}
}
if (isDraw) {
this.drawCommentCells();
}
if (!bNoEvent) {
this.worksheet.model.workbook.handlers.trigger("asc_onRemoveComment", id);
}
};
CCellCommentator.prototype.isMissComments = function (range) {
var oComment, bMiss = false;
for (var i = 0, length = this.aComments.length; i < length; ++i) {
oComment = this.aComments[i];
if (!oComment.bHidden && range.contains(oComment.nCol, oComment.nRow)) {
if (bMiss) {
return true;
}
bMiss = true;
}
}
return false;
};
CCellCommentator.prototype.mergeComments = function (range) {
var i, length, deleteComments = [],
oComment,
r1 = range.r1,
c1 = range.c1,
mergeComment = null;
for (i = 0, length = this.aComments.length; i < length; ++i) {
oComment = this.aComments[i];
if (range.contains(oComment.nCol, oComment.nRow)) {
if (null === mergeComment) {
mergeComment = oComment;
} else {
if (oComment.nRow <= mergeComment.nRow && oComment.nCol < mergeComment.nCol) {
deleteComments.push(mergeComment);
mergeComment = oComment;
} else {
deleteComments.push(oComment);
}
}
}
}
if (mergeComment && (mergeComment.nCol !== c1 || mergeComment.nRow !== r1)) {
this._removeComment(mergeComment, false, false);
mergeComment.nCol = c1;
mergeComment.nRow = r1;
var cellAddress = new CellAddress(mergeComment.nRow, mergeComment.nCol, 0);
mergeComment.sQuoteText = cellAddress.getID() + " : " + this.worksheet.model.getCell(cellAddress).getValueWithFormat();
this._addComment(mergeComment, false, true);
}
for (i = 0, length = deleteComments.length; i < length; ++i) {
this._removeComment(deleteComments[i], false, false);
}
};
CCellCommentator.prototype.Undo = function (type, data) {
var i, parentComment;
switch (type) {
case historyitem_Comment_Add:
if (data.oParent) {
parentComment = this.asc_findComment(data.oParent.asc_getId());
for (i = 0; i < parentComment.aReplies.length; i++) {
if (parentComment.aReplies[i].asc_getId() == data.asc_getId()) {
parentComment.aReplies.splice(i, 1);
break;
}
}
} else {
for (i = 0; i < this.aComments.length; i++) {
if (this.aComments[i].asc_getId() == data.asc_getId()) {
this.aComments.splice(i, 1);
this.worksheet.model.workbook.handlers.trigger("asc_onRemoveComment", data.asc_getId());
break;
}
}
}
break;
case historyitem_Comment_Remove:
if (data.oParent) {
parentComment = this.asc_findComment(data.oParent.asc_getId());
parentComment.aReplies.push(data);
} else {
this.aComments.push(data);
this.worksheet.model.workbook.handlers.trigger("asc_onAddComment", data.asc_getId(), data);
}
break;
case historyitem_Comment_Change:
if (data.commentAfter.oParent) {
parentComment = this.asc_findComment(data.commentAfter.oParent.asc_getId());
for (i = 0; i < parentComment.aReplies.length; i++) {
if (parentComment.aReplies[i].asc_getId() == data.asc_getId()) {
parentComment.aReplies.splice(i, 1);
parentComment.aReplies.push(data.commentBefore);
break;
}
}
} else {
for (i = 0; i < this.aComments.length; i++) {
if (this.aComments[i].asc_getId() == data.commentAfter.asc_getId()) {
this.aComments.splice(i, 1);
this.aComments.push(data.commentBefore);
this.worksheet.model.workbook.handlers.trigger("asc_onChangeCommentData", data.commentBefore.asc_getId(), data.commentBefore);
break;
}
}
}
break;
}
};
CCellCommentator.prototype.Redo = function (type, data) {
var parentComment, i;
switch (type) {
case historyitem_Comment_Add:
if (data.oParent) {
parentComment = this.asc_findComment(data.oParent.asc_getId());
parentComment.aReplies.push(data);
} else {
this.aComments.push(data);
this.worksheet.model.workbook.handlers.trigger("asc_onAddComment", data.asc_getId(), data);
}
break;
case historyitem_Comment_Remove:
if (data.oParent) {
parentComment = this.asc_findComment(data.oParent.asc_getId());
for (i = 0; i < parentComment.aReplies.length; i++) {
if (parentComment.aReplies[i].asc_getId() == data.asc_getId()) {
parentComment.aReplies.splice(i, 1);
break;
}
}
} else {
for (i = 0; i < this.aComments.length; i++) {
if (this.aComments[i].asc_getId() == data.asc_getId()) {
this.aComments.splice(i, 1);
this.worksheet.model.workbook.handlers.trigger("asc_onRemoveComment", data.asc_getId());
break;
}
}
}
break;
case historyitem_Comment_Change:
if (data.commentBefore.oParent) {
parentComment = this.asc_findComment(data.commentBefore.oParent.asc_getId());
for (i = 0; i < parentComment.aReplies.length; i++) {
if (parentComment.aReplies[i].asc_getId() == data.asc_getId()) {
parentComment.aReplies.splice(i, 1);
parentComment.aReplies.push(data.commentAfter);
break;
}
}
} else {
for (i = 0; i < this.aComments.length; i++) {
if (this.aComments[i].asc_getId() == data.commentBefore.asc_getId()) {
this.aComments.splice(i, 1);
this.aComments.push(data.commentAfter);
this.worksheet.model.workbook.handlers.trigger("asc_onChangeCommentData", data.commentAfter.asc_getId(), data.commentAfter);
break;
}
}
}
break;
}
};