DocumentServer/OfficeWeb/sdk/Word/Editor/Hyperlink.js
2015-04-28 17:59:00 +03:00

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);
}
}