1196 lines
35 KiB
JavaScript
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);
|