Files
DocumentServer-v-9.2.0/sdkjs/slide/Editor/Format/Comments.js
T
Yajbir Singh f1b860b25c
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

1196 lines
35 KiB
JavaScript

/*
* (c) Copyright Ascensio System SIA 2010-2024
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(/**
* @param {Window} window
* @param {undefined} undefined
*/
function (window, undefined) {
// Import
var g_oTableId = AscCommon.g_oTableId;
var History = AscCommon.History;
AscDFH.changesFactory[AscDFH.historyitem_Comment_Position] = AscDFH.CChangesDrawingsObjectNoId;
AscDFH.changesFactory[AscDFH.historyitem_Comment_Change] = AscDFH.CChangesDrawingsObjectNoId;
AscDFH.changesFactory[AscDFH.historyitem_Comment_TypeInfo] = AscDFH.CChangesDrawingsLong;
AscDFH.drawingsConstructorsMap[AscDFH.historyitem_Comment_Position] = AscFormat.CDrawingBaseCoordsWritable;
AscDFH.drawingsConstructorsMap[AscDFH.historyitem_Comment_Change] = CCommentData;
AscDFH.drawingsChangesMap[AscDFH.historyitem_Comment_Position] = function (oClass, value) {
oClass.x = value.a;
oClass.y = value.b;
};
AscDFH.drawingsChangesMap[AscDFH.historyitem_Comment_Change] = function (oClass, value) {
oClass.Data = value;
if (value) {
editor.sync_ChangeCommentData(oClass.Id, value);
}
};
AscDFH.drawingsChangesMap[AscDFH.historyitem_Comment_TypeInfo] = function (oClass, value) {
oClass.m_oTypeInfo = value;
};
function ParaComment(Start, Id) {
this.Id = AscCommon.g_oIdCounter.Get_NewId();
this.Paragraph = null;
this.Start = Start;
this.CommentId = Id;
this.Type = para_Comment;
this.StartLine = 0;
this.StartRange = 0;
this.Lines = [];
this.LinesLength = 0;
}
ParaComment.prototype.Get_Id = function () {
return this.Id;
};
ParaComment.prototype.SetCommentId = function (NewCommentId) {
};
ParaComment.prototype.Is_Empty = function () {
return true;
};
ParaComment.prototype.Is_CheckingNearestPos = function () {
return false;
};
ParaComment.prototype.Get_CompiledTextPr = function () {
return null;
};
ParaComment.prototype.Clear_TextPr = function () {
};
ParaComment.prototype.Remove = function () {
return false;
};
ParaComment.prototype.Get_DrawingObjectRun = function (Id) {
return null;
};
ParaComment.prototype.GetRunByElement = function (oRunElement) {
return null;
};
ParaComment.prototype.Get_DrawingObjectContentPos = function (Id, ContentPos, Depth) {
return false;
};
ParaComment.prototype.Get_Layout = function (DrawingLayout, UseContentPos, ContentPos, Depth) {
};
ParaComment.prototype.GetNextRunElements = function (RunElements, UseContentPos, Depth) {
};
ParaComment.prototype.GetPrevRunElements = function (RunElements, UseContentPos, Depth) {
};
ParaComment.prototype.CollectDocumentStatistics = function (ParaStats) {
};
ParaComment.prototype.Create_FontMap = function (Map) {
};
ParaComment.prototype.Get_AllFontNames = function (AllFonts) {
};
ParaComment.prototype.GetSelectedText = function (bAll, bClearText) {
return "";
};
ParaComment.prototype.GetSelectDirection = function () {
return 1;
};
ParaComment.prototype.Clear_TextFormatting = function (DefHyper) {
};
ParaComment.prototype.CanAddDropCap = function () {
return null;
};
ParaComment.prototype.CheckSelectionForDropCap = function (isUsePos, oEndPos, nDepth) {
return true;
};
ParaComment.prototype.Get_TextForDropCap = function (DropCapText, UseContentPos, ContentPos, Depth) {
};
ParaComment.prototype.Get_StartTabsCount = function (TabsCounter) {
return true;
};
ParaComment.prototype.Remove_StartTabs = function (TabsCounter) {
return true;
};
ParaComment.prototype.Copy = function (Selected) {
return new ParaComment(this.Start, this.CommentId);
};
ParaComment.prototype.CopyContent = function (Selected) {
return [];
};
ParaComment.prototype.Split = function () {
return new ParaRun();
};
ParaComment.prototype.Apply_TextPr = function () {
};
ParaComment.prototype.CheckRevisionsChanges = function (Checker, ContentPos, Depth) {
};
ParaComment.prototype.Get_ParaPosByContentPos = function (ContentPos, Depth) {
return new CParaPos(this.StartRange, this.StartLine, 0, 0);
};
//-----------------------------------------------------------------------------------
// Функции пересчета
//-----------------------------------------------------------------------------------
ParaComment.prototype.Recalculate_Reset = function (StartRange, StartLine) {
this.StartLine = StartLine;
this.StartRange = StartRange;
};
ParaComment.prototype.Recalculate_Range = function (PRS, ParaPr) {
};
ParaComment.prototype.Recalculate_Set_RangeEndPos = function (PRS, PRP, Depth) {
};
ParaComment.prototype.Recalculate_LineMetrics = function (PRS, ParaPr, _CurLine, _CurRange) {
};
ParaComment.prototype.Recalculate_Range_Width = function (PRSC, _CurLine, _CurRange) {
};
ParaComment.prototype.Recalculate_Range_Spaces = function (PRSA, CurLine, CurRange, CurPage) {
};
ParaComment.prototype.Recalculate_PageEndInfo = function (PRSI, _CurLine, _CurRange) {
};
ParaComment.prototype.RecalculateEndInfo = function (PRSI) {
};
ParaComment.prototype.SaveRecalculateObject = function (Copy) {
};
ParaComment.prototype.LoadRecalculateObject = function (RecalcObj, Parent) {
};
ParaComment.prototype.PrepareRecalculateObject = function () {
};
ParaComment.prototype.IsEmptyRange = function (_CurLine, _CurRange) {
return true;
};
ParaComment.prototype.Check_Range_OnlyMath = function (Checker, CurRange, CurLine) {
};
ParaComment.prototype.Check_MathPara = function (Checker) {
};
ParaComment.prototype.Check_PageBreak = function () {
return false;
};
ParaComment.prototype.CheckSplitPageOnPageBreak = function (oPBChecker) {
return false;
};
ParaComment.prototype.RecalculateMinMaxContentWidth = function () {
};
ParaComment.prototype.Get_Range_VisibleWidth = function (RangeW, _CurLine, _CurRange) {
};
ParaComment.prototype.Shift_Range = function (Dx, Dy, _CurLine, _CurRange, _CurPage) {
};
//-----------------------------------------------------------------------------------
// Функции отрисовки
//-----------------------------------------------------------------------------------
ParaComment.prototype.Draw_HighLights = function (PDSH) {
};
ParaComment.prototype.Draw_Elements = function (PDSE) {
};
ParaComment.prototype.Draw_Lines = function (PDSL) {
};
//-----------------------------------------------------------------------------------
// Функции для работы с курсором
//-----------------------------------------------------------------------------------
ParaComment.prototype.IsCursorPlaceable = function () {
return false;
};
ParaComment.prototype.Cursor_Is_Start = function () {
return true;
};
ParaComment.prototype.Cursor_Is_NeededCorrectPos = function () {
return true;
};
ParaComment.prototype.Cursor_Is_End = function () {
return true;
};
ParaComment.prototype.MoveCursorToStartPos = function () {
};
ParaComment.prototype.MoveCursorToEndPos = function (SelectFromEnd) {
};
ParaComment.prototype.getParagraphContentPosByXY = function (state) {
return false;
};
ParaComment.prototype.Get_ParaContentPos = function (bSelection, bStart, ContentPos, bUseCorrection) {
};
ParaComment.prototype.Set_ParaContentPos = function (ContentPos, Depth) {
};
ParaComment.prototype.Get_PosByElement = function (Class, ContentPos, Depth, UseRange, Range, Line) {
if (this === Class) return true;
return false;
};
ParaComment.prototype.Get_ElementByPos = function (ContentPos, Depth) {
return this;
};
ParaComment.prototype.Get_ClassesByPos = function (Classes, ContentPos, Depth) {
Classes.push(this);
};
ParaComment.prototype.GetPosByDrawing = function (Id, ContentPos, Depth) {
return false;
};
ParaComment.prototype.Get_RunElementByPos = function (ContentPos, Depth) {
return null;
};
ParaComment.prototype.Get_LastRunInRange = function (_CurLine, _CurRange) {
return null;
};
ParaComment.prototype.Get_LeftPos = function (SearchPos, ContentPos, Depth, UseContentPos) {
};
ParaComment.prototype.Get_RightPos = function (SearchPos, ContentPos, Depth, UseContentPos, StepEnd) {
};
ParaComment.prototype.Get_WordStartPos = function (SearchPos, ContentPos, Depth, UseContentPos) {
};
ParaComment.prototype.Get_WordEndPos = function (SearchPos, ContentPos, Depth, UseContentPos, StepEnd) {
};
ParaComment.prototype.Get_EndRangePos = function (_CurLine, _CurRange, SearchPos, Depth) {
return false;
};
ParaComment.prototype.Get_StartRangePos = function (_CurLine, _CurRange, SearchPos, Depth) {
return false;
};
ParaComment.prototype.Get_StartRangePos2 = function (_CurLine, _CurRange, ContentPos, Depth) {
};
ParaComment.prototype.Get_EndRangePos2 = function (_CurLine, _CurRange, ContentPos, Depth) {
};
ParaComment.prototype.Get_StartPos = function (ContentPos, Depth) {
};
ParaComment.prototype.Get_EndPos = function (BehindEnd, ContentPos, Depth) {
};
//-----------------------------------------------------------------------------------
// Функции для работы с селектом
//-----------------------------------------------------------------------------------
ParaComment.prototype.Set_SelectionContentPos = function (StartContentPos, EndContentPos, Depth, StartFlag, EndFlag) {
};
ParaComment.prototype.RemoveSelection = function () {
};
ParaComment.prototype.SelectAll = function (Direction) {
};
ParaComment.prototype.drawSelectionInRange = function (line, range, drawState) {
};
ParaComment.prototype.IsSelectionEmpty = function (CheckEnd) {
return true;
};
ParaComment.prototype.Selection_CheckParaEnd = function () {
return false;
};
ParaComment.prototype.IsSelectedAll = function (Props) {
return true;
};
ParaComment.prototype.SkipAnchorsAtSelectionStart = function (nDirection) {
return true;
};
ParaComment.prototype.Selection_CheckParaContentPos = function (ContentPos) {
return true;
};
ParaComment.prototype.Refresh_RecalcData = function () {
};
ParaComment.prototype.Write_ToBinary2 = function (Writer) {
};
ParaComment.prototype.Read_FromBinary2 = function (Reader) {
};
ParaComment.prototype.SetParagraph = function (Paragraph) {
this.Paragraph = Paragraph;
};
ParaComment.prototype.GetCurrentParaPos = function () {
return new CParaPos(this.StartRange, this.StartLine, 0, 0);
};
ParaComment.prototype.Get_TextPr = function (ContentPos, Depth) {
return new CTextPr();
};
//----------------------------------------------------------------------------------------------------------------------
// Разное
//----------------------------------------------------------------------------------------------------------------------
ParaComment.prototype.SetReviewType = function (ReviewType, RemovePrChange) {
};
ParaComment.prototype.SetReviewTypeWithInfo = function (ReviewType, ReviewInfo) {
};
ParaComment.prototype.CheckRevisionsChanges = function (Checker, ContentPos, Depth) {
};
ParaComment.prototype.AcceptRevisionChanges = function (Type, bAll) {
};
ParaComment.prototype.RejectRevisionChanges = function (Type, bAll) {
};
function CWriteCommentData() {
this.Data = null; // CCommentData
this.WriteAuthorId = 0;
this.WriteCommentId = 0;
this.WriteParentAuthorId = 0;
this.WriteParentCommentId = 0;
this.WriteTime = "";
this.WriteText = "";
this.AdditionalData = "";
this.timeZoneBias = null;
this.x = 0;
this.y = 0;
}
CWriteCommentData.prototype.Calculate = function () {
this.WriteTime = new Date(this.Data.m_sTime - 0).toISOString().slice(0, 19) + 'Z';
this.timeZoneBias = this.Data.m_nTimeZoneBias;
this.CalculateAdditionalData();
};
CWriteCommentData.prototype.Calculate2 = function () {
var dateMs = AscCommon.getTimeISO8601(this.WriteTime);
if (!isNaN(dateMs)) {
this.WriteTime = dateMs + "";
}
else {
this.WriteTime = "1";
}
};
CWriteCommentData.prototype.CalculateAdditionalData = function () {
if (!this.Data) {
this.AdditionalData = "";
}
else {
let sUserId = this.Data.m_sUserId;
let sUserName = this.Data.m_sUserName;
if (typeof sUserId === "string" && sUserId.length > 0 && typeof sUserName === "string" && sUserName.length > 0) {
this.AdditionalData = "teamlab_data:";
this.AdditionalData += ("0;" + sUserId.length + ";" + sUserId + ";");
this.AdditionalData += ("1;" + sUserName.length + ";" + sUserName + ";");
this.AdditionalData += ("2;1;" + (this.Data.m_bSolved ? "1;" : "0;"));
if (this.Data.m_sOOTime) {
var WriteOOTime = new Date(this.Data.m_sOOTime - 0).toISOString().slice(0, 19) + 'Z';
this.AdditionalData += ("3;" + WriteOOTime.length + ";" + WriteOOTime + ";");
}
if (this.Data.m_sGuid) {
this.AdditionalData += "4;" + this.Data.m_sGuid.length + ";" + this.Data.m_sGuid + ";";
}
if (this.Data.m_sUserData) {
this.AdditionalData += "5;" + this.Data.m_sUserData.length + ";" + this.Data.m_sUserData + ";";
}
}
else {
this.AdditionalData = "";
}
}
};
CWriteCommentData.prototype.ReadNextInteger = function (_parsed) {
var _len = _parsed.data.length;
var _found = -1;
var _Found = ";".charCodeAt(0);
for (var i = _parsed.pos; i < _len; i++) {
if (_Found == _parsed.data.charCodeAt(i)) {
_found = i;
break;
}
}
if (-1 == _found) return -1;
var _ret = parseInt(_parsed.data.substr(_parsed.pos, _found - _parsed.pos));
if (isNaN(_ret)) return -1;
_parsed.pos = _found + 1;
return _ret;
};
CWriteCommentData.prototype.ParceAdditionalData = function (_comment_data) {
if (this.AdditionalData.indexOf("teamlab_data:") != 0) return;
var _parsed = {data: this.AdditionalData, pos: "teamlab_data:".length};
while (true) {
var _attr = this.ReadNextInteger(_parsed);
if (-1 == _attr) break;
var _len = this.ReadNextInteger(_parsed);
if (-1 == _len) break;
var _value = _parsed.data.substr(_parsed.pos, _len);
_parsed.pos += (_len + 1);
if (0 == _attr) _comment_data.m_sUserId = _value; else if (1 == _attr) _comment_data.m_sUserName = _value; else if (2 == _attr) _comment_data.m_bSolved = ("1" == _value) ? true : false; else if (3 == _attr) {
var dateMs = AscCommon.getTimeISO8601(_value);
if (!isNaN(dateMs)) _comment_data.m_sOOTime = dateMs + "";
}
else if (4 == _attr) _comment_data.m_sGuid = _value; else if (5 == _attr) _comment_data.m_sUserData = _value;
}
};
function CCommentAuthor() {
AscFormat.CBaseNoIdObject.call(this);
this.Name = "";
this.Id = 0;
this.LastId = 0;
this.Initials = "";
}
AscFormat.InitClass(CCommentAuthor, AscFormat.CBaseNoIdObject, 0);
CCommentAuthor.prototype.Calculate = function () {
var arr = this.Name.split(" ");
this.Initials = "";
for (var i = 0; i < arr.length; i++) {
if (arr[i].length > 0) this.Initials += (arr[i].substring(0, 1));
}
};
function CCommentData() {
this.m_sText = "";
this.m_sTime = "";
this.m_sOOTime = "";
this.m_sUserId = "";
this.m_sUserName = "";
this.m_sGuid = "";
this.m_sQuoteText = null;
this.m_bSolved = false;
this.m_nTimeZoneBias = null;
this.m_aReplies = [];
}
CCommentData.prototype.createDuplicate = function (bNewGuid) {
var ret = new CCommentData();
ret.m_sText = this.m_sText;
ret.m_sTime = this.m_sTime;
ret.m_sOOTime = this.m_sOOTime;
ret.m_sUserId = this.m_sUserId;
ret.m_sUserName = this.m_sUserName;
ret.m_sGuid = bNewGuid ? AscCommon.CreateGUID() : this.m_sGuid;
ret.m_sQuoteText = this.m_sQuoteText;
ret.m_bSolved = this.m_bSolved;
ret.m_nTimeZoneBias = this.m_nTimeZoneBias;
for (var i = 0; i < this.m_aReplies.length; ++i) {
ret.m_aReplies.push(this.m_aReplies[i].createDuplicate(bNewGuid));
}
return ret;
};
CCommentData.prototype.Add_Reply = function (CommentData) {
this.m_aReplies.push(CommentData);
};
CCommentData.prototype.Set_Text = function (Text) {
this.SetText(Text);
};
CCommentData.prototype.SetText = function (Text) {
this.m_sText = Text;
};
CCommentData.prototype.Get_Text = function () {
return this.m_sText;
};
CCommentData.prototype.Get_QuoteText = function () {
return this.GetQuoteText();
};
CCommentData.prototype.GetQuoteText = function () {
return this.m_sQuoteText;
};
CCommentData.prototype.Set_QuoteText = function (Quote) {
this.SetQuoteText(Quote);
};
CCommentData.prototype.SetQuoteText = function (Quote) {
this.m_sQuoteText = Quote;
};
CCommentData.prototype.Get_Solved = function () {
return this.GetSolved();
};
CCommentData.prototype.IsSolved = CCommentData.prototype.Get_Solved;
CCommentData.prototype.Set_Solved = function (Solved) {
this.SetSolved(Solved);
};
CCommentData.prototype.GetSolved = function () {
return this.m_bSolved;
};
CCommentData.prototype.SetSolved = function (isSolved) {
this.m_bSolved = isSolved;
};
CCommentData.prototype.Set_Name = function (Name) {
this.SetUserName(Name);
};
CCommentData.prototype.Get_Name = function () {
return this.GetUserName();
};
CCommentData.prototype.SetUserName = function (Name) {
this.m_sUserName = Name;
};
CCommentData.prototype.GetUserName = function () {
return this.m_sUserName;
};
CCommentData.prototype.Set_Guid = function (Guid) {
this.m_sGuid = Guid;
};
CCommentData.prototype.Get_Guid = function () {
return this.m_sGuid;
};
CCommentData.prototype.Set_TimeZoneBias = function (timeZoneBias) {
this.m_nTimeZoneBias = timeZoneBias;
};
CCommentData.prototype.Get_TimeZoneBias = function () {
return this.m_nTimeZoneBias;
};
CCommentData.prototype.Get_RepliesCount = function () {
return this.m_aReplies.length;
};
CCommentData.prototype.Get_Reply = function (Index) {
return this.GetReply(Index);
};
CCommentData.prototype.GetReply = function (Index) {
if (Index < 0 || Index >= this.m_aReplies.length) return null;
return this.m_aReplies[Index];
};
CCommentData.prototype.GetDateTime = function () {
var nTime = parseInt(this.m_sTime);
if (isNaN(nTime)) nTime = 0;
return nTime;
};
CCommentData.prototype.Read_FromAscCommentData = function (AscCommentData) {
this.m_sText = AscCommentData.asc_getText();
this.m_sTime = AscCommentData.asc_getTime();
this.m_sOOTime = AscCommentData.asc_getOnlyOfficeTime();
this.m_sUserId = AscCommentData.asc_getUserId();
this.m_sQuoteText = AscCommentData.asc_getQuoteText();
this.m_bSolved = AscCommentData.asc_getSolved();
this.m_sUserName = AscCommentData.asc_getUserName();
this.m_sGuid = AscCommentData.asc_getGuid();
this.m_nTimeZoneBias = AscCommentData.asc_getTimeZoneBias();
var RepliesCount = AscCommentData.asc_getRepliesCount();
for (var Index = 0; Index < RepliesCount; Index++) {
var Reply = new CCommentData();
Reply.Read_FromAscCommentData(AscCommentData.asc_getReply(Index));
this.m_aReplies.push(Reply);
}
};
CCommentData.prototype.ConvertToSimpleObject = function()
{
var obj = {};
obj["Text"] = this.m_sText;
obj["Time"] = this.m_sTime;
obj["UserName"] = this.m_sUserName;
obj["QuoteText"] = this.m_sQuoteText;
obj["Solved"] = this.m_bSolved;
obj["UserData"] = this.m_sUserData;
obj["Replies"] = [];
for (var nIndex = 0, nCount = this.m_aReplies.length; nIndex < nCount; ++nIndex)
{
obj["Replies"].push(this.m_aReplies[nIndex].ConvertToSimpleObject());
}
return obj;
};
CCommentData.prototype.ReadFromSimpleObject = function (oData) {
if (!oData) return;
if (oData["Text"]) this.m_sText = oData["Text"];
if (oData["Time"]) this.m_sTime = oData["Time"];
if (oData["UserName"]) this.m_sUserName = oData["UserName"];
if (oData["UserId"]) this.m_sUserId = oData["UserId"];
if (oData["Solved"]) this.m_bSolved = oData["Solved"];
if (oData["UserData"]) this.m_sUserData = oData["UserData"];
if (oData["Replies"] && oData["Replies"].length) {
for (var nIndex = 0, nCount = oData["Replies"].length; nIndex < nCount; ++nIndex) {
var oCD = new CCommentData();
oCD.ReadFromSimpleObject(oData["Replies"][nIndex]);
this.m_aReplies.push(oCD);
}
}
};
CCommentData.prototype.Write_ToBinary2 = function (Writer) {
// String : m_sText
// String : m_sTime
// String : m_sOOTime
// String : m_sUserId
// String : m_sUserName
// String : m_sGuid
// Bool : Null ли TimeZoneBias
// Long : TimeZoneBias
// Bool : Null ли QuoteText
// String : (Если предыдущий параметр false) QuoteText
// Bool : Solved
// Long : Количество отетов
// Array of Variable : Ответы
var Count = this.m_aReplies.length;
Writer.WriteString2(this.m_sText);
Writer.WriteString2(this.m_sTime);
Writer.WriteString2(this.m_sOOTime);
Writer.WriteString2(this.m_sUserId);
Writer.WriteString2(this.m_sUserName);
Writer.WriteString2(this.m_sGuid);
if (null === this.m_nTimeZoneBias) Writer.WriteBool(true); else {
Writer.WriteBool(false);
Writer.WriteLong(this.m_nTimeZoneBias);
}
if (null === this.m_sQuoteText) Writer.WriteBool(true); else {
Writer.WriteBool(false);
Writer.WriteString2(this.m_sQuoteText);
}
Writer.WriteBool(this.m_bSolved);
Writer.WriteLong(Count);
for (var Index = 0; Index < Count; Index++) {
this.m_aReplies[Index].Write_ToBinary2(Writer);
}
};
CCommentData.prototype.Read_FromBinary2 = function (Reader) {
// String : m_sText
// String : m_sTime
// String : m_sOOTime
// String : m_sUserId
// String : m_sGuid
// Bool : Null ли TimeZoneBias
// Long : TimeZoneBias
// Bool : Null ли QuoteText
// String : (Если предыдущий параметр false) QuoteText
// Bool : Solved
// Long : Количество отетов
// Array of Variable : Ответы
this.m_sText = Reader.GetString2();
this.m_sTime = Reader.GetString2();
this.m_sOOTime = Reader.GetString2();
this.m_sUserId = Reader.GetString2();
this.m_sUserName = Reader.GetString2();
this.m_sGuid = Reader.GetString2();
if (true != Reader.GetBool()) this.m_nTimeZoneBias = Reader.GetLong(); else this.m_nTimeZoneBias = null;
var bNullQuote = Reader.GetBool();
if (true != bNullQuote) this.m_sQuoteText = Reader.GetString2(); else this.m_sQuoteText = null;
this.m_bSolved = Reader.GetBool();
var Count = Reader.GetLong();
this.m_aReplies.length = 0;
for (var Index = 0; Index < Count; Index++) {
var oReply = new CCommentData();
oReply.Read_FromBinary2(Reader);
this.m_aReplies.push(oReply);
}
};
CCommentData.prototype.Write_ToBinary = function (Writer) {
this.Write_ToBinary2(Writer);
};
CCommentData.prototype.Read_FromBinary = function (Reader) {
this.Read_FromBinary2(Reader);
};
CCommentData.prototype.HasUserData = function (sUserId) {
if (this.m_sUserId === sUserId) {
return true;
}
return this.HasUserReplies(sUserId);
};
CCommentData.prototype.HasUserReplies = function (sUserId) {
for (var nReply = 0; nReply < this.m_aReplies.length; ++nReply) {
if (this.m_aReplies[nReply].HasUserData(sUserId)) {
return true;
}
}
return false;
};
CCommentData.prototype.IsUserComment = function (sUserId) {
if (this.m_sUserId === sUserId) {
return true;
}
return false;
};
CCommentData.prototype.RemoveUserReplies = function (sUserId) {
for (var nReply = this.m_aReplies.length - 1; nReply > -1; --nReply) {
if (this.m_aReplies[nReply].m_sUserId === sUserId) {
this.m_aReplies.splice(nReply, 1);
}
}
};
var comment_type_Common = 1; // Комментарий к обычному тексу
var comment_type_HdrFtr = 2; // Комментарий к колонтитулу
function CComment(Parent, Data) {
this.Id = AscCommon.g_oIdCounter.Get_NewId();
this.Parent = Parent;
this.Data = Data;
this.x = null;
this.y = null;
this.selected = false;
this.m_oTypeInfo = {
Type: comment_type_Common, Data: null
};
this.m_oStartInfo = {
X: 0, Y: 0, H: 0, PageNum: 0, ParaId: null
};
this.m_oEndInfo = {
X: 0, Y: 0, H: 0, PageNum: 0, ParaId: null
};
this.Lock = new AscCommon.CLock(); // Зажат ли комментарий другим пользователем
if (false === AscCommon.g_oIdCounter.m_bLoad) {
this.Lock.Set_Type(AscCommon.c_oAscLockTypes.kLockTypeMine, false);
AscCommon.CollaborativeEditing.Add_Unlock2(this);
}
// Добавляем данный класс в таблицу Id (обязательно в конце конструктора)
g_oTableId.Add(this, this.Id);
}
CComment.prototype.getObjectType = function () {
return AscDFH.historyitem_type_Comment;
};
CComment.prototype.GetId = function () {
return this.Get_Id();
};
CComment.prototype.createDuplicate = function (Parent, bNewGuid) {
var oData = this.Data ? this.Data.createDuplicate(bNewGuid) : null;
var ret = new CComment(Parent, oData);
ret.setPosition(this.x, this.y);
return ret;
};
CComment.prototype.removeUserReplies = function (sUserId) {
if (this.Data) {
var oDataCopy = this.Data.createDuplicate();
oDataCopy.RemoveUserReplies(sUserId);
if (this.Data.Get_RepliesCount() !== oDataCopy.Get_RepliesCount()) {
this.Set_Data(oDataCopy);
editor.sync_ChangeCommentData(this.Get_Id(), this.Data);
}
}
};
CComment.prototype.hasUserReplies = function (sUserId) {
if (!this.Data) {
return false;
}
return this.Data.HasUserReplies(sUserId);
};
CComment.prototype.isMineComment = function () {
var oDocInfo = editor && editor.DocInfo;
if (oDocInfo) {
return this.isUserComment(oDocInfo.get_UserId());
}
return false;
};
CComment.prototype.IsSolved = function () {
return this.Data.Get_Solved();
};
CComment.prototype.isUserComment = function (sUserId) {
if (!this.Data) {
return false;
}
return this.Data.IsUserComment(sUserId);
};
CComment.prototype.hasUserData = function (sUserId) {
if (!this.Data) {
return false;
}
return this.Data.HasUserData(sUserId);
};
CComment.prototype.canBeDeleted = function () {
var sUserName = this.GetUserName();
if (AscCommon.UserInfoParser.canViewComment(sUserName) && AscCommon.UserInfoParser.canDeleteComment(sUserName)) {
return true;
}
return false;
};
CComment.prototype.hit = function (x, y) {
if (AscCommon.UserInfoParser.canViewComment(this.GetUserName()) === false) {
return false;
}
var Flags = 0;
if (this.selected) {
Flags |= 1;
}
if (this.Data.m_aReplies.length > 0) {
Flags |= 2;
}
var dd = editor.WordControl.m_oDrawingDocument;
return x > this.x && x < this.x + dd.GetCommentWidth(Flags) && y > this.y && y < this.y + dd.GetCommentHeight(Flags);
};
CComment.prototype.setPosition = function (x, y) {
History.Add(new AscDFH.CChangesDrawingsObjectNoId(this, AscDFH.historyitem_Comment_Position, new AscFormat.CDrawingBaseCoordsWritable(this.x, this.y), new AscFormat.CDrawingBaseCoordsWritable(x, y)));
this.x = x;
this.y = y;
};
CComment.prototype.getPosition = function () {
return { x: this.x, y: this.y };
};
CComment.prototype.draw = function (graphics) {
var Flags = 0;
if (this.selected) {
Flags |= 1;
}
if (this.Data.m_aReplies.length > 0) {
Flags |= 2;
}
var dd = editor.WordControl.m_oDrawingDocument;
var w = dd.GetCommentWidth();
var h = dd.GetCommentHeight();
graphics.DrawPresentationComment(Flags, this.x, this.y, w, h);
var oLock = this.Lock;
if (oLock && AscCommon.c_oAscLockTypes.kLockTypeNone !== oLock.Get_Type()) {
var bCoMarksDraw = true;
var oApi = editor || Asc['editor'];
if (oApi) {
bCoMarksDraw = (!AscCommon.CollaborativeEditing.Is_Fast() || AscCommon.c_oAscLockTypes.kLockTypeMine !== oLock.Get_Type());
}
if (bCoMarksDraw) {
graphics.DrawLockObjectRect(oLock.Get_Type(), this.x, this.y, w, h);
return true;
}
}
};
CComment.prototype.Set_StartInfo = function (PageNum, X, Y, H, ParaId) {
this.m_oStartInfo.X = X;
this.m_oStartInfo.Y = Y;
this.m_oStartInfo.H = H;
this.m_oStartInfo.ParaId = ParaId;
// Если у нас комментарий в колонтитуле, то номер страницы обновляется при нажатии на комментарий
if (comment_type_Common === this.m_oTypeInfo.Type) this.m_oStartInfo.PageNum = PageNum;
};
CComment.prototype.Set_EndInfo = function (PageNum, X, Y, H, ParaId) {
this.m_oEndInfo.X = X;
this.m_oEndInfo.Y = Y;
this.m_oEndInfo.H = H;
this.m_oEndInfo.ParaId = ParaId;
if (comment_type_Common === this.m_oTypeInfo.Type) this.m_oEndInfo.PageNum = PageNum;
};
CComment.prototype.Check_ByXY = function (PageNum, X, Y, Type) {
if (this.m_oTypeInfo.Type != Type) return false;
if (comment_type_Common === Type) {
if (PageNum < this.m_oStartInfo.PageNum || PageNum > this.m_oEndInfo.PageNum) return false;
if (PageNum === this.m_oStartInfo.PageNum && (Y < this.m_oStartInfo.Y || (Y < (this.m_oStartInfo.Y + this.m_oStartInfo.H) && X < this.m_oStartInfo.X))) return false;
if (PageNum === this.m_oEndInfo.PageNum && (Y > this.m_oEndInfo.Y + this.m_oEndInfo.H || (Y > this.m_oEndInfo.Y && X > this.m_oEndInfo.X))) return false;
}
else if (comment_type_HdrFtr === Type) {
var HdrFtr = this.m_oTypeInfo.Data;
if (null === HdrFtr || false === HdrFtr.Check_Page(PageNum)) return false;
if (Y < this.m_oStartInfo.Y || (Y < (this.m_oStartInfo.Y + this.m_oStartInfo.H) && X < this.m_oStartInfo.X)) return false;
if (Y > this.m_oEndInfo.Y + this.m_oEndInfo.H || (Y > this.m_oEndInfo.Y && X > this.m_oEndInfo.X)) return false;
this.m_oStartInfo.PageNum = PageNum;
this.m_oEndInfo.PageNum = PageNum;
}
return true;
};
CComment.prototype.Set_Data = function (Data) {
History.Add(new AscDFH.CChangesDrawingsObjectNoId(this, AscDFH.historyitem_Comment_Change, this.Data, Data));
this.Data = Data;
};
CComment.prototype.Get_Data = function () {
return this.GetData();
};
CComment.prototype.GetData = function () {
return this.Data;
};
CComment.prototype.RemoveMarks = function () {
var Para_start = g_oTableId.Get_ById(this.m_oStartInfo.ParaId);
var Para_end = g_oTableId.Get_ById(this.m_oEndInfo.ParaId);
if (Para_start === Para_end) {
if (null != Para_start) Para_start.RemoveCommentMarks(this.Id);
}
else {
if (null != Para_start) Para_start.RemoveCommentMarks(this.Id);
if (null != Para_end) Para_end.RemoveCommentMarks(this.Id);
}
};
CComment.prototype.Set_TypeInfo = function (Type, Data) {
var New = {
Type: Type, Data: Data
};
History.Add(new AscDFH.CChangesDrawingsLong(this, AscDFH.historyitem_Comment_TypeInfo, this.m_oTypeInfo, New));
this.m_oTypeInfo = New;
};
CComment.prototype.Get_TypeInfo = function () {
return this.m_oTypeInfo;
};
CComment.prototype.Refresh_RecalcData = function (Data) {
if (this.slideComments) {
this.slideComments.Refresh_RecalcData();
}
};
CComment.prototype.recalculate = function () {
};
//-----------------------------------------------------------------------------------
// Функции для работы с совместным редактированием
//-----------------------------------------------------------------------------------
CComment.prototype.Get_Id = function () {
return this.Id;
};
CComment.prototype.Write_ToBinary2 = function (Writer) {
Writer.WriteLong(AscDFH.historyitem_type_Comment);
// String : Id
// Variable : Data
// Long : m_oTypeInfo.Type
// : m_oTypeInfo.Data
// Если comment_type_HdrFtr
// String : Id колонтитула
Writer.WriteString2(this.Id);
AscFormat.writeObject(Writer, this.Parent);
this.Data.Write_ToBinary2(Writer);
Writer.WriteLong(this.m_oTypeInfo.Type);
if (comment_type_HdrFtr === this.m_oTypeInfo.Type) Writer.WriteString2(this.m_oTypeInfo.Data.Get_Id());
};
CComment.prototype.Read_FromBinary2 = function (Reader) {
// String : Id
// Variable : Data
// Long : m_oTypeInfo.Type
// : m_oTypeInfo.Data
// Если comment_type_HdrFtr
// String : Id колонтитула
this.Id = Reader.GetString2();
this.Parent = AscFormat.readObject(Reader);
this.Data = new CCommentData();
this.Data.Read_FromBinary2(Reader);
this.m_oTypeInfo.Type = Reader.GetLong();
if (comment_type_HdrFtr === this.m_oTypeInfo.Type) this.m_oTypeInfo.Data = g_oTableId.Get_ById(Reader.GetString2());
};
CComment.prototype.Check_MergeData = function () {
// Проверяем, не удалили ли мы параграф, к которому был сделан данный комментарий
// Делаем это в самом конце, а не сразу, чтобы заполнились данные о начальном и
// конечном параграфах.
var bUse = true;
if (null != this.m_oStartInfo.ParaId) {
var Para_start = g_oTableId.Get_ById(this.m_oStartInfo.ParaId);
if (true != Para_start.IsUseInDocument()) bUse = false;
}
if (true === bUse && null != this.m_oEndInfo.ParaId) {
var Para_end = g_oTableId.Get_ById(this.m_oEndInfo.ParaId);
if (true != Para_end.IsUseInDocument()) bUse = false;
}
if (false === bUse) editor.WordControl.m_oLogicDocument.RemoveComment(this.Id, true);
};
CComment.prototype.GetUserName = function () {
if (this.Data) {
return this.Data.Get_Name();
}
return "";
};
//--------------------------------------------------------export----------------------------------------------------
window['AscCommon'] = window['AscCommon'] || {};
window['AscCommon'].comment_type_Common = comment_type_Common;
window['AscCommon'].comment_type_HdrFtr = comment_type_HdrFtr;
window['AscCommon'].CCommentData = CCommentData;
window['AscCommon'].CComment = CComment;
window['AscCommon'].ParaComment = ParaComment;
window['AscCommon'].CCommentAuthor = CCommentAuthor;
window['AscCommon'].CWriteCommentData = CWriteCommentData;
})(window);