1699 lines
66 KiB
JavaScript
1699 lines
66 KiB
JavaScript
/*
|
|
* (c) Copyright Ascensio System SIA 2010-2015
|
|
*
|
|
* This program is a free software product. You can redistribute it and/or
|
|
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
|
* version 3 as published by the Free Software Foundation. In accordance with
|
|
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
|
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
|
* of any third-party rights.
|
|
*
|
|
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
|
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
|
*
|
|
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
|
* EU, LV-1021.
|
|
*
|
|
* The interactive user interfaces in modified source and object code versions
|
|
* of the Program must display Appropriate Legal Notices, as required under
|
|
* Section 5 of the GNU AGPL version 3.
|
|
*
|
|
* Pursuant to Section 7(b) of the License you must retain the original Product
|
|
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
|
* grant you any rights under trademark law for use of our trademarks.
|
|
*
|
|
* All the Product's GUI elements, including illustrations and icon sets, as
|
|
* well as technical writing content are licensed under the terms of the
|
|
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
|
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
|
*
|
|
*/
|
|
"use strict";
|
|
function ParaHyperlink() {
|
|
ParaRun.superclass.constructor.call(this);
|
|
this.Id = g_oIdCounter.Get_NewId();
|
|
this.Type = para_Hyperlink;
|
|
this.Value = "";
|
|
this.Visited = false;
|
|
this.ToolTip = "";
|
|
this.State = new CParaRunState();
|
|
this.Selection = this.State.Selection;
|
|
this.Content = [];
|
|
this.m_oContentChanges = new CContentChanges();
|
|
this.NearPosArray = [];
|
|
this.SearchMarks = [];
|
|
this.SpellingMarks = [];
|
|
g_oTableId.Add(this, this.Id);
|
|
}
|
|
Asc.extendClass(ParaHyperlink, CParagraphContentWithContentBase);
|
|
ParaHyperlink.prototype.Get_Id = function () {
|
|
return this.Id;
|
|
};
|
|
ParaHyperlink.prototype.Clear_ContentChanges = function () {
|
|
this.m_oContentChanges.Clear();
|
|
};
|
|
ParaHyperlink.prototype.Add_ContentChanges = function (Changes) {
|
|
this.m_oContentChanges.Add(Changes);
|
|
};
|
|
ParaHyperlink.prototype.Refresh_ContentChanges = function () {
|
|
this.m_oContentChanges.Refresh();
|
|
};
|
|
ParaHyperlink.prototype.Copy = function (Selected) {
|
|
var NewHyperlink = new ParaHyperlink();
|
|
NewHyperlink.Set_Value(this.Value);
|
|
NewHyperlink.Set_ToolTip(this.ToolTip);
|
|
NewHyperlink.Visited = this.Visited;
|
|
var StartPos = 0;
|
|
var EndPos = this.Content.length - 1;
|
|
if (true === Selected && true === this.State.Selection.Use) {
|
|
StartPos = this.State.Selection.StartPos;
|
|
EndPos = this.State.Selection.EndPos;
|
|
if (StartPos > EndPos) {
|
|
StartPos = this.State.Selection.EndPos;
|
|
EndPos = this.State.Selection.StartPos;
|
|
}
|
|
}
|
|
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++) {
|
|
var Item = this.Content[CurPos];
|
|
if (StartPos === CurPos || EndPos === CurPos) {
|
|
NewHyperlink.Add_ToContent(CurPos - StartPos, Item.Copy(Selected));
|
|
} else {
|
|
NewHyperlink.Add_ToContent(CurPos - StartPos, Item.Copy(false));
|
|
}
|
|
}
|
|
return NewHyperlink;
|
|
};
|
|
ParaHyperlink.prototype.Recalc_RunsCompiledPr = function () {
|
|
var Count = this.Content.length;
|
|
for (var Pos = 0; Pos < Count; Pos++) {
|
|
var Element = this.Content[Pos];
|
|
if (Element.Recalc_RunsCompiledPr) {
|
|
Element.Recalc_RunsCompiledPr();
|
|
}
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Get_AllDrawingObjects = function (DrawingObjs) {
|
|
var Count = this.Content.length;
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
var Item = this.Content[Index];
|
|
if (para_Run === Item.Type || para_Hyperlink === Item.Type) {
|
|
Item.Get_AllDrawingObjects(DrawingObjs);
|
|
}
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Set_Paragraph = function (Paragraph) {
|
|
this.Paragraph = Paragraph;
|
|
var ContentLen = this.Content.length;
|
|
for (var CurPos = 0; CurPos < ContentLen; CurPos++) {
|
|
this.Content[CurPos].Set_Paragraph(Paragraph);
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Is_Empty = function () {
|
|
var ContentLen = this.Content.length;
|
|
for (var Index = 0; Index < ContentLen; Index++) {
|
|
if (false === this.Content[Index].Is_Empty()) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
ParaHyperlink.prototype.Is_CheckingNearestPos = function () {
|
|
if (this.NearPosArray.length > 0) {
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
ParaHyperlink.prototype.Is_StartFromNewLine = function () {
|
|
if (this.Content.length < 0) {
|
|
return false;
|
|
}
|
|
return this.Content[0].Is_StartFromNewLine();
|
|
};
|
|
ParaHyperlink.prototype.Get_SelectedElementsInfo = function (Info) {
|
|
Info.Set_Hyperlink(this);
|
|
var Selection = this.State.Selection;
|
|
if (true === Selection.Use && Selection.StartPos === Selection.EndPos && this.Content[Selection.EndPos].Get_SelectedElementsInfo) {
|
|
this.Content[Selection.EndPos].Get_SelectedElementsInfo(Info);
|
|
} else {
|
|
if (false === Selection.Use && this.Content[this.State.ContentPos].Get_SelectedElementsInfo) {
|
|
this.Content[this.State.ContentPos].Get_SelectedElementsInfo(Info);
|
|
}
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Get_SelectedText = function (bAll, bClearText) {
|
|
var Str = "";
|
|
var Count = this.Content.length;
|
|
for (var Pos = 0; Pos < Count; Pos++) {
|
|
var _Str = this.Content[Pos].Get_SelectedText(bAll, bClearText);
|
|
if (null === _Str) {
|
|
return null;
|
|
}
|
|
Str += _Str;
|
|
}
|
|
return Str;
|
|
};
|
|
ParaHyperlink.prototype.Get_SelectionDirection = function () {
|
|
if (true !== this.Selection.Use) {
|
|
return 0;
|
|
}
|
|
if (this.Selection.StartPos < this.Selection.EndPos) {
|
|
return 1;
|
|
} else {
|
|
if (this.Selection.StartPos > this.Selection.EndPos) {
|
|
return -1;
|
|
}
|
|
}
|
|
return this.Content[this.Selection.StartPos].Get_SelectionDirection();
|
|
};
|
|
ParaHyperlink.prototype.Get_TextPr = function (_ContentPos, Depth) {
|
|
if (undefined === _ContentPos) {
|
|
return this.Content[0].Get_TextPr();
|
|
} else {
|
|
return this.Content[_ContentPos.Get(Depth)].Get_TextPr(_ContentPos, Depth + 1);
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Get_CompiledTextPr = function (Copy) {
|
|
var TextPr = null;
|
|
if (true === this.State.Selection) {
|
|
var StartPos = this.State.Selection.StartPos;
|
|
var EndPos = this.State.Selection.EndPos;
|
|
if (StartPos > EndPos) {
|
|
StartPos = this.State.Selection.EndPos;
|
|
EndPos = this.State.Selection.StartPos;
|
|
}
|
|
TextPr = this.Content[StartPos].Get_CompiledTextPr(Copy);
|
|
while (null === TextPr && StartPos < EndPos) {
|
|
StartPos++;
|
|
TextPr = this.Content[StartPos].Get_CompiledTextPr(Copy);
|
|
}
|
|
for (var CurPos = StartPos + 1; CurPos <= EndPos; CurPos++) {
|
|
var CurTextPr = this.Content[CurPos].Get_CompiledPr(false);
|
|
if (null !== CurTextPr) {
|
|
TextPr = TextPr.Compare(CurTextPr);
|
|
}
|
|
}
|
|
} else {
|
|
var CurPos = this.State.ContentPos;
|
|
if (CurPos >= 0 && CurPos < this.Content.length) {
|
|
TextPr = this.Content[CurPos].Get_CompiledTextPr(Copy);
|
|
}
|
|
}
|
|
return TextPr;
|
|
};
|
|
ParaHyperlink.prototype.Check_Content = function () {
|
|
if (this.Content.length <= 0) {
|
|
this.Add_ToContent(0, new ParaRun(), false);
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Add_ToContent = function (Pos, Item, UpdatePosition) {
|
|
if (para_Hyperlink === Item.Type) {
|
|
for (var ItemPos = 0, Count = Item.Content.length; ItemPos < Count; ItemPos++) {
|
|
this.Add_ToContent(Pos + ItemPos, Item.Content[ItemPos], UpdatePosition);
|
|
}
|
|
return;
|
|
}
|
|
History.Add(this, {
|
|
Type: historyitem_Hyperlink_AddItem,
|
|
Pos: Pos,
|
|
EndPos: Pos,
|
|
Items: [Item]
|
|
});
|
|
this.Content.splice(Pos, 0, Item);
|
|
if (true === UpdatePosition) {
|
|
if (this.State.ContentPos >= Pos) {
|
|
this.State.ContentPos++;
|
|
}
|
|
if (true === this.State.Selection.Use) {
|
|
if (this.State.Selection.StartPos >= Pos) {
|
|
this.State.Selection.StartPos++;
|
|
}
|
|
if (this.State.Selection.EndPos >= Pos) {
|
|
this.State.Selection.EndPos++;
|
|
}
|
|
}
|
|
var LinesCount = this.protected_GetLinesCount();
|
|
for (var CurLine = 0; CurLine < LinesCount; CurLine++) {
|
|
var RangesCount = this.protected_GetRangesCount(CurLine);
|
|
for (var CurRange = 0; CurRange < RangesCount; CurRange++) {
|
|
var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
|
|
var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
|
|
if (StartPos > Pos) {
|
|
StartPos++;
|
|
}
|
|
if (EndPos > Pos) {
|
|
EndPos++;
|
|
}
|
|
this.protected_FillRange(CurLine, CurRange, StartPos, EndPos);
|
|
}
|
|
if (Pos === this.Content.length - 1 && LinesCount - 1 === CurLine) {
|
|
this.protected_FillRangeEndPos(CurLine, RangesCount - 1, this.protected_GetRangeEndPos(CurLine, RangesCount - 1) + 1);
|
|
}
|
|
}
|
|
}
|
|
var NearPosLen = this.NearPosArray.length;
|
|
for (var Index = 0; Index < NearPosLen; Index++) {
|
|
var HyperNearPos = this.NearPosArray[Index];
|
|
var ContentPos = HyperNearPos.NearPos.ContentPos;
|
|
var Depth = HyperNearPos.Depth;
|
|
if (ContentPos.Data[Depth] >= Pos) {
|
|
ContentPos.Data[Depth]++;
|
|
}
|
|
}
|
|
var SearchMarksCount = this.SearchMarks.length;
|
|
for (var Index = 0; Index < SearchMarksCount; Index++) {
|
|
var Mark = this.SearchMarks[Index];
|
|
var ContentPos = (true === Mark.Start ? Mark.SearchResult.StartPos : Mark.SearchResult.EndPos);
|
|
var Depth = Mark.Depth;
|
|
if (ContentPos.Data[Depth] >= Pos) {
|
|
ContentPos.Data[Depth]++;
|
|
}
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Remove_FromContent = function (Pos, Count, UpdatePosition) {
|
|
var DeletedItems = this.Content.slice(Pos, Pos + Count);
|
|
History.Add(this, {
|
|
Type: historyitem_Hyperlink_RemoveItem,
|
|
Pos: Pos,
|
|
EndPos: Pos + Count - 1,
|
|
Items: DeletedItems
|
|
});
|
|
this.Content.splice(Pos, Count);
|
|
if (true === UpdatePosition) {
|
|
if (this.State.ContentPos > Pos + Count) {
|
|
this.State.ContentPos -= Count;
|
|
} else {
|
|
if (this.State.ContentPos > Pos) {
|
|
this.State.ContentPos = Pos;
|
|
}
|
|
}
|
|
if (true === this.State.Selection.Use) {
|
|
if (this.State.Selection.StartPos <= this.State.Selection.EndPos) {
|
|
if (this.State.Selection.StartPos > Pos + Count) {
|
|
this.State.Selection.StartPos -= Count;
|
|
} else {
|
|
if (this.State.Selection.StartPos > Pos) {
|
|
this.State.Selection.StartPos = Pos;
|
|
}
|
|
}
|
|
if (this.State.Selection.EndPos >= Pos + Count) {
|
|
this.State.Selection.EndPos -= Count;
|
|
} else {
|
|
if (this.State.Selection.EndPos >= Pos) {
|
|
this.State.Selection.EndPos = Math.max(0, Pos - 1);
|
|
}
|
|
}
|
|
} else {
|
|
if (this.State.Selection.StartPos >= Pos + Count) {
|
|
this.State.Selection.StartPos -= Count;
|
|
} else {
|
|
if (this.State.Selection.StartPos >= Pos) {
|
|
this.State.Selection.StartPos = Math.max(0, Pos - 1);
|
|
}
|
|
}
|
|
if (this.State.Selection.EndPos > Pos + Count) {
|
|
this.State.Selection.EndPos -= Count;
|
|
} else {
|
|
if (this.State.Selection.EndPos > Pos) {
|
|
this.State.Selection.EndPos = Pos;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var LinesCount = this.protected_GetLinesCount();
|
|
for (var CurLine = 0; CurLine < LinesCount; CurLine++) {
|
|
var RangesCount = this.protected_GetRangesCount(CurLine);
|
|
for (var CurRange = 0; CurRange < RangesCount; CurRange++) {
|
|
var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
|
|
var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
|
|
if (StartPos > Pos + Count) {
|
|
StartPos -= Count;
|
|
} else {
|
|
if (StartPos > Pos) {
|
|
StartPos = Math.max(0, Pos);
|
|
}
|
|
}
|
|
if (EndPos >= Pos + Count) {
|
|
EndPos -= Count;
|
|
} else {
|
|
if (EndPos >= Pos) {
|
|
EndPos = Math.max(0, Pos);
|
|
}
|
|
}
|
|
this.protected_FillRange(CurLine, CurRange, StartPos, EndPos);
|
|
}
|
|
}
|
|
}
|
|
var NearPosLen = this.NearPosArray.length;
|
|
for (var Index = 0; Index < NearPosLen; Index++) {
|
|
var HyperNearPos = this.NearPosArray[Index];
|
|
var ContentPos = HyperNearPos.NearPos.ContentPos;
|
|
var Depth = HyperNearPos.Depth;
|
|
if (ContentPos.Data[Depth] > Pos + Count) {
|
|
ContentPos.Data[Depth] -= Count;
|
|
} else {
|
|
if (ContentPos.Data[Depth] > Pos) {
|
|
ContentPos.Data[Depth] = Math.max(0, Pos);
|
|
}
|
|
}
|
|
}
|
|
var SearchMarksCount = this.SearchMarks.length;
|
|
for (var Index = 0; Index < SearchMarksCount; Index++) {
|
|
var Mark = this.SearchMarks[Index];
|
|
var ContentPos = (true === Mark.Start ? Mark.SearchResult.StartPos : Mark.SearchResult.EndPos);
|
|
var Depth = Mark.Depth;
|
|
if (ContentPos.Data[Depth] > Pos + Count) {
|
|
ContentPos.Data[Depth] -= Count;
|
|
} else {
|
|
if (ContentPos.Data[Depth] > Pos) {
|
|
ContentPos.Data[Depth] = Math.max(0, Pos);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Add = function (Item) {
|
|
switch (Item.Type) {
|
|
case para_Run:
|
|
var CurItem = this.Content[this.State.ContentPos];
|
|
switch (CurItem.Type) {
|
|
case para_Run:
|
|
var NewRun = CurItem.Split2(CurItem.State.ContentPos);
|
|
this.Internal_Content_Add(CurPos + 1, Item);
|
|
this.Internal_Content_Add(CurPos + 2, NewRun);
|
|
this.State.ContentPos = CurPos + 1;
|
|
break;
|
|
default:
|
|
this.Content[this.State.ContentPos].Add(Item);
|
|
break;
|
|
}
|
|
break;
|
|
case para_Math:
|
|
var ContentPos = new CParagraphContentPos();
|
|
this.Get_ParaContentPos(false, false, ContentPos);
|
|
var CurPos = ContentPos.Get(0);
|
|
if (para_Math !== this.Content[CurPos].Type) {
|
|
var NewElement = this.Content[CurPos].Split(ContentPos, 1);
|
|
if (null !== NewElement) {
|
|
this.Add_ToContent(CurPos + 1, NewElement, true);
|
|
}
|
|
var Elem = new ParaMath();
|
|
Elem.Root.Load_FromMenu(Item.Menu, this);
|
|
Elem.Root.Correct_Content(true);
|
|
this.Add_ToContent(CurPos + 1, Elem, true);
|
|
this.State.ContentPos = CurPos + 1;
|
|
this.Content[this.State.ContentPos].Cursor_MoveToEndPos(false);
|
|
} else {
|
|
this.Content[CurPos].Add(Item);
|
|
}
|
|
break;
|
|
default:
|
|
this.Content[this.State.ContentPos].Add(Item);
|
|
break;
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Remove = function (Direction, bOnAddText) {
|
|
var Selection = this.State.Selection;
|
|
if (true === Selection.Use) {
|
|
var StartPos = Selection.StartPos;
|
|
var EndPos = Selection.EndPos;
|
|
if (StartPos > EndPos) {
|
|
StartPos = Selection.EndPos;
|
|
EndPos = Selection.StartPos;
|
|
}
|
|
if (StartPos === EndPos) {
|
|
this.Content[StartPos].Remove(Direction, bOnAddText);
|
|
if (StartPos !== this.Content.length - 1 && true === this.Content[StartPos].Is_Empty()) {
|
|
this.Remove_FromContent(StartPos, 1, true);
|
|
}
|
|
} else {
|
|
this.Content[EndPos].Remove(Direction, bOnAddText);
|
|
if (EndPos !== this.Content.length - 1 && true === this.Content[EndPos].Is_Empty()) {
|
|
this.Remove_FromContent(EndPos, 1, true);
|
|
}
|
|
for (var CurPos = EndPos - 1; CurPos > StartPos; CurPos--) {
|
|
this.Remove_FromContent(CurPos, 1, true);
|
|
}
|
|
this.Content[StartPos].Remove(Direction, bOnAddText);
|
|
if (true === this.Content[StartPos].Is_Empty()) {
|
|
this.Remove_FromContent(StartPos, 1, true);
|
|
}
|
|
}
|
|
this.Selection_Remove();
|
|
this.State.ContentPos = StartPos;
|
|
} else {
|
|
var ContentPos = this.State.ContentPos;
|
|
if (true === this.Cursor_Is_Start() || true === this.Cursor_Is_End()) {
|
|
this.Select_All();
|
|
} else {
|
|
while (false === this.Content[ContentPos].Remove(Direction, bOnAddText)) {
|
|
if (Direction < 0) {
|
|
ContentPos--;
|
|
} else {
|
|
ContentPos++;
|
|
}
|
|
if (ContentPos < 0 || ContentPos >= this.Content.length) {
|
|
break;
|
|
}
|
|
if (Direction < 0) {
|
|
this.Content[ContentPos].Cursor_MoveToEndPos(false);
|
|
} else {
|
|
this.Content[ContentPos].Cursor_MoveToStartPos();
|
|
}
|
|
}
|
|
if (ContentPos < 0 || ContentPos >= this.Content.length) {
|
|
return false;
|
|
} else {
|
|
if (ContentPos !== this.Content.length - 1 && true === this.Content[ContentPos].Is_Empty()) {
|
|
this.Remove_FromContent(ContentPos, 1, true);
|
|
}
|
|
this.State.ContentPos = ContentPos;
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
ParaHyperlink.prototype.Get_CurrentParaPos = function () {
|
|
var CurPos = this.State.ContentPos;
|
|
if (CurPos >= 0 && CurPos < this.Content.length) {
|
|
return this.Content[CurPos].Get_CurrentParaPos();
|
|
}
|
|
return new CParaPos(this.StartRange, this.StartLine, 0, 0);
|
|
};
|
|
ParaHyperlink.prototype.Apply_TextPr = function (TextPr, IncFontSize, ApplyToAll) {
|
|
if (true === ApplyToAll) {
|
|
var ContentLen = this.Content.length;
|
|
for (var CurPos = 0; CurPos < ContentLen; CurPos++) {
|
|
this.Content[CurPos].Apply_TextPr(TextPr, IncFontSize, true);
|
|
}
|
|
} else {
|
|
var Selection = this.State.Selection;
|
|
if (true === Selection.Use) {
|
|
var StartPos = Selection.StartPos;
|
|
var EndPos = Selection.EndPos;
|
|
if (StartPos === EndPos) {
|
|
var NewElements = this.Content[EndPos].Apply_TextPr(TextPr, IncFontSize, false);
|
|
if (para_Run === this.Content[EndPos].Type) {
|
|
var CenterRunPos = this.Internal_ReplaceRun(EndPos, NewElements);
|
|
if (StartPos === this.State.ContentPos) {
|
|
this.State.ContentPos = CenterRunPos;
|
|
}
|
|
Selection.StartPos = CenterRunPos;
|
|
Selection.EndPos = CenterRunPos;
|
|
}
|
|
} else {
|
|
var Direction = 1;
|
|
if (StartPos > EndPos) {
|
|
var Temp = StartPos;
|
|
StartPos = EndPos;
|
|
EndPos = Temp;
|
|
Direction = -1;
|
|
}
|
|
for (var CurPos = StartPos + 1; CurPos < EndPos; CurPos++) {
|
|
this.Content[CurPos].Apply_TextPr(TextPr, IncFontSize, false);
|
|
}
|
|
var NewElements = this.Content[EndPos].Apply_TextPr(TextPr, IncFontSize, false);
|
|
if (para_Run === this.Content[EndPos].Type) {
|
|
this.Internal_ReplaceRun(EndPos, NewElements);
|
|
}
|
|
var NewElements = this.Content[StartPos].Apply_TextPr(TextPr, IncFontSize, false);
|
|
if (para_Run === this.Content[StartPos].Type) {
|
|
this.Internal_ReplaceRun(StartPos, NewElements);
|
|
}
|
|
if (Selection.StartPos < Selection.EndPos && true === this.Content[Selection.StartPos].Selection_IsEmpty()) {
|
|
Selection.StartPos++;
|
|
} else {
|
|
if (Selection.EndPos < Selection.StartPos && true === this.Content[Selection.EndPos].Selection_IsEmpty()) {
|
|
Selection.EndPos++;
|
|
}
|
|
}
|
|
if (Selection.StartPos < Selection.EndPos && true === this.Content[Selection.EndPos].Selection_IsEmpty()) {
|
|
Selection.EndPos--;
|
|
} else {
|
|
if (Selection.EndPos < Selection.StartPos && true === this.Content[Selection.StartPos].Selection_IsEmpty()) {
|
|
Selection.StartPos--;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
var Pos = this.State.ContentPos;
|
|
var Element = this.Content[Pos];
|
|
var NewElements = Element.Apply_TextPr(TextPr, IncFontSize, false);
|
|
if (para_Run === Element.Type) {
|
|
var CenterRunPos = this.Internal_ReplaceRun(Pos, NewElements);
|
|
this.State.ContentPos = CenterRunPos;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Internal_ReplaceRun = function (Pos, NewRuns) {
|
|
var LRun = NewRuns[0];
|
|
var CRun = NewRuns[1];
|
|
var RRun = NewRuns[2];
|
|
var CenterRunPos = Pos;
|
|
if (null !== LRun) {
|
|
this.Add_ToContent(Pos + 1, CRun, true);
|
|
CenterRunPos = Pos + 1;
|
|
} else {}
|
|
if (null !== RRun) {
|
|
this.Add_ToContent(CenterRunPos + 1, RRun, true);
|
|
}
|
|
return CenterRunPos;
|
|
};
|
|
ParaHyperlink.prototype.Clear_TextPr = function () {
|
|
var HyperlinkStyle = null;
|
|
if (undefined !== this.Paragraph && null !== this.Paragraph) {
|
|
var Styles = this.Paragraph.Parent.Get_Styles();
|
|
HyperlinkStyle = Styles.Get_Default_Hyperlink();
|
|
}
|
|
var Count = this.Content.length;
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
var Item = this.Content[Index];
|
|
Item.Clear_TextPr();
|
|
if (para_Run === Item.Type && null !== HyperlinkStyle) {
|
|
Item.Set_RStyle(HyperlinkStyle);
|
|
}
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Check_NearestPos = function (ParaNearPos, Depth) {
|
|
var HyperNearPos = new CParagraphElementNearPos();
|
|
HyperNearPos.NearPos = ParaNearPos.NearPos;
|
|
HyperNearPos.Depth = Depth;
|
|
this.NearPosArray.push(HyperNearPos);
|
|
ParaNearPos.Classes.push(this);
|
|
var CurPos = ParaNearPos.NearPos.ContentPos.Get(Depth);
|
|
this.Content[CurPos].Check_NearestPos(ParaNearPos, Depth + 1);
|
|
};
|
|
ParaHyperlink.prototype.Get_DrawingObjectRun = function (Id) {
|
|
var Run = null;
|
|
var ContentLen = this.Content.length;
|
|
for (var CurPos = 0; CurPos < ContentLen; CurPos++) {
|
|
var Element = this.Content[CurPos];
|
|
Run = Element.Get_DrawingObjectRun(Id);
|
|
if (null !== Run) {
|
|
return Run;
|
|
}
|
|
}
|
|
return Run;
|
|
};
|
|
ParaHyperlink.prototype.Get_DrawingObjectContentPos = function (Id, ContentPos, Depth) {
|
|
var ContentLen = this.Content.length;
|
|
for (var Index = 0; Index < ContentLen; Index++) {
|
|
var Element = this.Content[Index];
|
|
if (true === Element.Get_DrawingObjectContentPos(Id, ContentPos, Depth + 1)) {
|
|
ContentPos.Update2(Index, Depth);
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
ParaHyperlink.prototype.Get_Layout = function (DrawingLayout, UseContentPos, ContentPos, Depth) {
|
|
var CurLine = DrawingLayout.Line - this.StartLine;
|
|
var CurRange = (0 === CurLine ? DrawingLayout.Range - this.StartRange : DrawingLayout.Range);
|
|
var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
|
|
var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
|
|
var CurContentPos = (true === UseContentPos ? ContentPos.Get(Depth) : -1);
|
|
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++) {
|
|
this.Content[CurPos].Get_Layout(DrawingLayout, (CurPos === CurContentPos ? true : false), ContentPos, Depth + 1);
|
|
if (true === DrawingLayout.Layout) {
|
|
return;
|
|
}
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Get_NextRunElements = function (RunElements, UseContentPos, Depth) {
|
|
var CurPos = (true === UseContentPos ? RunElements.ContentPos.Get(Depth) : 0);
|
|
var ContentLen = this.Content.length;
|
|
this.Content[CurPos].Get_NextRunElements(RunElements, UseContentPos, Depth + 1);
|
|
if (RunElements.Count <= 0) {
|
|
return;
|
|
}
|
|
CurPos++;
|
|
while (CurPos < ContentLen) {
|
|
this.Content[CurPos].Get_NextRunElements(RunElements, false, Depth + 1);
|
|
if (RunElements.Count <= 0) {
|
|
break;
|
|
}
|
|
CurPos++;
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Get_PrevRunElements = function (RunElements, UseContentPos, Depth) {
|
|
var CurPos = (true === UseContentPos ? RunElements.ContentPos.Get(Depth) : this.Content.length - 1);
|
|
this.Content[CurPos].Get_PrevRunElements(RunElements, UseContentPos, Depth + 1);
|
|
if (RunElements.Count <= 0) {
|
|
return;
|
|
}
|
|
CurPos--;
|
|
while (CurPos >= 0) {
|
|
this.Content[CurPos].Get_PrevRunElements(RunElements, false, Depth + 1);
|
|
if (RunElements.Count <= 0) {
|
|
break;
|
|
}
|
|
CurPos--;
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Collect_DocumentStatistics = function (ParaStats) {
|
|
var Count = this.Content.length;
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
this.Content[Index].Collect_DocumentStatistics(ParaStats);
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Create_FontMap = function (Map) {
|
|
var Count = this.Content.length;
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
this.Content[Index].Create_FontMap(Map);
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Get_AllFontNames = function (AllFonts) {
|
|
var Count = this.Content.length;
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
this.Content[Index].Get_AllFontNames(AllFonts);
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Clear_TextFormatting = function (DefHyper) {
|
|
var Count = this.Content.length;
|
|
for (var Pos = 0; Pos < Count; Pos++) {
|
|
var Item = this.Content[Pos];
|
|
Item.Clear_TextFormatting(DefHyper);
|
|
if (para_Run === Item.Type) {
|
|
Item.Set_RStyle(DefHyper);
|
|
}
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Can_AddDropCap = function () {
|
|
var Count = this.Content.length;
|
|
for (var Pos = 0; Pos < Count; Pos++) {
|
|
var TempRes = this.Content[Pos].Can_AddDropCap();
|
|
if (null !== TempRes) {
|
|
return TempRes;
|
|
}
|
|
}
|
|
return null;
|
|
};
|
|
ParaHyperlink.prototype.Get_TextForDropCap = function (DropCapText, UseContentPos, ContentPos, Depth) {
|
|
var EndPos = (true === UseContentPos ? ContentPos.Get(Depth) : this.Content.length - 1);
|
|
for (var Pos = 0; Pos <= EndPos; Pos++) {
|
|
this.Content[Pos].Get_TextForDropCap(DropCapText, (true === UseContentPos && Pos === EndPos ? true : false), ContentPos, Depth + 1);
|
|
if (true === DropCapText.Mixed && (true === DropCapText.Check || DropCapText.Runs.length > 0)) {
|
|
return;
|
|
}
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Get_StartTabsCount = function (TabsCounter) {
|
|
var ContentLen = this.Content.length;
|
|
for (var Pos = 0; Pos < ContentLen; Pos++) {
|
|
var Element = this.Content[Pos];
|
|
if (false === Element.Get_StartTabsCount(TabsCounter)) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
ParaHyperlink.prototype.Remove_StartTabs = function (TabsCounter) {
|
|
var ContentLen = this.Content.length;
|
|
for (var Pos = 0; Pos < ContentLen; Pos++) {
|
|
var Element = this.Content[Pos];
|
|
if (false === Element.Remove_StartTabs(TabsCounter)) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
ParaHyperlink.prototype.Split = function (ContentPos, Depth) {
|
|
var NewHyperlink = new ParaHyperlink();
|
|
NewHyperlink.Set_Value(this.Value);
|
|
NewHyperlink.Set_ToolTip(this.ToolTip);
|
|
var CurPos = ContentPos.Get(Depth);
|
|
var TextPr = this.Get_TextPr(ContentPos, Depth);
|
|
var NewElement = this.Content[CurPos].Split(ContentPos, Depth + 1);
|
|
if (null === NewElement) {
|
|
NewElement = new ParaRun();
|
|
NewElement.Set_Pr(TextPr.Copy());
|
|
}
|
|
var NewContent = this.Content.slice(CurPos + 1);
|
|
this.Remove_FromContent(CurPos + 1, this.Content.length - CurPos - 1, false);
|
|
var Count = NewContent.length;
|
|
for (var Pos = 0; Pos < Count; Pos++) {
|
|
NewHyperlink.Add_ToContent(Pos, NewContent[Pos], false);
|
|
}
|
|
NewHyperlink.Add_ToContent(0, NewElement, false);
|
|
return NewHyperlink;
|
|
};
|
|
ParaHyperlink.prototype.Split2 = function (CurPos) {
|
|
var NewRun = new ParaRun(this.Paragraph);
|
|
NewRun.Set_Pr(this.Pr.Copy());
|
|
var CheckEndPos = -1;
|
|
var CheckEndPos2 = Math.min(CurPos, this.Content.length);
|
|
for (var Pos = 0; Pos < CheckEndPos2; Pos++) {
|
|
if (para_End === this.Content[Pos].Type) {
|
|
CheckEndPos = Pos;
|
|
break;
|
|
}
|
|
}
|
|
if (-1 !== CheckEndPos) {
|
|
CurPos = CheckEndPos;
|
|
}
|
|
NewRun.Concat_ToContent(this.Content.slice(CurPos));
|
|
this.Remove_FromContent(CurPos, this.Content.length - CurPos, true);
|
|
var SpellingMarksCount = this.SpellingMarks.length;
|
|
for (var Index = 0; Index < SpellingMarksCount; Index++) {
|
|
var Mark = this.SpellingMarks[Index];
|
|
var MarkPos = (true === Mark.Start ? Mark.Element.StartPos.Get(Mark.Depth) : Mark.Element.EndPos.Get(Mark.Depth));
|
|
if (MarkPos >= CurPos) {
|
|
var MarkElement = Mark.Element;
|
|
if (true === Mark.Start) {
|
|
MarkElement.ClassesS[Mark.Depth] = NewRun;
|
|
MarkElement.StartPos.Data[Mark.Depth] -= CurPos;
|
|
} else {
|
|
MarkElement.ClassesE[Mark.Depth] = NewRun;
|
|
MarkElement.EndPos.Data[Mark.Depth] -= CurPos;
|
|
}
|
|
NewRun.SpellingMarks.push(Mark);
|
|
this.SpellingMarks.splice(Index, 1);
|
|
SpellingMarksCount--;
|
|
Index--;
|
|
}
|
|
}
|
|
return NewRun;
|
|
};
|
|
ParaHyperlink.prototype.Recalculate_Range = function (PRS, ParaPr, Depth) {
|
|
if (this.Paragraph !== PRS.Paragraph) {
|
|
this.Paragraph = PRS.Paragraph;
|
|
this.protected_UpdateSpellChecking();
|
|
}
|
|
var CurLine = PRS.Line - this.StartLine;
|
|
var CurRange = (0 === CurLine ? PRS.Range - this.StartRange : PRS.Range);
|
|
var RangeStartPos = this.protected_AddRange(CurLine, CurRange);
|
|
var RangeEndPos = 0;
|
|
var ContentLen = this.Content.length;
|
|
var Pos = RangeStartPos;
|
|
for (; Pos < ContentLen; Pos++) {
|
|
var Item = this.Content[Pos];
|
|
if (para_Math === Item.Type) {
|
|
Item.Set_Inline(true);
|
|
}
|
|
if ((0 === Pos && 0 === CurLine && 0 === CurRange) || Pos !== RangeStartPos) {
|
|
Item.Recalculate_Reset(PRS.Range, PRS.Line);
|
|
}
|
|
PRS.Update_CurPos(Pos, Depth);
|
|
Item.Recalculate_Range(PRS, ParaPr, Depth + 1);
|
|
if (true === PRS.NewRange) {
|
|
RangeEndPos = Pos;
|
|
break;
|
|
}
|
|
}
|
|
if (Pos >= ContentLen) {
|
|
RangeEndPos = Pos - 1;
|
|
}
|
|
this.protected_FillRange(CurLine, CurRange, RangeStartPos, RangeEndPos);
|
|
};
|
|
ParaHyperlink.prototype.Recalculate_Set_RangeEndPos = function (PRS, PRP, Depth) {
|
|
var CurLine = PRS.Line - this.StartLine;
|
|
var CurRange = (0 === CurLine ? PRS.Range - this.StartRange : PRS.Range);
|
|
var CurPos = PRP.Get(Depth);
|
|
this.protected_FillRangeEndPos(CurLine, CurRange, CurPos);
|
|
this.Content[CurPos].Recalculate_Set_RangeEndPos(PRS, PRP, Depth + 1);
|
|
};
|
|
ParaHyperlink.prototype.Recalculate_Range_Width = function (PRSC, _CurLine, _CurRange) {
|
|
var CurLine = _CurLine - this.StartLine;
|
|
var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange);
|
|
var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
|
|
var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
|
|
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++) {
|
|
this.Content[CurPos].Recalculate_Range_Width(PRSC, _CurLine, _CurRange);
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Recalculate_Range_Spaces = function (PRSA, _CurLine, _CurRange, _CurPage) {
|
|
var CurLine = _CurLine - this.StartLine;
|
|
var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange);
|
|
var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
|
|
var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
|
|
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++) {
|
|
this.Content[CurPos].Recalculate_Range_Spaces(PRSA, _CurLine, _CurRange, _CurPage);
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Recalculate_PageEndInfo = function (PRSI, _CurLine, _CurRange) {
|
|
var CurLine = _CurLine - this.StartLine;
|
|
var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange);
|
|
var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
|
|
var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
|
|
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++) {
|
|
this.Content[CurPos].Recalculate_PageEndInfo(PRSI, _CurLine, _CurRange);
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Save_RecalculateObject = function (Copy) {
|
|
var RecalcObj = new CRunRecalculateObject(this.StartLine, this.StartRange);
|
|
RecalcObj.Save_Lines(this, Copy);
|
|
RecalcObj.Save_Content(this, Copy);
|
|
return RecalcObj;
|
|
};
|
|
ParaHyperlink.prototype.Load_RecalculateObject = function (RecalcObj) {
|
|
RecalcObj.Load_Lines(this);
|
|
RecalcObj.Load_Content(this);
|
|
};
|
|
ParaHyperlink.prototype.Prepare_RecalculateObject = function () {
|
|
this.protected_ClearLines();
|
|
var Count = this.Content.length;
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
this.Content[Index].Prepare_RecalculateObject();
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Is_EmptyRange = function (_CurLine, _CurRange) {
|
|
var CurLine = _CurLine - this.StartLine;
|
|
var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange);
|
|
var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
|
|
var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
|
|
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++) {
|
|
if (false === this.Content[CurPos].Is_EmptyRange(_CurLine, _CurRange)) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
ParaHyperlink.prototype.Check_Range_OnlyMath = function (Checker, _CurRange, _CurLine) {
|
|
var CurLine = _CurLine - this.StartLine;
|
|
var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange);
|
|
var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
|
|
var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
|
|
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++) {
|
|
this.Content[CurPos].Check_Range_OnlyMath(Checker, _CurRange, _CurLine);
|
|
if (false === Checker.Result) {
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Check_MathPara = function (Checker) {
|
|
Checker.Result = false;
|
|
Checker.Found = true;
|
|
};
|
|
ParaHyperlink.prototype.Check_PageBreak = function () {
|
|
var Count = this.Content.length;
|
|
for (var Pos = 0; Pos < Count; Pos++) {
|
|
if (true === this.Content[Pos].Check_PageBreak()) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
ParaHyperlink.prototype.Check_BreakPageEnd = function (PBChecker) {
|
|
var ContentLen = this.Content.length;
|
|
for (var CurPos = 0; CurPos < ContentLen; CurPos++) {
|
|
var Element = this.Content[CurPos];
|
|
if (true !== Element.Check_BreakPageEnd(PBChecker)) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
ParaHyperlink.prototype.Get_ParaPosByContentPos = function (ContentPos, Depth) {
|
|
var Pos = ContentPos.Get(Depth);
|
|
return this.Content[Pos].Get_ParaPosByContentPos(ContentPos, Depth + 1);
|
|
};
|
|
ParaHyperlink.prototype.Recalculate_CurPos = function (_X, Y, CurrentRun, _CurRange, _CurLine, _CurPage, UpdateCurPos, UpdateTarget, ReturnTarget) {
|
|
var CurLine = _CurLine - this.StartLine;
|
|
var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange);
|
|
var X = _X;
|
|
var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
|
|
var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
|
|
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++) {
|
|
var Item = this.Content[CurPos];
|
|
var Res = Item.Recalculate_CurPos(X, Y, (true === CurrentRun && CurPos === this.State.ContentPos ? true : false), _CurRange, _CurLine, _CurPage, UpdateCurPos, UpdateTarget, ReturnTarget);
|
|
if (true === CurrentRun && CurPos === this.State.ContentPos) {
|
|
return Res;
|
|
} else {
|
|
X = Res.X;
|
|
}
|
|
}
|
|
return {
|
|
X: X
|
|
};
|
|
};
|
|
ParaHyperlink.prototype.Refresh_RecalcData = function (Data) {
|
|
if (undefined !== this.Paragraph && null !== this.Paragraph) {
|
|
this.Paragraph.Refresh_RecalcData2(0);
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Recalculate_MinMaxContentWidth = function (MinMax) {
|
|
var Count = this.Content.length;
|
|
for (var Pos = 0; Pos < Count; Pos++) {
|
|
this.Content[Pos].Recalculate_MinMaxContentWidth(MinMax);
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Get_Range_VisibleWidth = function (RangeW, _CurLine, _CurRange) {
|
|
var CurLine = _CurLine - this.StartLine;
|
|
var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange);
|
|
var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
|
|
var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
|
|
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++) {
|
|
this.Content[CurPos].Get_Range_VisibleWidth(RangeW, _CurLine, _CurRange);
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Shift_Range = function (Dx, Dy, _CurLine, _CurRange) {
|
|
var CurLine = _CurLine - this.StartLine;
|
|
var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange);
|
|
var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
|
|
var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
|
|
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++) {
|
|
this.Content[CurPos].Shift_Range(Dx, Dy, _CurLine, _CurRange);
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Draw_HighLights = function (PDSH) {
|
|
var CurLine = PDSH.Line - this.StartLine;
|
|
var CurRange = (0 === CurLine ? PDSH.Range - this.StartRange : PDSH.Range);
|
|
var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
|
|
var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
|
|
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++) {
|
|
this.Content[CurPos].Draw_HighLights(PDSH);
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Draw_Elements = function (PDSE) {
|
|
PDSE.VisitedHyperlink = this.Visited;
|
|
var CurLine = PDSE.Line - this.StartLine;
|
|
var CurRange = (0 === CurLine ? PDSE.Range - this.StartRange : PDSE.Range);
|
|
var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
|
|
var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
|
|
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++) {
|
|
this.Content[CurPos].Draw_Elements(PDSE);
|
|
}
|
|
PDSE.VisitedHyperlink = false;
|
|
};
|
|
ParaHyperlink.prototype.Draw_Lines = function (PDSL) {
|
|
PDSL.VisitedHyperlink = this.Visited;
|
|
var CurLine = PDSL.Line - this.StartLine;
|
|
var CurRange = (0 === CurLine ? PDSL.Range - this.StartRange : PDSL.Range);
|
|
var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
|
|
var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
|
|
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++) {
|
|
this.Content[CurPos].Draw_Lines(PDSL);
|
|
}
|
|
PDSL.VisitedHyperlink = false;
|
|
};
|
|
ParaHyperlink.prototype.Is_CursorPlaceable = function () {
|
|
return true;
|
|
};
|
|
ParaHyperlink.prototype.Cursor_Is_Start = function () {
|
|
var ContentLen = this.Content.length;
|
|
var CurPos = 0;
|
|
while (CurPos < this.State.ContentPos && CurPos < this.Content.length - 1) {
|
|
if (true === this.Content[CurPos].Is_Empty()) {
|
|
CurPos++;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
return this.Content[CurPos].Cursor_Is_Start();
|
|
};
|
|
ParaHyperlink.prototype.Cursor_Is_NeededCorrectPos = function () {
|
|
return false;
|
|
};
|
|
ParaHyperlink.prototype.Cursor_Is_End = function () {
|
|
var CurPos = this.Content.length - 1;
|
|
while (CurPos > this.State.ContentPos && CurPos > 0) {
|
|
if (true === this.Content[CurPos].Is_Empty()) {
|
|
CurPos--;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
return this.Content[CurPos].Cursor_Is_End();
|
|
};
|
|
ParaHyperlink.prototype.Cursor_MoveToStartPos = function () {
|
|
this.State.ContentPos = 0;
|
|
if (this.Content.length > 0) {
|
|
this.Content[0].Cursor_MoveToStartPos();
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Cursor_MoveToEndPos = function (SelectFromEnd) {
|
|
var ContentLen = this.Content.length;
|
|
if (ContentLen > 0) {
|
|
this.State.ContentPos = ContentLen - 1;
|
|
this.Content[ContentLen - 1].Cursor_MoveToEndPos(SelectFromEnd);
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Get_ParaContentPosByXY = function (SearchPos, Depth, _CurLine, _CurRange, StepEnd) {
|
|
var Result = false;
|
|
var CurLine = _CurLine - this.StartLine;
|
|
var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange);
|
|
var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
|
|
var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
|
|
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++) {
|
|
var Item = this.Content[CurPos];
|
|
if (false === SearchPos.InText) {
|
|
SearchPos.InTextPos.Update2(CurPos, Depth);
|
|
}
|
|
if (true === Item.Get_ParaContentPosByXY(SearchPos, Depth + 1, _CurLine, _CurRange, StepEnd)) {
|
|
SearchPos.Pos.Update2(CurPos, Depth);
|
|
Result = true;
|
|
}
|
|
}
|
|
return Result;
|
|
};
|
|
ParaHyperlink.prototype.Get_ParaContentPos = function (bSelection, bStart, ContentPos) {
|
|
var Pos = (true === bSelection ? (true === bStart ? this.State.Selection.StartPos : this.State.Selection.EndPos) : this.State.ContentPos);
|
|
ContentPos.Add(Pos);
|
|
this.Content[Pos].Get_ParaContentPos(bSelection, bStart, ContentPos);
|
|
};
|
|
ParaHyperlink.prototype.Set_ParaContentPos = function (ContentPos, Depth) {
|
|
var Pos = ContentPos.Get(Depth);
|
|
if (Pos >= this.Content.length) {
|
|
Pos = this.Content.length - 1;
|
|
}
|
|
if (Pos < 0) {
|
|
Pos = 0;
|
|
}
|
|
this.State.ContentPos = Pos;
|
|
this.Content[Pos].Set_ParaContentPos(ContentPos, Depth + 1);
|
|
};
|
|
ParaHyperlink.prototype.Get_PosByElement = function (Class, ContentPos, Depth, UseRange, Range, Line) {
|
|
if (this === Class) {
|
|
return true;
|
|
}
|
|
var ContentPos = new CParagraphContentPos();
|
|
var StartPos = 0;
|
|
var EndPos = this.Content.length - 1;
|
|
if (true === UseRange) {
|
|
var CurLine = Line - this.StartLine;
|
|
var CurRange = (0 === CurLine ? Range - this.StartRange : Range);
|
|
if (CurLine >= 0 && CurLine < this.protected_GetLinesCount() && CurRange >= 0 && CurRange < this.protected_GetRangesCount(CurLine)) {
|
|
StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
|
|
EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
|
|
}
|
|
}
|
|
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++) {
|
|
var Element = this.Content[CurPos];
|
|
ContentPos.Update(CurPos, Depth);
|
|
if (true === Element.Get_PosByElement(Class, ContentPos, Depth + 1, true, CurRange, CurLine)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
ParaHyperlink.prototype.Get_ElementByPos = function (ContentPos, Depth) {
|
|
if (Depth + 1 >= ContentPos.Depth) {
|
|
return this;
|
|
}
|
|
var CurPos = ContentPos.Get(Depth);
|
|
return this.Content[CurPos].Get_ElementByPos(ContentPos, Depth + 1);
|
|
};
|
|
ParaHyperlink.prototype.Get_PosByDrawing = function (Id, ContentPos, Depth) {
|
|
var Count = this.Content.length;
|
|
for (var CurPos = 0; CurPos < Count; CurPos++) {
|
|
var Element = this.Content[CurPos];
|
|
ContentPos.Update(CurPos, Depth);
|
|
if (true === Element.Get_PosByDrawing(Id, ContentPos, Depth + 1)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
ParaHyperlink.prototype.Get_RunElementByPos = function (ContentPos, Depth) {
|
|
if (undefined !== ContentPos) {
|
|
var Pos = ContentPos.Get(Depth);
|
|
return this.Content[Pos].Get_RunElementByPos(ContentPos, Depth + 1);
|
|
} else {
|
|
var Count = this.Content.length;
|
|
if (Count <= 0) {
|
|
return null;
|
|
}
|
|
var Pos = 0;
|
|
var Element = this.Content[Pos];
|
|
while (null === Element && Pos < Count - 1) {
|
|
Element = this.Content[++Pos];
|
|
}
|
|
return Element;
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Get_LastRunInRange = function (_CurLine, _CurRange) {
|
|
var CurLine = _CurLine - this.StartLine;
|
|
var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange);
|
|
if (CurLine < this.protected_GetLinesCount() && CurRange < this.protected_GetRangesCount(CurLine)) {
|
|
var LastItem = this.Content[this.protected_GetRangeEndPos(CurLine, CurRange)];
|
|
if (undefined !== LastItem) {
|
|
return LastItem.Get_LastRunInRange(_CurLine, _CurRange);
|
|
}
|
|
}
|
|
return null;
|
|
};
|
|
ParaHyperlink.prototype.Get_LeftPos = function (SearchPos, ContentPos, Depth, UseContentPos) {
|
|
var CurPos = (true === UseContentPos ? ContentPos.Get(Depth) : this.Content.length - 1);
|
|
this.Content[CurPos].Get_LeftPos(SearchPos, ContentPos, Depth + 1, UseContentPos);
|
|
SearchPos.Pos.Update(CurPos, Depth);
|
|
if (true === SearchPos.Found) {
|
|
return true;
|
|
}
|
|
CurPos--;
|
|
while (CurPos >= 0) {
|
|
this.Content[CurPos].Get_LeftPos(SearchPos, ContentPos, Depth + 1, false);
|
|
SearchPos.Pos.Update(CurPos, Depth);
|
|
if (true === SearchPos.Found) {
|
|
return true;
|
|
}
|
|
CurPos--;
|
|
}
|
|
return false;
|
|
};
|
|
ParaHyperlink.prototype.Get_RightPos = function (SearchPos, ContentPos, Depth, UseContentPos, StepEnd) {
|
|
var CurPos = (true === UseContentPos ? ContentPos.Get(Depth) : 0);
|
|
this.Content[CurPos].Get_RightPos(SearchPos, ContentPos, Depth + 1, UseContentPos, StepEnd);
|
|
SearchPos.Pos.Update(CurPos, Depth);
|
|
if (true === SearchPos.Found) {
|
|
return true;
|
|
}
|
|
CurPos++;
|
|
var Count = this.Content.length;
|
|
while (CurPos < this.Content.length) {
|
|
this.Content[CurPos].Get_RightPos(SearchPos, ContentPos, Depth + 1, false, StepEnd);
|
|
SearchPos.Pos.Update(CurPos, Depth);
|
|
if (true === SearchPos.Found) {
|
|
return true;
|
|
}
|
|
CurPos++;
|
|
}
|
|
return false;
|
|
};
|
|
ParaHyperlink.prototype.Get_WordStartPos = function (SearchPos, ContentPos, Depth, UseContentPos) {
|
|
var CurPos = (true === UseContentPos ? ContentPos.Get(Depth) : this.Content.length - 1);
|
|
this.Content[CurPos].Get_WordStartPos(SearchPos, ContentPos, Depth + 1, UseContentPos);
|
|
if (true === SearchPos.UpdatePos) {
|
|
SearchPos.Pos.Update(CurPos, Depth);
|
|
}
|
|
if (true === SearchPos.Found) {
|
|
return;
|
|
}
|
|
CurPos--;
|
|
var Count = this.Content.length;
|
|
while (CurPos >= 0) {
|
|
var OldUpdatePos = SearchPos.UpdatePos;
|
|
this.Content[CurPos].Get_WordStartPos(SearchPos, ContentPos, Depth + 1, false);
|
|
if (true === SearchPos.UpdatePos) {
|
|
SearchPos.Pos.Update(CurPos, Depth);
|
|
} else {
|
|
SearchPos.UpdatePos = OldUpdatePos;
|
|
}
|
|
if (true === SearchPos.Found) {
|
|
return;
|
|
}
|
|
CurPos--;
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Get_WordEndPos = function (SearchPos, ContentPos, Depth, UseContentPos, StepEnd) {
|
|
var CurPos = (true === UseContentPos ? ContentPos.Get(Depth) : 0);
|
|
this.Content[CurPos].Get_WordEndPos(SearchPos, ContentPos, Depth + 1, UseContentPos, StepEnd);
|
|
if (true === SearchPos.UpdatePos) {
|
|
SearchPos.Pos.Update(CurPos, Depth);
|
|
}
|
|
if (true === SearchPos.Found) {
|
|
return;
|
|
}
|
|
CurPos++;
|
|
var Count = this.Content.length;
|
|
while (CurPos < Count) {
|
|
var OldUpdatePos = SearchPos.UpdatePos;
|
|
this.Content[CurPos].Get_WordEndPos(SearchPos, ContentPos, Depth + 1, false, StepEnd);
|
|
if (true === SearchPos.UpdatePos) {
|
|
SearchPos.Pos.Update(CurPos, Depth);
|
|
} else {
|
|
SearchPos.UpdatePos = OldUpdatePos;
|
|
}
|
|
if (true === SearchPos.Found) {
|
|
return;
|
|
}
|
|
CurPos++;
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Get_EndRangePos = function (_CurLine, _CurRange, SearchPos, Depth) {
|
|
var CurLine = _CurLine - this.StartLine;
|
|
var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange);
|
|
var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
|
|
if (EndPos >= this.Content.length || EndPos < 0) {
|
|
return false;
|
|
}
|
|
var Result = this.Content[EndPos].Get_EndRangePos(_CurLine, _CurRange, SearchPos, Depth + 1);
|
|
if (true === Result) {
|
|
SearchPos.Pos.Update(EndPos, Depth);
|
|
}
|
|
return Result;
|
|
};
|
|
ParaHyperlink.prototype.Get_StartRangePos = function (_CurLine, _CurRange, SearchPos, Depth) {
|
|
var CurLine = _CurLine - this.StartLine;
|
|
var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange);
|
|
var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
|
|
if (StartPos >= this.Content.length || StartPos < 0) {
|
|
return false;
|
|
}
|
|
var Result = this.Content[StartPos].Get_StartRangePos(_CurLine, _CurRange, SearchPos, Depth + 1);
|
|
if (true === Result) {
|
|
SearchPos.Pos.Update(StartPos, Depth);
|
|
}
|
|
return Result;
|
|
};
|
|
ParaHyperlink.prototype.Get_StartRangePos2 = function (_CurLine, _CurRange, ContentPos, Depth) {
|
|
var CurLine = _CurLine - this.StartLine;
|
|
var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange);
|
|
var Pos = this.protected_GetRangeStartPos(CurLine, CurRange);
|
|
ContentPos.Update(Pos, Depth);
|
|
this.Content[Pos].Get_StartRangePos2(_CurLine, _CurRange, ContentPos, Depth + 1);
|
|
};
|
|
ParaHyperlink.prototype.Get_StartPos = function (ContentPos, Depth) {
|
|
if (this.Content.length > 0) {
|
|
ContentPos.Update(0, Depth);
|
|
this.Content[0].Get_StartPos(ContentPos, Depth + 1);
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Get_EndPos = function (BehindEnd, ContentPos, Depth) {
|
|
var ContentLen = this.Content.length;
|
|
if (ContentLen > 0) {
|
|
ContentPos.Update(ContentLen - 1, Depth);
|
|
this.Content[ContentLen - 1].Get_EndPos(BehindEnd, ContentPos, Depth + 1);
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Set_SelectionContentPos = function (StartContentPos, EndContentPos, Depth, StartFlag, EndFlag) {
|
|
var Selection = this.Selection;
|
|
var OldStartPos = Selection.StartPos;
|
|
var OldEndPos = Selection.EndPos;
|
|
if (OldStartPos > OldEndPos) {
|
|
OldStartPos = Selection.EndPos;
|
|
OldEndPos = Selection.StartPos;
|
|
}
|
|
var StartPos = 0;
|
|
switch (StartFlag) {
|
|
case 1:
|
|
StartPos = 0;
|
|
break;
|
|
case -1:
|
|
StartPos = this.Content.length - 1;
|
|
break;
|
|
case 0:
|
|
StartPos = StartContentPos.Get(Depth);
|
|
break;
|
|
}
|
|
var EndPos = 0;
|
|
switch (EndFlag) {
|
|
case 1:
|
|
EndPos = 0;
|
|
break;
|
|
case -1:
|
|
EndPos = this.Content.length - 1;
|
|
break;
|
|
case 0:
|
|
EndPos = EndContentPos.Get(Depth);
|
|
break;
|
|
}
|
|
if (OldStartPos < StartPos && OldStartPos < EndPos) {
|
|
var TempLimit = Math.min(StartPos, EndPos);
|
|
for (var CurPos = OldStartPos; CurPos < TempLimit; CurPos++) {
|
|
this.Content[CurPos].Selection_Remove();
|
|
}
|
|
}
|
|
if (OldEndPos > StartPos && OldEndPos > EndPos) {
|
|
var TempLimit = Math.max(StartPos, EndPos);
|
|
for (var CurPos = TempLimit + 1; CurPos <= OldEndPos; CurPos++) {
|
|
this.Content[CurPos].Selection_Remove();
|
|
}
|
|
}
|
|
Selection.Use = true;
|
|
Selection.StartPos = StartPos;
|
|
Selection.EndPos = EndPos;
|
|
if (StartPos != EndPos) {
|
|
this.Content[StartPos].Set_SelectionContentPos(StartContentPos, null, Depth + 1, StartFlag, StartPos > EndPos ? 1 : -1);
|
|
this.Content[EndPos].Set_SelectionContentPos(null, EndContentPos, Depth + 1, StartPos > EndPos ? -1 : 1, EndFlag);
|
|
var _StartPos = StartPos;
|
|
var _EndPos = EndPos;
|
|
var Direction = 1;
|
|
if (_StartPos > _EndPos) {
|
|
_StartPos = EndPos;
|
|
_EndPos = StartPos;
|
|
Direction = -1;
|
|
}
|
|
for (var CurPos = _StartPos + 1; CurPos < _EndPos; CurPos++) {
|
|
this.Content[CurPos].Select_All(Direction);
|
|
}
|
|
} else {
|
|
this.Content[StartPos].Set_SelectionContentPos(StartContentPos, EndContentPos, Depth + 1, StartFlag, EndFlag);
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Selection_IsUse = function () {
|
|
return this.State.Selection.Use;
|
|
};
|
|
ParaHyperlink.prototype.Selection_Stop = function () {};
|
|
ParaHyperlink.prototype.Selection_Remove = function () {
|
|
var Selection = this.Selection;
|
|
if (true === Selection.Use) {
|
|
var StartPos = Selection.StartPos;
|
|
var EndPos = Selection.EndPos;
|
|
if (StartPos > EndPos) {
|
|
StartPos = Selection.EndPos;
|
|
EndPos = Selection.StartPos;
|
|
}
|
|
StartPos = Math.max(0, StartPos);
|
|
EndPos = Math.min(this.Content.length - 1, EndPos);
|
|
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++) {
|
|
this.Content[CurPos].Selection_Remove();
|
|
}
|
|
}
|
|
Selection.Use = false;
|
|
Selection.StartPos = 0;
|
|
Selection.EndPos = 0;
|
|
};
|
|
ParaHyperlink.prototype.Select_All = function (Direction) {
|
|
var ContentLen = this.Content.length;
|
|
var Selection = this.Selection;
|
|
Selection.Use = true;
|
|
if (-1 === Direction) {
|
|
Selection.StartPos = ContentLen - 1;
|
|
Selection.EndPos = 0;
|
|
} else {
|
|
Selection.StartPos = 0;
|
|
Selection.EndPos = ContentLen - 1;
|
|
}
|
|
for (var CurPos = 0; CurPos < ContentLen; CurPos++) {
|
|
this.Content[CurPos].Select_All(Direction);
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Selection_DrawRange = function (_CurLine, _CurRange, SelectionDraw) {
|
|
var CurLine = _CurLine - this.StartLine;
|
|
var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange);
|
|
var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
|
|
var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
|
|
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++) {
|
|
this.Content[CurPos].Selection_DrawRange(_CurLine, _CurRange, SelectionDraw);
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Selection_IsEmpty = function (CheckEnd) {
|
|
var StartPos = this.State.Selection.StartPos;
|
|
var EndPos = this.State.Selection.EndPos;
|
|
if (StartPos > EndPos) {
|
|
StartPos = this.State.Selection.EndPos;
|
|
EndPos = this.State.Selection.StartPos;
|
|
}
|
|
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++) {
|
|
if (false === this.Content[CurPos].Selection_IsEmpty(CheckEnd)) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
ParaHyperlink.prototype.Selection_CheckParaEnd = function () {
|
|
return false;
|
|
};
|
|
ParaHyperlink.prototype.Selection_CheckParaContentPos = function (ContentPos, Depth, bStart, bEnd) {
|
|
var CurPos = ContentPos.Get(Depth);
|
|
if (this.Selection.StartPos <= CurPos && CurPos <= this.Selection.EndPos) {
|
|
return this.Content[CurPos].Selection_CheckParaContentPos(ContentPos, Depth + 1, bStart && this.Selection.StartPos === CurPos, bEnd && CurPos === this.Selection.EndPos);
|
|
} else {
|
|
if (this.Selection.EndPos <= CurPos && CurPos <= this.Selection.StartPos) {
|
|
return this.Content[CurPos].Selection_CheckParaContentPos(ContentPos, Depth + 1, bStart && this.Selection.EndPos === CurPos, bEnd && CurPos === this.Selection.StartPos);
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
ParaHyperlink.prototype.Is_SelectedAll = function (Props) {
|
|
var Selection = this.State.Selection;
|
|
if (false === Selection.Use && true !== this.Is_Empty(Props)) {
|
|
return false;
|
|
}
|
|
var StartPos = Selection.StartPos;
|
|
var EndPos = Selection.EndPos;
|
|
if (EndPos < StartPos) {
|
|
StartPos = Selection.EndPos;
|
|
EndPos = Selection.StartPos;
|
|
}
|
|
for (var Pos = 0; Pos <= StartPos; Pos++) {
|
|
if (false === this.Content[Pos].Is_SelectedAll(Props)) {
|
|
return false;
|
|
}
|
|
}
|
|
var Count = this.Content.length;
|
|
for (var Pos = EndPos; Pos < Count; Pos++) {
|
|
if (false === this.Content[Pos].Is_SelectedAll(Props)) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
ParaHyperlink.prototype.Selection_CorrectLeftPos = function (Direction) {
|
|
if (false === this.Selection.Use || true === this.Is_Empty({
|
|
SkipAnchor: true
|
|
})) {
|
|
return true;
|
|
}
|
|
var Selection = this.State.Selection;
|
|
var StartPos = Math.min(Selection.StartPos, Selection.EndPos);
|
|
var EndPos = Math.max(Selection.StartPos, Selection.EndPos);
|
|
for (var Pos = 0; Pos < StartPos; Pos++) {
|
|
if (true !== this.Content[Pos].Is_Empty({
|
|
SkipAnchor: true
|
|
})) {
|
|
return false;
|
|
}
|
|
}
|
|
for (var Pos = StartPos; Pos <= EndPos; Pos++) {
|
|
if (true === this.Content[Pos].Selection_CorrectLeftPos(Direction)) {
|
|
if (1 === Direction) {
|
|
this.Selection.StartPos = Pos + 1;
|
|
} else {
|
|
this.Selection.EndPos = Pos + 1;
|
|
}
|
|
this.Content[Pos].Selection_Remove();
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
ParaHyperlink.prototype.Get_Text = function (Text) {
|
|
var ContentLen = this.Content.length;
|
|
for (var CurPos = 0; CurPos < ContentLen; CurPos++) {
|
|
this.Content[CurPos].Get_Text(Text);
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Set_Visited = function (Value) {
|
|
this.Visited = Value;
|
|
};
|
|
ParaHyperlink.prototype.Get_Visited = function () {
|
|
return this.Visited;
|
|
};
|
|
ParaHyperlink.prototype.Set_ToolTip = function (ToolTip) {
|
|
History.Add(this, {
|
|
Type: historyitem_Hyperlink_ToolTip,
|
|
New: ToolTip,
|
|
Old: this.ToolTip
|
|
});
|
|
this.ToolTip = ToolTip;
|
|
};
|
|
ParaHyperlink.prototype.Get_ToolTip = function () {
|
|
if (null === this.ToolTip) {
|
|
if ("string" === typeof(this.Value)) {
|
|
return this.Value;
|
|
} else {
|
|
return "";
|
|
}
|
|
} else {
|
|
return this.ToolTip;
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Get_Value = function () {
|
|
return this.Value;
|
|
};
|
|
ParaHyperlink.prototype.Set_Value = function (Value) {
|
|
History.Add(this, {
|
|
Type: historyitem_Hyperlink_Value,
|
|
New: Value,
|
|
Old: this.Value
|
|
});
|
|
this.Value = Value;
|
|
};
|
|
ParaHyperlink.prototype.Undo = function (Data) {
|
|
var Type = Data.Type;
|
|
switch (Type) {
|
|
case historyitem_Hyperlink_AddItem:
|
|
this.Content.splice(Data.Pos, Data.EndPos - Data.Pos + 1);
|
|
this.protected_UpdateSpellChecking();
|
|
break;
|
|
case historyitem_Hyperlink_RemoveItem:
|
|
var Pos = Data.Pos;
|
|
var Array_start = this.Content.slice(0, Pos);
|
|
var Array_end = this.Content.slice(Pos);
|
|
this.Content = Array_start.concat(Data.Items, Array_end);
|
|
this.protected_UpdateSpellChecking();
|
|
break;
|
|
case historyitem_Hyperlink_Value:
|
|
this.Value = Data.Old;
|
|
break;
|
|
case historyitem_Hyperlink_ToolTip:
|
|
this.ToolTip = Data.Old;
|
|
break;
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Redo = function (Data) {
|
|
var Type = Data.Type;
|
|
switch (Type) {
|
|
case historyitem_Hyperlink_AddItem:
|
|
var Pos = Data.Pos;
|
|
var Array_start = this.Content.slice(0, Pos);
|
|
var Array_end = this.Content.slice(Pos);
|
|
this.Content = Array_start.concat(Data.Items, Array_end);
|
|
this.protected_UpdateSpellChecking();
|
|
break;
|
|
case historyitem_Hyperlink_RemoveItem:
|
|
this.Content.splice(Data.Pos, Data.EndPos - Data.Pos + 1);
|
|
this.protected_UpdateSpellChecking();
|
|
break;
|
|
case historyitem_Hyperlink_Value:
|
|
this.Value = Data.New;
|
|
break;
|
|
case historyitem_Hyperlink_ToolTip:
|
|
this.ToolTip = Data.New;
|
|
break;
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Save_Changes = function (Data, Writer) {
|
|
Writer.WriteLong(historyitem_type_Hyperlink);
|
|
var Type = Data.Type;
|
|
Writer.WriteLong(Type);
|
|
switch (Type) {
|
|
case historyitem_Hyperlink_AddItem:
|
|
var bArray = Data.UseArray;
|
|
var Count = Data.Items.length;
|
|
Writer.WriteLong(Count);
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
if (true === bArray) {
|
|
Writer.WriteLong(Data.PosArray[Index]);
|
|
} else {
|
|
Writer.WriteLong(Data.Pos + Index);
|
|
}
|
|
Writer.WriteString2(Data.Items[Index].Get_Id());
|
|
}
|
|
break;
|
|
case historyitem_Hyperlink_RemoveItem:
|
|
var bArray = Data.UseArray;
|
|
var Count = Data.Items.length;
|
|
var StartPos = Writer.GetCurPosition();
|
|
Writer.Skip(4);
|
|
var RealCount = Count;
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
if (true === bArray) {
|
|
if (false === Data.PosArray[Index]) {
|
|
RealCount--;
|
|
} else {
|
|
Writer.WriteLong(Data.PosArray[Index]);
|
|
}
|
|
} else {
|
|
Writer.WriteLong(Data.Pos);
|
|
}
|
|
}
|
|
var EndPos = Writer.GetCurPosition();
|
|
Writer.Seek(StartPos);
|
|
Writer.WriteLong(RealCount);
|
|
Writer.Seek(EndPos);
|
|
break;
|
|
case historyitem_Hyperlink_Value:
|
|
Writer.WriteString2(Data.New);
|
|
break;
|
|
case historyitem_Hyperlink_ToolTip:
|
|
Writer.WriteString2(Data.New);
|
|
break;
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Load_Changes = function (Reader) {
|
|
var ClassType = Reader.GetLong();
|
|
if (historyitem_type_Hyperlink != ClassType) {
|
|
return;
|
|
}
|
|
var Type = Reader.GetLong();
|
|
switch (Type) {
|
|
case historyitem_Hyperlink_AddItem:
|
|
var Count = Reader.GetLong();
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
var Pos = this.m_oContentChanges.Check(contentchanges_Add, Reader.GetLong());
|
|
var Element = g_oTableId.Get_ById(Reader.GetString2());
|
|
if (null != Element) {
|
|
this.Content.splice(Pos, 0, Element);
|
|
}
|
|
}
|
|
this.protected_UpdateSpellChecking();
|
|
break;
|
|
case historyitem_Hyperlink_RemoveItem:
|
|
var Count = Reader.GetLong();
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
var ChangesPos = this.m_oContentChanges.Check(contentchanges_Remove, Reader.GetLong());
|
|
if (false === ChangesPos) {
|
|
continue;
|
|
}
|
|
this.Content.splice(ChangesPos, 1);
|
|
}
|
|
this.protected_UpdateSpellChecking();
|
|
break;
|
|
case historyitem_Hyperlink_Value:
|
|
this.Value = Reader.GetString2();
|
|
break;
|
|
case historyitem_Hyperlink_ToolTip:
|
|
this.ToolTip = Reader.GetString2();
|
|
break;
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Write_ToBinary2 = function (Writer) {
|
|
Writer.WriteLong(historyitem_type_Hyperlink);
|
|
Writer.WriteString2(this.Id);
|
|
if (! (editor && editor.isDocumentEditor)) {
|
|
this.Write_ToBinary2SpreadSheets(Writer);
|
|
return;
|
|
}
|
|
Writer.WriteString2(this.Value);
|
|
Writer.WriteString2(this.ToolTip);
|
|
var Count = this.Content.length;
|
|
Writer.WriteLong(Count);
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
Writer.WriteString2(this.Content[Index].Get_Id());
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Read_FromBinary2 = function (Reader) {
|
|
this.Id = Reader.GetString2();
|
|
this.Value = Reader.GetString2();
|
|
this.ToolTip = Reader.GetString2();
|
|
var Count = Reader.GetLong();
|
|
this.Content = [];
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
var Element = g_oTableId.Get_ById(Reader.GetString2());
|
|
if (null !== Element) {
|
|
this.Content.push(Element);
|
|
}
|
|
}
|
|
};
|
|
ParaHyperlink.prototype.Write_ToBinary2SpreadSheets = function (Writer) {
|
|
Writer.WriteString2("");
|
|
Writer.WriteString2("");
|
|
Writer.WriteLong(0);
|
|
};
|
|
ParaHyperlink.prototype.Document_UpdateInterfaceState = function () {
|
|
var HyperText = new CParagraphGetText();
|
|
this.Get_Text(HyperText);
|
|
var HyperProps = new CHyperlinkProperty(this);
|
|
HyperProps.put_Text(HyperText.Text);
|
|
editor.sync_HyperlinkPropCallback(HyperProps);
|
|
if (true === this.Selection.Use) {
|
|
var StartPos = this.Selection.StartPos;
|
|
var EndPos = this.Selection.EndPos;
|
|
if (StartPos > EndPos) {
|
|
StartPos = this.Selection.EndPos;
|
|
EndPos = this.Selection.StartPos;
|
|
}
|
|
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++) {
|
|
var Element = this.Content[CurPos];
|
|
if (true !== Element.Selection_IsEmpty() && (para_Hyperlink === Element.Type || para_Math === Element.Type)) {
|
|
Element.Document_UpdateInterfaceState();
|
|
}
|
|
}
|
|
} else {
|
|
var CurType = this.Content[this.State.ContentPos].Type;
|
|
if (para_Hyperlink === CurType || para_Math === CurType) {
|
|
this.Content[this.State.ContentPos].Document_UpdateInterfaceState();
|
|
}
|
|
}
|
|
};
|
|
function CParaHyperLinkStartState(HyperLink) {
|
|
this.Value = HyperLink.Value;
|
|
this.ToolTip = HyperLink.ToolTip;
|
|
this.Content = [];
|
|
for (var i = 0; i < HyperLink.Content.length; ++i) {
|
|
this.Content.push(HyperLink.Content);
|
|
}
|
|
} |