777 lines
26 KiB
JavaScript
777 lines
26 KiB
JavaScript
|
/*
|
|||
|
* (c) Copyright Ascensio System SIA 2010-2014
|
|||
|
*
|
|||
|
* 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
|
|||
|
*
|
|||
|
*/
|
|||
|
function CWriteCommentData() {
|
|||
|
this.Data = null;
|
|||
|
this.WriteAuthorId = 0;
|
|||
|
this.WriteCommentId = 0;
|
|||
|
this.WriteParentAuthorId = 0;
|
|||
|
this.WriteParentCommentId = 0;
|
|||
|
this.WriteTime = "";
|
|||
|
this.WriteText = "";
|
|||
|
this.AdditionalData = "";
|
|||
|
this.x = 0;
|
|||
|
this.y = 0;
|
|||
|
}
|
|||
|
CWriteCommentData.prototype = {
|
|||
|
DateToISO8601: function (d) {
|
|||
|
function pad(n) {
|
|||
|
return n < 10 ? "0" + n : n;
|
|||
|
}
|
|||
|
return d.getUTCFullYear() + "-" + pad(d.getUTCMonth() + 1) + "-" + pad(d.getUTCDate()) + "T" + pad(d.getUTCHours()) + ":" + pad(d.getUTCMinutes()) + ":" + pad(d.getUTCSeconds()) + "Z";
|
|||
|
},
|
|||
|
Iso8601ToDate: function (sDate) {
|
|||
|
var numericKeys = [1, 4, 5, 6, 7, 10, 11];
|
|||
|
var minutesOffset = 0;
|
|||
|
if ((struct = /^(\d{4}|[+\-]\d{6})(?:-(\d{2})(?:-(\d{2}))?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{3}))?)?(?:(Z)|([+\-])(\d{2})(?::(\d{2}))?)?)?$/.exec(sDate))) {
|
|||
|
for (var i = 0, k;
|
|||
|
(k = numericKeys[i]); ++i) {
|
|||
|
struct[k] = +struct[k] || 0;
|
|||
|
}
|
|||
|
struct[2] = (+struct[2] || 1) - 1;
|
|||
|
struct[3] = +struct[3] || 1;
|
|||
|
if (struct[8] !== "Z" && struct[9] !== undefined) {
|
|||
|
minutesOffset = struct[10] * 60 + struct[11];
|
|||
|
if (struct[9] === "+") {
|
|||
|
minutesOffset = 0 - minutesOffset;
|
|||
|
}
|
|||
|
}
|
|||
|
var _ret = new Date(Date.UTC(struct[1], struct[2], struct[3], struct[4], struct[5] + minutesOffset, struct[6], struct[7]));
|
|||
|
return "" + _ret.getTime();
|
|||
|
}
|
|||
|
return "1";
|
|||
|
},
|
|||
|
Calculate: function () {
|
|||
|
var d = new Date(this.Data.m_sTime - 0);
|
|||
|
this.WriteTime = this.DateToISO8601(d);
|
|||
|
this.CalculateAdditionalData();
|
|||
|
},
|
|||
|
Calculate2: function () {
|
|||
|
var _time = this.Iso8601ToDate(this.WriteTime);
|
|||
|
this.WriteTime = _time;
|
|||
|
},
|
|||
|
CalculateAdditionalData: function () {
|
|||
|
if (null == this.Data) {
|
|||
|
this.AdditionalData = "";
|
|||
|
} else {
|
|||
|
this.AdditionalData = "teamlab_data:";
|
|||
|
this.AdditionalData += ("0;" + this.Data.m_sUserId.length + ";" + this.Data.m_sUserId + ";");
|
|||
|
this.AdditionalData += ("1;" + this.Data.m_sUserName.length + ";" + this.Data.m_sUserName + ";");
|
|||
|
this.AdditionalData += ("2;1;" + (this.Data.m_bSolved ? "1;" : "0;"));
|
|||
|
}
|
|||
|
},
|
|||
|
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;
|
|||
|
},
|
|||
|
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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
function CCommentAuthor() {
|
|||
|
this.Name = "";
|
|||
|
this.Id = 0;
|
|||
|
this.LastId = 0;
|
|||
|
this.Initials = "";
|
|||
|
}
|
|||
|
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_sUserId = "";
|
|||
|
this.m_sUserName = "";
|
|||
|
this.m_sQuoteText = null;
|
|||
|
this.m_bSolved = false;
|
|||
|
this.m_aReplies = new Array();
|
|||
|
this.Add_Reply = function (CommentData) {
|
|||
|
this.m_aReplies.push(CommentData);
|
|||
|
};
|
|||
|
this.Set_Text = function (Text) {
|
|||
|
this.m_sText = Text;
|
|||
|
};
|
|||
|
this.Get_Text = function () {
|
|||
|
return this.m_sText;
|
|||
|
};
|
|||
|
this.Get_QuoteText = function () {
|
|||
|
return this.m_sQuoteText;
|
|||
|
};
|
|||
|
this.Set_QuoteText = function (Quote) {
|
|||
|
this.m_sQuoteText = Quote;
|
|||
|
};
|
|||
|
this.Get_Solved = function () {
|
|||
|
return this.m_bSolved;
|
|||
|
};
|
|||
|
this.Set_Solved = function (Solved) {
|
|||
|
this.m_bSolved = Solved;
|
|||
|
};
|
|||
|
this.Set_Name = function (Name) {
|
|||
|
this.m_sUserName = Name;
|
|||
|
};
|
|||
|
this.Get_Name = function () {
|
|||
|
return this.m_sUserName;
|
|||
|
};
|
|||
|
this.Get_RepliesCount = function () {
|
|||
|
return this.m_aReplies.length;
|
|||
|
};
|
|||
|
this.Get_Reply = function (Index) {
|
|||
|
if (Index < 0 || Index >= this.m_aReplies.length) {
|
|||
|
return null;
|
|||
|
}
|
|||
|
return this.m_aReplies[Index];
|
|||
|
};
|
|||
|
this.Read_FromAscCommentData = function (AscCommentData) {
|
|||
|
this.m_sText = AscCommentData.asc_getText();
|
|||
|
this.m_sTime = AscCommentData.asc_getTime();
|
|||
|
this.m_sUserId = AscCommentData.asc_getUserId();
|
|||
|
this.m_sQuoteText = AscCommentData.asc_getQuoteText();
|
|||
|
this.m_bSolved = AscCommentData.asc_getSolved();
|
|||
|
this.m_sUserName = AscCommentData.asc_getUserName();
|
|||
|
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);
|
|||
|
}
|
|||
|
};
|
|||
|
this.Write_ToBinary2 = function (Writer) {
|
|||
|
var Count = this.m_aReplies.length;
|
|||
|
Writer.WriteString2(this.m_sText);
|
|||
|
Writer.WriteString2(this.m_sTime);
|
|||
|
Writer.WriteString2(this.m_sUserId);
|
|||
|
Writer.WriteString2(this.m_sUserName);
|
|||
|
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);
|
|||
|
}
|
|||
|
};
|
|||
|
this.Read_FromBinary2 = function (Reader) {
|
|||
|
this.m_sText = Reader.GetString2();
|
|||
|
this.m_sTime = Reader.GetString2();
|
|||
|
this.m_sUserId = Reader.GetString2();
|
|||
|
this.m_sUserName = Reader.GetString2();
|
|||
|
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);
|
|||
|
}
|
|||
|
};
|
|||
|
}
|
|||
|
var comment_type_Common = 1;
|
|||
|
var comment_type_HdrFtr = 2;
|
|||
|
function CComment(Parent, Data) {
|
|||
|
this.Id = 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 CLock();
|
|||
|
if (false === g_oIdCounter.m_bLoad) {
|
|||
|
this.Lock.Set_Type(locktype_Mine, false);
|
|||
|
CollaborativeEditing.Add_Unlock2(this);
|
|||
|
}
|
|||
|
this.hit = function (x, y) {
|
|||
|
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);
|
|||
|
};
|
|||
|
this.setPosition = function (x, y) {
|
|||
|
History.Add(this, {
|
|||
|
Type: historyitem_Comment_Position,
|
|||
|
oldOffsetX: this.x,
|
|||
|
newOffsetX: x,
|
|||
|
oldOffsetY: this.y,
|
|||
|
newOffsetY: y
|
|||
|
});
|
|||
|
this.x = x;
|
|||
|
this.y = y;
|
|||
|
};
|
|||
|
this.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;
|
|||
|
graphics.DrawPresentationComment(Flags, this.x, this.y, dd.GetCommentWidth(), dd.GetCommentHeight());
|
|||
|
};
|
|||
|
this.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;
|
|||
|
}
|
|||
|
};
|
|||
|
this.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;
|
|||
|
}
|
|||
|
};
|
|||
|
this.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;
|
|||
|
};
|
|||
|
this.Set_Data = function (Data) {
|
|||
|
History.Add(this, {
|
|||
|
Type: historyitem_Comment_Change,
|
|||
|
New: Data,
|
|||
|
Old: this.Data
|
|||
|
});
|
|||
|
this.Data = Data;
|
|||
|
};
|
|||
|
this.Remove_Marks = 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.Remove_CommentMarks(this.Id);
|
|||
|
}
|
|||
|
} else {
|
|||
|
if (null != Para_start) {
|
|||
|
Para_start.Remove_CommentMarks(this.Id);
|
|||
|
}
|
|||
|
if (null != Para_end) {
|
|||
|
Para_end.Remove_CommentMarks(this.Id);
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
this.Set_TypeInfo = function (Type, Data) {
|
|||
|
var New = {
|
|||
|
Type: Type,
|
|||
|
Data: Data
|
|||
|
};
|
|||
|
History.Add(this, {
|
|||
|
Type: historyitem_Comment_TypeInfo,
|
|||
|
New: New,
|
|||
|
Old: this.m_oTypeInfo
|
|||
|
});
|
|||
|
this.m_oTypeInfo = New;
|
|||
|
if (comment_type_HdrFtr === Type) {
|
|||
|
var PageNum = Data.Content.Get_StartPage_Absolute();
|
|||
|
this.m_oStartInfo.PageNum = PageNum;
|
|||
|
this.m_oEndInfo.PageNum = PageNum;
|
|||
|
}
|
|||
|
};
|
|||
|
this.Get_TypeInfo = function () {
|
|||
|
return this.m_oTypeInfo;
|
|||
|
};
|
|||
|
this.Undo = function (Data) {
|
|||
|
var Type = Data.Type;
|
|||
|
switch (Type) {
|
|||
|
case historyitem_Comment_Change:
|
|||
|
this.Data = Data.Old;
|
|||
|
editor.sync_ChangeCommentData(this.Id, this.Data);
|
|||
|
break;
|
|||
|
case historyitem_Comment_TypeInfo:
|
|||
|
this.m_oTypeInfo = Data.Old;
|
|||
|
break;
|
|||
|
case historyitem_Comment_Position:
|
|||
|
this.x = Data.oldOffsetX;
|
|||
|
this.y = Data.oldOffsetY;
|
|||
|
break;
|
|||
|
}
|
|||
|
};
|
|||
|
this.Redo = function (Data) {
|
|||
|
var Type = Data.Type;
|
|||
|
switch (Type) {
|
|||
|
case historyitem_Comment_Change:
|
|||
|
this.Data = Data.New;
|
|||
|
editor.sync_ChangeCommentData(this.Id, this.Data);
|
|||
|
break;
|
|||
|
case historyitem_Comment_TypeInfo:
|
|||
|
this.m_oTypeInfo = Data.New;
|
|||
|
break;
|
|||
|
case historyitem_Comment_Position:
|
|||
|
this.x = Data.newOffsetX;
|
|||
|
this.y = Data.newOffsetY;
|
|||
|
break;
|
|||
|
}
|
|||
|
};
|
|||
|
this.Refresh_RecalcData = function (Data) {};
|
|||
|
this.Save_Changes = function (Data, Writer) {
|
|||
|
Writer.WriteLong(historyitem_type_Comment);
|
|||
|
var Type = Data.Type;
|
|||
|
Writer.WriteLong(Type);
|
|||
|
switch (Type) {
|
|||
|
case historyitem_Comment_Change:
|
|||
|
Data.New.Write_ToBinary2(Writer);
|
|||
|
break;
|
|||
|
case historyitem_Comment_TypeInfo:
|
|||
|
var Type = Data.New.Type;
|
|||
|
Writer.WriteLong(Type);
|
|||
|
if (comment_type_HdrFtr === Type) {
|
|||
|
var HdrFtr = Data.New.Data;
|
|||
|
Writer.WriteString2(HdrFtr.Get_Id());
|
|||
|
}
|
|||
|
break;
|
|||
|
case historyitem_Comment_Position:
|
|||
|
Writer.WriteBool(isRealNumber(Data.newOffsetX) && isRealNumber(Data.newOffsetY));
|
|||
|
if (isRealNumber(Data.newOffsetX) && isRealNumber(Data.newOffsetY)) {
|
|||
|
Writer.WriteDouble(Data.newOffsetX);
|
|||
|
Writer.WriteDouble(Data.newOffsetY);
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
return Writer;
|
|||
|
};
|
|||
|
this.Save_Changes2 = function (Data, Writer) {
|
|||
|
var bRetValue = false;
|
|||
|
var Type = Data.Type;
|
|||
|
switch (Type) {
|
|||
|
case historyitem_Comment_Change:
|
|||
|
break;
|
|||
|
case historyitem_Comment_TypeInfo:
|
|||
|
break;
|
|||
|
}
|
|||
|
return bRetValue;
|
|||
|
};
|
|||
|
this.Load_Changes = function (Reader, Reader2) {
|
|||
|
var ClassType = Reader.GetLong();
|
|||
|
if (historyitem_type_Comment != ClassType) {
|
|||
|
return;
|
|||
|
}
|
|||
|
var Type = Reader.GetLong();
|
|||
|
switch (Type) {
|
|||
|
case historyitem_Comment_Change:
|
|||
|
this.Data.Read_FromBinary2(Reader);
|
|||
|
editor.sync_ChangeCommentData(this.Id, this.Data);
|
|||
|
break;
|
|||
|
case historyitem_Comment_TypeInfo:
|
|||
|
this.m_oTypeInfo.Type = Reader.GetLong();
|
|||
|
if (comment_type_HdrFtr === this.m_oTypeInfo.Type) {
|
|||
|
var HdrFtrId = Reader.GetString2();
|
|||
|
this.m_oTypeInfo.Data = g_oTableId.Get_ById(HdrFtrId);
|
|||
|
}
|
|||
|
break;
|
|||
|
case historyitem_Comment_Position:
|
|||
|
if (Reader.GetBool()) {
|
|||
|
this.x = Reader.GetDouble();
|
|||
|
this.y = Reader.GetDouble();
|
|||
|
} else {
|
|||
|
this.x = null;
|
|||
|
this.y = null;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
return true;
|
|||
|
};
|
|||
|
this.Get_Id = function () {
|
|||
|
return this.Id;
|
|||
|
};
|
|||
|
this.Set_Id = function (newId) {
|
|||
|
g_oTableId.Reset_Id(this, newId, this.Id);
|
|||
|
this.Id = newId;
|
|||
|
};
|
|||
|
this.Write_ToBinary2 = function (Writer) {
|
|||
|
Writer.WriteLong(historyitem_type_Comment);
|
|||
|
Writer.WriteString2(this.Id);
|
|||
|
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());
|
|||
|
}
|
|||
|
};
|
|||
|
this.Read_FromBinary2 = function (Reader) {
|
|||
|
this.Id = Reader.GetString2();
|
|||
|
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());
|
|||
|
}
|
|||
|
};
|
|||
|
this.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.Is_UseInDocument()) {
|
|||
|
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.Is_UseInDocument()) {
|
|||
|
bUse = false;
|
|||
|
}
|
|||
|
}
|
|||
|
if (false === bUse) {
|
|||
|
editor.WordControl.m_oLogicDocument.Remove_Comment(this.Id, true);
|
|||
|
}
|
|||
|
};
|
|||
|
g_oTableId.Add(this, this.Id);
|
|||
|
}
|
|||
|
var comments_NoComment = 0;
|
|||
|
var comments_NonActiveComment = 1;
|
|||
|
var comments_ActiveComment = 2;
|
|||
|
function CComments() {
|
|||
|
this.Id = g_oIdCounter.Get_NewId();
|
|||
|
this.m_bUse = false;
|
|||
|
this.m_aComments = {};
|
|||
|
this.m_sCurrent = null;
|
|||
|
this.m_aCurrentDraw = new Array();
|
|||
|
this.Get_Id = function () {
|
|||
|
return this.Id;
|
|||
|
};
|
|||
|
this.Set_Id = function (newId) {
|
|||
|
g_oTableId.Reset_Id(this, newId, this.Id);
|
|||
|
this.Id = newId;
|
|||
|
};
|
|||
|
this.Set_Use = function (Use) {
|
|||
|
this.m_bUse = Use;
|
|||
|
};
|
|||
|
this.Is_Use = function () {
|
|||
|
return this.m_bUse;
|
|||
|
};
|
|||
|
this.Add = function (Comment) {
|
|||
|
var Id = Comment.Get_Id();
|
|||
|
History.Add(this, {
|
|||
|
Type: historyitem_Comments_Add,
|
|||
|
Id: Id,
|
|||
|
Comment: Comment
|
|||
|
});
|
|||
|
this.m_aComments[Id] = Comment;
|
|||
|
};
|
|||
|
this.Get_ById = function (Id) {
|
|||
|
if ("undefined" != typeof(this.m_aComments[Id])) {
|
|||
|
return this.m_aComments[Id];
|
|||
|
}
|
|||
|
return null;
|
|||
|
};
|
|||
|
this.Remove_ById = function (Id) {
|
|||
|
if ("undefined" != typeof(this.m_aComments[Id])) {
|
|||
|
History.Add(this, {
|
|||
|
Type: historyitem_Comments_Remove,
|
|||
|
Id: Id,
|
|||
|
Comment: this.m_aComments[Id]
|
|||
|
});
|
|||
|
var Comment = this.m_aComments[Id];
|
|||
|
delete this.m_aComments[Id];
|
|||
|
Comment.Remove_Marks();
|
|||
|
return true;
|
|||
|
}
|
|||
|
return false;
|
|||
|
};
|
|||
|
this.Reset_CurrentDraw = function (PageNum) {
|
|||
|
this.m_aCurrentDraw.length = 0;
|
|||
|
for (var Id in this.m_aComments) {
|
|||
|
var Comment = this.m_aComments[Id];
|
|||
|
if (PageNum > Comment.m_oStartInfo.PageNum && PageNum <= Comment.m_oEndInfo.PageNum) {
|
|||
|
this.m_aCurrentDraw.push(Comment.Get_Id());
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
this.Add_CurrentDraw = function (Id) {
|
|||
|
if (null != this.Get_ById(Id)) {
|
|||
|
this.m_aCurrentDraw.push(Id);
|
|||
|
}
|
|||
|
};
|
|||
|
this.Remove_CurrentDraw = function (Id) {
|
|||
|
var Count = this.m_aCurrentDraw.length;
|
|||
|
for (var Index = 0; Index < Count; Index++) {
|
|||
|
if (Id === this.m_aCurrentDraw[Index]) {
|
|||
|
this.m_aCurrentDraw.splice(Index, 1);
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
this.Check_CurrentDraw = function () {
|
|||
|
var Flag = comments_NoComment;
|
|||
|
var Count = this.m_aCurrentDraw.length;
|
|||
|
if (Count > 0) {
|
|||
|
Flag = comments_NonActiveComment;
|
|||
|
}
|
|||
|
for (var Index = 0; Index < Count; Index++) {
|
|||
|
if (this.m_aCurrentDraw[Index] === this.m_sCurrent) {
|
|||
|
Flag = comments_ActiveComment;
|
|||
|
return Flag;
|
|||
|
}
|
|||
|
}
|
|||
|
return Flag;
|
|||
|
};
|
|||
|
this.Set_Current = function (Id) {
|
|||
|
this.m_sCurrent = Id;
|
|||
|
};
|
|||
|
this.Set_StartInfo = function (Id, PageNum, X, Y, H, ParaId) {
|
|||
|
var Comment = this.Get_ById(Id);
|
|||
|
if (null != Comment) {
|
|||
|
Comment.Set_StartInfo(PageNum, X, Y, H, ParaId);
|
|||
|
}
|
|||
|
};
|
|||
|
this.Set_EndInfo = function (Id, PageNum, X, Y, H, ParaId) {
|
|||
|
var Comment = this.Get_ById(Id);
|
|||
|
if (null != Comment) {
|
|||
|
Comment.Set_EndInfo(PageNum, X, Y, H, ParaId);
|
|||
|
}
|
|||
|
};
|
|||
|
this.Get_ByXY = function (PageNum, X, Y, Type) {
|
|||
|
for (var Id in this.m_aComments) {
|
|||
|
var Comment = this.m_aComments[Id];
|
|||
|
if (true === Comment.Check_ByXY(PageNum, X, Y, Type)) {
|
|||
|
return Comment;
|
|||
|
}
|
|||
|
}
|
|||
|
return null;
|
|||
|
};
|
|||
|
this.Get_Current = function () {
|
|||
|
if (null != this.m_sCurrent) {
|
|||
|
var Comment = this.Get_ById(this.m_sCurrent);
|
|||
|
if (null != Comment) {
|
|||
|
return Comment;
|
|||
|
}
|
|||
|
}
|
|||
|
return null;
|
|||
|
};
|
|||
|
this.Get_CurrentId = function () {
|
|||
|
return this.m_sCurrent;
|
|||
|
};
|
|||
|
this.Set_CommentData = function (Id, CommentData) {
|
|||
|
var Comment = this.Get_ById(Id);
|
|||
|
if (null != Comment) {
|
|||
|
Comment.Set_Data(CommentData);
|
|||
|
}
|
|||
|
};
|
|||
|
this.Check_MergeData = function () {
|
|||
|
for (var Id in this.m_aComments) {
|
|||
|
this.m_aComments[Id].Check_MergeData();
|
|||
|
}
|
|||
|
};
|
|||
|
this.Undo = function (Data) {
|
|||
|
var Type = Data.Type;
|
|||
|
switch (Type) {
|
|||
|
case historyitem_Comments_Add:
|
|||
|
delete this.m_aComments[Data.Id];
|
|||
|
editor.sync_RemoveComment(Data.Id);
|
|||
|
break;
|
|||
|
case historyitem_Comments_Remove:
|
|||
|
this.m_aComments[Data.Id] = Data.Comment;
|
|||
|
editor.sync_AddComment(Data.Id, Data.Comment.Data);
|
|||
|
break;
|
|||
|
}
|
|||
|
};
|
|||
|
this.Redo = function (Data) {
|
|||
|
var Type = Data.Type;
|
|||
|
switch (Type) {
|
|||
|
case historyitem_Comments_Add:
|
|||
|
this.m_aComments[Data.Id] = Data.Comment;
|
|||
|
editor.sync_AddComment(Data.Id, Data.Comment.Data);
|
|||
|
break;
|
|||
|
case historyitem_Comments_Remove:
|
|||
|
delete this.m_aComments[Data.Id];
|
|||
|
editor.sync_RemoveComment(Data.Id);
|
|||
|
break;
|
|||
|
}
|
|||
|
};
|
|||
|
this.Refresh_RecalcData = function (Data) {};
|
|||
|
this.Document_Is_SelectionLocked = function (Id) {
|
|||
|
var Comment = this.Get_ById(Id);
|
|||
|
if (null != Comment) {
|
|||
|
Comment.Lock.Check(Comment.Get_Id());
|
|||
|
}
|
|||
|
};
|
|||
|
this.Save_Changes = function (Data, Writer) {
|
|||
|
Writer.WriteLong(historyitem_type_Comments);
|
|||
|
var Type = Data.Type;
|
|||
|
Writer.WriteLong(Type);
|
|||
|
switch (Type) {
|
|||
|
case historyitem_Comments_Add:
|
|||
|
Writer.WriteString2(Data.Id);
|
|||
|
break;
|
|||
|
case historyitem_Comments_Remove:
|
|||
|
Writer.WriteString2(Data.Id);
|
|||
|
break;
|
|||
|
}
|
|||
|
return Writer;
|
|||
|
};
|
|||
|
this.Save_Changes2 = function (Data, Writer) {
|
|||
|
var bRetValue = false;
|
|||
|
var Type = Data.Type;
|
|||
|
switch (Type) {
|
|||
|
case historyitem_Comments_Add:
|
|||
|
break;
|
|||
|
case historyitem_Comments_Remove:
|
|||
|
break;
|
|||
|
}
|
|||
|
return bRetValue;
|
|||
|
};
|
|||
|
this.Load_Changes = function (Reader, Reader2) {
|
|||
|
var ClassType = Reader.GetLong();
|
|||
|
if (historyitem_type_Comments != ClassType) {
|
|||
|
return;
|
|||
|
}
|
|||
|
var Type = Reader.GetLong();
|
|||
|
switch (Type) {
|
|||
|
case historyitem_Comments_Add:
|
|||
|
var CommentId = Reader.GetString2();
|
|||
|
var Comment = g_oTableId.Get_ById(CommentId);
|
|||
|
this.m_aComments[CommentId] = Comment;
|
|||
|
editor.sync_AddComment(CommentId, Comment.Data);
|
|||
|
break;
|
|||
|
case historyitem_Comments_Remove:
|
|||
|
var CommentId = Reader.GetString2();
|
|||
|
delete this.m_aComments[CommentId];
|
|||
|
editor.sync_RemoveComment(CommentId);
|
|||
|
break;
|
|||
|
}
|
|||
|
return true;
|
|||
|
};
|
|||
|
g_oTableId.Add(this, this.Id);
|
|||
|
}
|