Files
Yajbir Singh f1b860b25c
Some checks failed
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

1443 lines
43 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* (c) Copyright Ascensio System SIA 2010-2025
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
var section_borders_DisplayAllPages = 0x00;
var section_borders_DisplayFirstPage = 0x01;
var section_borders_DisplayNotFirstPage = 0x02;
var section_borders_OffsetFromPage = 0x00;
var section_borders_OffsetFromText = 0x01;
var section_borders_ZOrderBack = 0x00;
var section_borders_ZOrderFront = 0x01;
var section_footnote_RestartContinuous = 0x00;
var section_footnote_RestartEachSect = 0x01;
var section_footnote_RestartEachPage = 0x02;
(function()
{
/**
* @param {AscWord.Document} logicDocument
* @constructor
*/
function SectPr(logicDocument)
{
this.Id = AscCommon.g_oIdCounter.Get_NewId();
this.Type = Asc.c_oAscSectionBreakType.NextPage;
this.PageSize = new AscWord.SectionPageSize();
this.PageMargins = new AscWord.SectionPageMargins();
this.LogicDocument = logicDocument;
this.Borders = new AscWord.SectionPageBorders();
this.PageNumType = new AscWord.SectionPageNumType();
this.FooterFirst = null;
this.FooterEven = null;
this.FooterDefault = null;
this.HeaderFirst = null;
this.HeaderEven = null;
this.HeaderDefault = null;
this.TitlePage = false;
this.GutterRTL = false;
this.Columns = new AscWord.SectionColumns(this);
this.FootnotePr = new AscWord.FootnotePr();
this.EndnotePr = new AscWord.FootnotePr();
this.LnNumType = undefined;
// Добавляем данный класс в таблицу Id (обязательно в конце конструктора)
AscCommon.g_oTableId.Add(this, this.Id);
this.CheckPageNumSymbols();
}
SectPr.prototype.Get_Id = function()
{
return this.Id;
};
SectPr.prototype.Copy = function(Other, CopyHdrFtr, oCopyPr)
{
if (!Other)
return;
// Тип
this.Set_Type(Other.Type);
// Настройки страницы
this.SetPageSize(Other.PageSize.W, Other.PageSize.H);
this.SetOrientation(Other.PageSize.Orient, false);
// Настройки отступов
this.SetPageMargins(Other.PageMargins.Left, Other.PageMargins.Top, Other.PageMargins.Right, Other.PageMargins.Bottom);
this.SetGutter(Other.PageMargins.Gutter);
// Настройки границ
this.Set_Borders_Left(Other.Borders.Left);
this.Set_Borders_Top(Other.Borders.Top);
this.Set_Borders_Right(Other.Borders.Right);
this.Set_Borders_Bottom(Other.Borders.Bottom);
this.Set_Borders_Display(Other.Borders.Display);
this.SetBordersOffsetFrom(Other.Borders.OffsetFrom);
this.Set_Borders_ZOrder(Other.Borders.ZOrder);
this.Set_TitlePage(Other.TitlePage);
this.SetGutterRTL(Other.GutterRTL);
// Колонтитулы
if (true === CopyHdrFtr)
{
if (Other.HeaderFirst)
this.Set_Header_First(Other.HeaderFirst.Copy(this.LogicDocument, oCopyPr));
else
this.Set_Header_First(null);
if (Other.HeaderEven)
this.Set_Header_Even(Other.HeaderEven.Copy(this.LogicDocument, oCopyPr));
else
this.Set_Header_Even(null);
if (Other.HeaderDefault)
this.Set_Header_Default(Other.HeaderDefault.Copy(this.LogicDocument, oCopyPr));
else
this.Set_Header_Default(null);
if (Other.FooterFirst)
this.Set_Footer_First(Other.FooterFirst.Copy(this.LogicDocument, oCopyPr));
else
this.Set_Footer_First(null);
if (Other.FooterEven)
this.Set_Footer_Even(Other.FooterEven.Copy(this.LogicDocument, oCopyPr));
else
this.Set_Footer_Even(null);
if (Other.FooterDefault)
this.Set_Footer_Default(Other.FooterDefault.Copy(this.LogicDocument, oCopyPr));
else
this.Set_Footer_Default(null);
}
else
{
this.Set_Header_First(Other.HeaderFirst);
this.Set_Header_Even(Other.HeaderEven);
this.Set_Header_Default(Other.HeaderDefault);
this.Set_Footer_First(Other.FooterFirst);
this.Set_Footer_Even(Other.FooterEven);
this.Set_Footer_Default(Other.FooterDefault);
}
this.SetPageNumStart(Other.PageNumType.Start);
this.SetPageNumFormat(Other.PageNumType.Format);
this.SetPageNumChapStyle(Other.PageNumType.ChapStyle);
this.SetPageNumChapSep(Other.PageNumType.ChapSep);
this.Set_Columns_EqualWidth(Other.Columns.EqualWidth);
this.Set_Columns_Num(Other.Columns.Num);
this.Set_Columns_Sep(Other.Columns.Sep);
this.Set_Columns_Space(Other.Columns.Space);
let columns = [];
for (let columnIndex = 0, columnCount = Other.Columns.Cols.length; columnIndex < columnCount; ++columnIndex)
{
let column = Other.Columns.Cols[columnIndex];
columns.push(new AscWord.SectionColumn(column.W, column.Space));
}
this.Set_Columns_Cols(columns);
this.SetFootnotePos(Other.FootnotePr.Pos);
this.SetFootnoteNumStart(Other.FootnotePr.NumStart);
this.SetFootnoteNumRestart(Other.FootnotePr.NumRestart);
this.SetFootnoteNumFormat(Other.FootnotePr.NumFormat);
if (Other.HaveLineNumbers())
this.SetLineNumbers(Other.GetLineNumbersCountBy(), Other.GetLineNumbersDistance(), Other.GetLineNumbersStart(), Other.GetLineNumbersRestart());
};
SectPr.prototype.Clear_AllHdrFtr = function()
{
this.Set_Header_First(null);
this.Set_Header_Even(null);
this.Set_Header_Default(null);
this.Set_Footer_First(null);
this.Set_Footer_Even(null);
this.Set_Footer_Default(null);
};
SectPr.prototype.GetAllHdrFtrs = function(HdrFtrs)
{
if (!HdrFtrs)
HdrFtrs = [];
if (null !== this.HeaderFirst) HdrFtrs.push(this.HeaderFirst);
if (null !== this.HeaderEven) HdrFtrs.push(this.HeaderEven);
if (null !== this.HeaderDefault) HdrFtrs.push(this.HeaderDefault);
if (null !== this.FooterFirst) HdrFtrs.push(this.FooterFirst);
if (null !== this.FooterEven) HdrFtrs.push(this.FooterEven);
if (null !== this.FooterDefault) HdrFtrs.push(this.FooterDefault);
return HdrFtrs;
};
SectPr.prototype.RemoveEmptyHdrFtrs = function()
{
function IsEmpty(oHeader)
{
return (oHeader && oHeader.GetContent().GetElementsCount() <= 0);
}
if (IsEmpty(this.HeaderFirst))
this.Set_Header_First(null);
if (IsEmpty(this.HeaderEven))
this.Set_Header_Even(null);
if (IsEmpty(this.HeaderDefault))
this.Set_Header_Default(null);
if (IsEmpty(this.FooterFirst))
this.Set_Footer_First(null);
if (IsEmpty(this.FooterEven))
this.Set_Footer_Even(null);
if (IsEmpty(this.FooterDefault))
this.Set_Footer_Default(null);
};
SectPr.prototype.Compare_PageSize = function(OtherSectPr)
{
var ThisPS = this.PageSize;
var OtherPS = OtherSectPr.PageSize;
if (Math.abs(ThisPS.W - OtherPS.W) > 0.001 || Math.abs(ThisPS.H - OtherPS.H) > 0.001 || ThisPS.Orient !== OtherPS.Orient)
return false;
return true;
};
SectPr.prototype.Set_Type = function(Type)
{
if (this.Type !== Type)
{
AscCommon.History.Add(new AscDFH.CChangesSectionType(this, this.Type, Type));
this.Type = Type;
}
};
SectPr.prototype.Get_Type = function()
{
return this.Type;
};
SectPr.prototype.Set_Borders_Left = function(Border)
{
if (true !== this.Borders.Left.Compare(Border))
{
AscCommon.History.Add(new AscDFH.CChangesSectionBordersLeft(this, this.Borders.Left, Border));
this.Borders.Left = Border;
}
};
SectPr.prototype.Get_Borders_Left = function()
{
return this.Borders.Left;
};
SectPr.prototype.Set_Borders_Top = function(Border)
{
if (true !== this.Borders.Top.Compare(Border))
{
AscCommon.History.Add(new AscDFH.CChangesSectionBordersTop(this, this.Borders.Top, Border));
this.Borders.Top = Border;
}
};
SectPr.prototype.Get_Borders_Top = function()
{
return this.Borders.Top;
};
SectPr.prototype.Set_Borders_Right = function(Border)
{
if (true !== this.Borders.Right.Compare(Border))
{
AscCommon.History.Add(new AscDFH.CChangesSectionBordersRight(this, this.Borders.Right, Border));
this.Borders.Right = Border;
}
};
SectPr.prototype.Get_Borders_Right = function()
{
return this.Borders.Right;
};
SectPr.prototype.Set_Borders_Bottom = function(Border)
{
if (true !== this.Borders.Bottom.Compare(Border))
{
AscCommon.History.Add(new AscDFH.CChangesSectionBordersBottom(this, this.Borders.Bottom, Border));
this.Borders.Bottom = Border;
}
};
SectPr.prototype.Get_Borders_Bottom = function()
{
return this.Borders.Bottom;
};
SectPr.prototype.Set_Borders_Display = function(Display)
{
if (Display !== this.Borders.Display)
{
AscCommon.History.Add(new AscDFH.CChangesSectionBordersDisplay(this, this.Borders.Display, Display));
this.Borders.Display = Display;
}
};
SectPr.prototype.Get_Borders_Display = function()
{
return this.Borders.Display;
};
SectPr.prototype.Set_Borders_ZOrder = function(ZOrder)
{
if (ZOrder !== this.Borders.ZOrder)
{
AscCommon.History.Add(new AscDFH.CChangesSectionBordersZOrder(this, this.Borders.ZOrder, ZOrder));
this.Borders.ZOrder = ZOrder;
}
};
SectPr.prototype.Get_Borders_ZOrder = function()
{
return this.Borders.ZOrder;
};
SectPr.prototype.Set_Footer_First = function(Footer)
{
if (Footer !== this.FooterFirst)
{
AscCommon.History.Add(new AscDFH.CChangesSectionFooterFirst(this, this.FooterFirst, Footer));
this.FooterFirst = Footer;
}
};
SectPr.prototype.Get_Footer_First = function()
{
return this.FooterFirst;
};
SectPr.prototype.Set_Footer_Even = function(Footer)
{
if (Footer !== this.FooterEven)
{
AscCommon.History.Add(new AscDFH.CChangesSectionFooterEven(this, this.FooterEven, Footer));
this.FooterEven = Footer;
}
};
SectPr.prototype.Get_Footer_Even = function()
{
return this.FooterEven;
};
SectPr.prototype.Set_Footer_Default = function(Footer)
{
if (Footer !== this.FooterDefault)
{
AscCommon.History.Add(new AscDFH.CChangesSectionFooterDefault(this, this.FooterDefault, Footer));
this.FooterDefault = Footer;
}
};
SectPr.prototype.Get_Footer_Default = function()
{
return this.FooterDefault;
};
SectPr.prototype.Set_Header_First = function(Header)
{
if (Header !== this.HeaderFirst)
{
AscCommon.History.Add(new AscDFH.CChangesSectionHeaderFirst(this, this.HeaderFirst, Header));
this.HeaderFirst = Header;
}
};
SectPr.prototype.Get_Header_First = function()
{
return this.HeaderFirst;
};
SectPr.prototype.Set_Header_Even = function(Header)
{
if (Header !== this.HeaderEven)
{
AscCommon.History.Add(new AscDFH.CChangesSectionHeaderEven(this, this.HeaderEven, Header));
this.HeaderEven = Header;
}
};
SectPr.prototype.Get_Header_Even = function()
{
return this.HeaderEven;
};
SectPr.prototype.Set_Header_Default = function(Header)
{
if (Header !== this.HeaderDefault)
{
AscCommon.History.Add(new AscDFH.CChangesSectionHeaderDefault(this, this.HeaderDefault, Header));
this.HeaderDefault = Header;
}
};
SectPr.prototype.Get_Header_Default = function()
{
return this.HeaderDefault;
};
SectPr.prototype.Set_TitlePage = function(Value)
{
if (Value !== this.TitlePage)
{
AscCommon.History.Add(new AscDFH.CChangesSectionTitlePage(this, this.TitlePage, Value));
this.TitlePage = Value;
}
};
SectPr.prototype.Get_TitlePage = function()
{
return this.TitlePage;
};
SectPr.prototype.IsTitlePage = function()
{
return this.TitlePage;
};
SectPr.prototype.IsEvenAndOdd = function()
{
return EvenAndOddHeaders;
};
SectPr.prototype.GetHdrFtr = function(bHeader, bFirst, bEven)
{
if (true === bHeader)
{
if (true === bFirst)
return this.HeaderFirst;
else if (true === bEven)
return this.HeaderEven;
else
return this.HeaderDefault;
}
else
{
if (true === bFirst)
return this.FooterFirst;
else if (true === bEven)
return this.FooterEven;
else
return this.FooterDefault;
}
};
SectPr.prototype.Set_HdrFtr = function(bHeader, bFirst, bEven, HdrFtr)
{
if (true === bHeader)
{
if (true === bFirst)
return this.Set_Header_First(HdrFtr);
else if (true === bEven)
return this.Set_Header_Even(HdrFtr);
else
return this.Set_Header_Default(HdrFtr);
}
else
{
if (true === bFirst)
return this.Set_Footer_First(HdrFtr);
else if (true === bEven)
return this.Set_Footer_Even(HdrFtr);
else
return this.Set_Footer_Default(HdrFtr);
}
};
SectPr.prototype.GetHdrFtrInfo = function(HdrFtr)
{
if (HdrFtr === this.HeaderFirst)
return {Header : true, First : true, Even : false};
else if (HdrFtr === this.HeaderEven)
return {Header : true, First : false, Even : true};
else if (HdrFtr === this.HeaderDefault)
return {Header : true, First : false, Even : false};
else if (HdrFtr === this.FooterFirst)
return {Header : false, First : true, Even : false};
else if (HdrFtr === this.FooterEven)
return {Header : false, First : false, Even : true};
else if (HdrFtr === this.FooterDefault)
return {Header : false, First : false, Even : false};
return null;
};
SectPr.prototype.IsDefaultPageNum = function()
{
return (-1 === this.PageNumType.Start
&& Asc.c_oAscNumberingFormat.Decimal === this.PageNumType.Format
&& undefined === this.PageNumType.ChapStyle
&& undefined === this.PageNumType.ChapSep);
};
SectPr.prototype.SetPageNumStart = function(Start)
{
if (Start !== this.PageNumType.Start)
{
AscCommon.History.Add(new AscDFH.CChangesSectionPageNumTypeStart(this, this.PageNumType.Start, Start));
this.PageNumType.Start = Start;
}
};
SectPr.prototype.GetPageNumStart = function()
{
return this.PageNumType.Start;
};
SectPr.prototype.SetPageNumFormat = function(format)
{
if (format === this.PageNumType.Format)
return;
AscCommon.History.Add(new AscDFH.CChangesSectionPageNumTypeFormat(this, this.PageNumType.Format, format));
this.PageNumType.Format = format;
this.CheckPageNumSymbols();
};
SectPr.prototype.GetPageNumFormat = function()
{
return this.PageNumType.Format;
};
SectPr.prototype.SetPageNumChapStyle = function(chapStyle)
{
if (chapStyle === this.PageNumType.ChapStyle)
return;
AscCommon.History.Add(new AscDFH.CChangesSectionPageNumTypeChapStyle(this, this.PageNumType.ChapStyle, chapStyle));
this.PageNumType.ChapStyle = chapStyle;
};
SectPr.prototype.GetPageNumChapStyle = function()
{
return this.PageNumType.ChapStyle;
};
SectPr.prototype.SetPageNumChapSep = function(chapSep)
{
if (chapSep === this.PageNumType.ChapSep)
return;
AscCommon.History.Add(new AscDFH.CChangesSectionPageNumTypeChapSep(this, this.PageNumType.ChapSep, chapSep));
this.PageNumType.ChapSep = chapSep;
};
SectPr.prototype.GetPageNumChapSep = function()
{
return this.PageNumType.ChapSep;
};
SectPr.prototype.Get_ColumnWidth = function(ColIndex)
{
return this.Columns.Get_ColumnWidth(ColIndex);
};
SectPr.prototype.Get_ColumnSpace = function(ColIndex)
{
return this.Columns.Get_ColumnSpace(ColIndex);
};
SectPr.prototype.Get_ColumnsSep = function()
{
return this.Columns.Sep;
};
SectPr.prototype.Set_Columns_EqualWidth = function(Equal)
{
if (Equal !== this.Columns.Equal)
{
AscCommon.History.Add(new AscDFH.CChangesSectionColumnsEqualWidth(this, this.Columns.EqualWidth, Equal));
this.Columns.EqualWidth = Equal;
}
};
SectPr.prototype.Set_Columns_Space = function(Space)
{
if (Space !== this.Columns.Space)
{
AscCommon.History.Add(new AscDFH.CChangesSectionColumnsSpace(this, this.Columns.Space, Space));
this.Columns.Space = Space;
}
};
SectPr.prototype.Set_Columns_Num = function(_Num)
{
var Num = Math.max(_Num, 1);
if (Num !== this.Columns.Num)
{
AscCommon.History.Add(new AscDFH.CChangesSectionColumnsNum(this, this.Columns.Num, Num));
this.Columns.Num = Num;
}
};
SectPr.prototype.SetColumnsNum = function(num)
{
return this.Set_Columns_Num(num);
};
SectPr.prototype.Set_Columns_Sep = function(Sep)
{
if (Sep !== this.Columns.Sep)
{
AscCommon.History.Add(new AscDFH.CChangesSectionColumnsSep(this, this.Columns.Sep, Sep));
this.Columns.Sep = Sep;
}
};
SectPr.prototype.Set_Columns_Cols = function(Cols)
{
AscCommon.History.Add(new AscDFH.CChangesSectionColumnsSetCols(this, this.Columns.Cols, Cols));
this.Columns.Cols = Cols;
};
SectPr.prototype.Set_Columns_Col = function(Index, W, Space)
{
var OldCol = this.Columns.Cols[Index];
if (undefined === OldCol || OldCol.Space !== Space || OldCol.W !== W)
{
var NewCol = new AscWord.SectionColumn();
NewCol.W = W;
NewCol.Space = Space;
AscCommon.History.Add(new AscDFH.CChangesSectionColumnsCol(this, OldCol, NewCol, Index));
this.Columns.Cols[Index] = NewCol;
}
};
SectPr.prototype.Get_LayoutInfo = function()
{
// Получаем информацию о колонках в данной секции
var Margins = this.PageMargins;
var H = this.PageSize.H;
var _W = this.PageSize.W;
var W = _W - Margins.Left - Margins.Right;
// Если так случилось, что правое и левое поля в сумме больше ширины, тогда оставляем для документа 1 см ширины.
if (W < 0)
W = 10;
var Columns = this.Columns;
var Layout = new SectionLayoutInfo(Margins.Left, Margins.Top, _W - Margins.Right, H - Margins.Bottom);
var ColumnsInfo = Layout.Columns;
if (true === Columns.EqualWidth)
{
var Num = Math.max(Columns.Num, 1);
var Space = Columns.Space;
var ColW = (W - Space * (Num - 1)) / Num;
// Если так случилось, что под колонки места не осталось, тогда делаем колонки шириной 0.3 мм, оставшееся
// свободное место распределяем под Space, но если и оставшегося места не осталось, тогда Space делаем 0, а
// колонки пусть выходят за пределы W.
if (ColW < 0)
{
ColW = 0.3;
var __W = W - ColW * Num;
if (_W > 0 && Num > 1)
Space = _W / (Num - 1);
else
Space = 0;
}
var X = Margins.Left;
for (var Pos = 0; Pos < Num; Pos++)
{
var X0 = X;
var X1 = X + ColW;
ColumnsInfo.push(new SectionLayoutColumnInfo(X0, X1));
X += ColW + Space;
}
}
else
{
var Num = Columns.Cols.length;
// Когда задаются колонки неравномерно, то Word плюет на поля, заданные в документе и ориентируется только
// по размеру колонок дальше. (если ни 1 колонка не задана, тогда Word добавляет 1 колонку шириной 17.09 см)
if (Num <= 0)
{
ColumnsInfo.push(new SectionLayoutColumnInfo(Margins.Left, Margins.Left + 170.9));
}
else
{
var X = Margins.Left;
for (var Pos = 0; Pos < Num; Pos++)
{
var Col = this.Columns.Cols[Pos];
var X0 = X;
var X1 = X + Col.W;
ColumnsInfo.push(new SectionLayoutColumnInfo(X0, X1));
X += Col.W + Col.Space;
}
}
}
return Layout;
};
//------------------------------------------------------------------------------------------------------------------
// Undo/Redo функции
//------------------------------------------------------------------------------------------------------------------
SectPr.prototype.Refresh_RecalcData = function(Data)
{
let sectionIndex = this.LogicDocument.SectionsInfo.Find(this);
if (-1 === sectionIndex)
return;
if (AscDFH.historyitem_Section_LnNumType === Data.Type)
{
AscCommon.History.AddLineNumbersToRecalculateData();
return;
}
let logicDocument = this.LogicDocument;
function refreshRecalc(sectionIndex)
{
if (0 === sectionIndex)
{
logicDocument.Refresh_RecalcData2(0, 0);
}
else
{
let paragraph = logicDocument.SectionsInfo.Elements[sectionIndex - 1].Paragraph;
if (paragraph)
{
let nextParagraph = paragraph.GetNextParagraph();
if (nextParagraph)
paragraph = nextParagraph;
paragraph.Refresh_RecalcData2(0);
}
}
}
// Здесь есть 1 исключение: когда мы добавляем колонтитул для первой страницы, может так получиться, что
// у данной секции флаг TitlePage = False, а значит пересчет надо запускать с места, где данный колонтитул
// первый раз начнет использоваться, а не с текущей секции.
if ((AscDFH.historyitem_Section_Header_First === Data.Type || AscDFH.historyitem_Section_Footer_First === Data.Type) && false === this.TitlePage)
{
var bHeader = AscDFH.historyitem_Section_Header_First === Data.Type ? true : false
var SectionsCount = logicDocument.SectionsInfo.GetSectionsCount();
while (sectionIndex < SectionsCount - 1)
{
++sectionIndex;
let sectPr = logicDocument.SectionsInfo.GetSectPrByIndex(sectionIndex);
// Если в следующей секции свой колонтитул, тогда наш добавленный колонтитул вообще ни на что не влияет
if ((true === bHeader && null !== sectPr.Get_Header_First()) || (true !== bHeader && null !== sectPr.Get_Footer_First()))
break;
// Если в следующей секции есть титульная страница, значит мы нашли нужную секцию
if (true === sectPr.Get_TitlePage())
refreshRecalc(sectionIndex);
}
}
else
{
refreshRecalc(sectionIndex);
}
// Дополнительно кроме этого мы должны обновить пересчет в колонтитулах, причем только начиная с данной секции
this.LogicDocument.On_SectionChange(this);
};
//------------------------------------------------------------------------------------------------------------------
// Функции совместного редактирования
//------------------------------------------------------------------------------------------------------------------
SectPr.prototype.Write_ToBinary2 = function(Writer)
{
Writer.WriteLong(AscDFH.historyitem_type_Section);
// String2 : Id
// String2 : Id LogicDocument
// Variable : PageSize
// Variable : PageMargins
// Byte : Type
// Variable : Borders
// Колонтитулы не пишем в бинарник, при создании класса они всегда null, а TitlePage = false
// Variable : PageNumType
// Variable : AscWord.SectionColumns
// Variable : AscWord.FootnotePr
// Bool : GutterRTL
Writer.WriteString2("" + this.Id);
Writer.WriteString2("" + this.LogicDocument.Get_Id());
this.PageSize.Write_ToBinary(Writer);
this.PageMargins.Write_ToBinary(Writer);
Writer.WriteByte(this.Type);
this.Borders.Write_ToBinary(Writer);
this.PageNumType.Write_ToBinary(Writer);
this.Columns.Write_ToBinary(Writer);
this.FootnotePr.WriteToBinary(Writer);
Writer.WriteBool(this.GutterRTL);
};
SectPr.prototype.Read_FromBinary2 = function(Reader)
{
// String2 : Id
// String2 : Id LogicDocument
// Variable : PageSize
// Variable : PageMargins
// Byte : Type
// Variable : Borders
// Колонтитулы не пишем в бинарник, при создании класса они всегда null, а TitlePage = false
// Variable : PageNumType
// Variable : AscWord.SectionColumns
// Variable : AscWord.FootnotePr
// Bool : GutterRTL
this.Id = Reader.GetString2();
this.LogicDocument = AscCommon.g_oTableId.Get_ById(Reader.GetString2());
this.PageSize.Read_FromBinary(Reader);
this.PageMargins.Read_FromBinary(Reader);
this.Type = Reader.GetByte();
this.Borders.Read_FromBinary(Reader);
this.PageNumType.Read_FromBinary(Reader);
this.Columns.Read_FromBinary(Reader);
this.FootnotePr.ReadFromBinary(Reader);
this.GutterRTL = Reader.GetBool();
};
//------------------------------------------------------------------------------------------------------------------
/**
* @returns {string}
*/
SectPr.prototype.GetId = function()
{
return this.Id;
};
SectPr.prototype.SetType = function(type)
{
return this.Set_Type(type);
};
SectPr.prototype.GetType = function()
{
return this.Get_Type();
};
/**
* Проверяем, есть ли хоть один колонтитул в данной секции
* @returns {boolean}
*/
SectPr.prototype.IsAllHdrFtrNull = function()
{
if (null !== this.FooterFirst
|| null !== this.HeaderFirst
|| null !== this.FooterDefault
|| null !== this.HeaderDefault
|| null !== this.FooterEven
|| null !== this.HeaderEven)
return false;
return true;
};
SectPr.prototype.GetFootnotePr = function()
{
return this.FootnotePr;
};
SectPr.prototype.SetFootnotePos = function(nPos)
{
if (this.FootnotePr.Pos !== nPos)
{
AscCommon.History.Add(new AscDFH.CChangesSectionFootnotePos(this, this.FootnotePr.Pos, nPos));
this.FootnotePr.Pos = nPos;
}
};
SectPr.prototype.GetFootnotePos = function()
{
if (undefined === this.FootnotePr.Pos)
return Asc.c_oAscFootnotePos.PageBottom;
return this.FootnotePr.Pos;
};
SectPr.prototype.SetFootnoteNumStart = function(nStart)
{
if (this.FootnotePr.NumStart !== nStart)
{
AscCommon.History.Add(new AscDFH.CChangesSectionFootnoteNumStart(this, this.FootnotePr.NumStart, nStart));
this.FootnotePr.NumStart = nStart;
}
};
SectPr.prototype.GetFootnoteNumStart = function()
{
if (undefined === this.FootnotePr.NumStart)
return 1;
return this.FootnotePr.NumStart;
};
SectPr.prototype.SetFootnoteNumRestart = function(nRestartType)
{
if (this.FootnotePr.NumRestart !== nRestartType)
{
AscCommon.History.Add(new AscDFH.CChangesSectionFootnoteNumRestart(this, this.FootnotePr.NumRestart, nRestartType));
this.FootnotePr.NumRestart = nRestartType;
}
};
SectPr.prototype.GetFootnoteNumRestart = function()
{
if (undefined === this.FootnotePr.NumRestart)
return this.private_GetDocumentWideFootnotePr().NumRestart;
return this.FootnotePr.NumRestart;
};
SectPr.prototype.SetFootnoteNumFormat = function(nFormatType)
{
if (this.FootnotePr.NumFormat !== nFormatType)
{
AscCommon.History.Add(new AscDFH.CChangesSectionFootnoteNumFormat(this, this.FootnotePr.NumFormat, nFormatType));
this.FootnotePr.NumFormat = nFormatType;
}
};
SectPr.prototype.GetFootnoteNumFormat = function()
{
if (undefined === this.FootnotePr.NumFormat)
return this.private_GetDocumentWideFootnotePr().NumFormat;
return this.FootnotePr.NumFormat;
};
SectPr.prototype.private_GetDocumentWideFootnotePr = function()
{
return this.LogicDocument.Footnotes.FootnotePr;
};
/**
* Возвращаем настройки концевых сносок
* @return {AscWord.FootnotePr}
*/
SectPr.prototype.GetEndnotePr = function()
{
return this.EndnotePr;
};
SectPr.prototype.SetEndnotePos = function(nPos)
{
// Pos, заданная в секции не должна использоваться
if (nPos !== this.EndnotePr.Pos)
{
AscCommon.History.Add(new AscDFH.CChangesSectionEndnotePos(this, this.EndnotePr.Pos, nPos));
this.EndnotePr.Pos = nPos;
}
};
SectPr.prototype.GetEndnotePos = function()
{
// Pos, заданная в секции не должна использоваться
return this.EndnotePr.Pos;
};
SectPr.prototype.SetEndnoteNumStart = function(nStart)
{
if (this.EndnotePr.NumStart !== nStart)
{
AscCommon.History.Add(new AscDFH.CChangesSectionEndnoteNumStart(this, this.EndnotePr.NumStart, nStart));
this.EndnotePr.NumStart = nStart;
}
};
SectPr.prototype.GetEndnoteNumStart = function()
{
if (undefined === this.EndnotePr.NumStart)
return 1;
return this.EndnotePr.NumStart;
};
SectPr.prototype.SetEndnoteNumRestart = function(nRestartType)
{
if (this.EndnotePr.NumRestart !== nRestartType)
{
AscCommon.History.Add(new AscDFH.CChangesSectionEndnoteNumRestart(this, this.EndnotePr.NumRestart, nRestartType));
this.EndnotePr.NumRestart = nRestartType;
}
};
SectPr.prototype.GetEndnoteNumRestart = function()
{
if (undefined === this.EndnotePr.NumRestart)
return section_footnote_RestartContinuous;
return this.EndnotePr.NumRestart;
};
SectPr.prototype.SetEndnoteNumFormat = function(nFormatType)
{
if (this.EndnotePr.NumFormat !== nFormatType)
{
AscCommon.History.Add(new AscDFH.CChangesSectionEndnoteNumFormat(this, this.EndnotePr.NumFormat, nFormatType));
this.EndnotePr.NumFormat = nFormatType;
}
};
SectPr.prototype.GetEndnoteNumFormat = function()
{
if (undefined === this.EndnotePr.NumFormat)
return Asc.c_oAscNumberingFormat.LowerRoman;
return this.EndnotePr.NumFormat;
};
SectPr.prototype.private_GetDocumentWideEndnotePr = function()
{
return this.LogicDocument.Endnotes.EndnotePr;
};
SectPr.prototype.SetColumnProps = function(oColumnsProps)
{
var EqualWidth = oColumnsProps.get_EqualWidth();
this.Set_Columns_EqualWidth(oColumnsProps.get_EqualWidth());
if (false === EqualWidth)
{
var X = 0;
var XLimit = this.GetContentFrameWidth();
var Cols = [];
var SectionColumn = null;
var Count = oColumnsProps.get_ColsCount();
for (var Index = 0; Index < Count; ++Index)
{
var Col = oColumnsProps.get_Col(Index);
SectionColumn = new AscWord.SectionColumn();
SectionColumn.W = Col.get_W();
SectionColumn.Space = Col.get_Space();
if (X + SectionColumn.W > XLimit)
{
SectionColumn.W = XLimit - X;
Cols.push(SectionColumn);
X += SectionColumn.W;
break;
}
X += SectionColumn.W;
if (Index != Count - 1)
X += SectionColumn.Space;
Cols.push(SectionColumn);
}
if (SectionColumn && X < XLimit - 0.001)
{
SectionColumn.W += XLimit - X;
}
this.Set_Columns_Cols(Cols);
this.Set_Columns_Num(Count);
}
else
{
this.Set_Columns_Num(oColumnsProps.get_Num());
this.Set_Columns_Space(oColumnsProps.get_Space());
}
this.Set_Columns_Sep(oColumnsProps.get_Sep());
};
SectPr.prototype.IsEqualColumnProps = function(oColumnsProps)
{
if (oColumnsProps.get_Sep() !== this.Get_ColumnsSep() || oColumnsProps.get_EqualWidth() !== this.IsEqualColumnWidth())
return false;
if (this.IsEqualColumnWidth())
{
if (this.GetColumnCount() !== oColumnsProps.get_Num()
|| Math.abs(this.GetColumnSpace() - oColumnsProps.get_Space()) > 0.01763)
return false;
}
else
{
var nColumnsCount = oColumnsProps.get_ColsCount();
if (nColumnsCount !== this.GetColumnCount())
return false;
for (var nIndex = 0; nIndex < nColumnsCount; ++nIndex)
{
var oCol = oColumnsProps.get_Col(nIndex);
if (Math.abs(this.GetColumnWidth(nIndex) - oCol.get_W()) > 0.01763
|| this.GetColumnSpace(nIndex) !== oCol.get_Space())
return false;
}
}
return true;
};
SectPr.prototype.SetGutter = function(nGutter)
{
if (Math.abs(nGutter - this.PageMargins.Gutter) > 0.001)
{
AscCommon.History.Add(new AscDFH.CChangesSectionPageMarginsGutter(this, this.PageMargins.Gutter, nGutter));
this.PageMargins.Gutter = nGutter;
}
};
SectPr.prototype.GetGutter = function()
{
return this.PageMargins.Gutter;
};
SectPr.prototype.SetGutterRTL = function(isRTL)
{
if (isRTL !== this.GutterRTL)
{
AscCommon.History.Add(new AscDFH.CChangesSectionGutterRTL(this, this.GutterRTL, isRTL));
this.GutterRTL = isRTL;
}
};
SectPr.prototype.IsGutterRTL = function()
{
return this.GutterRTL;
};
SectPr.prototype.SetPageMargins = function(_L, _T, _R, _B)
{
// Значения могут прийти как undefined, в этом случае мы поля со значением undefined не меняем
var L = (undefined !== _L ? _L : this.PageMargins.Left);
var T = (undefined !== _T ? _T : this.PageMargins.Top);
var R = (undefined !== _R ? _R : this.PageMargins.Right);
var B = (undefined !== _B ? _B : this.PageMargins.Bottom);
if (Math.abs(L - this.PageMargins.Left) > 0.001 || Math.abs(T - this.PageMargins.Top) > 0.001 || Math.abs(R - this.PageMargins.Right) > 0.001 || Math.abs(B - this.PageMargins.Bottom) > 0.001)
{
AscCommon.History.Add(new AscDFH.CChangesSectionPageMargins(this, {
L : this.PageMargins.Left,
T : this.PageMargins.Top,
R : this.PageMargins.Right,
B : this.PageMargins.Bottom
}, {L : L, T : T, R : R, B : B}));
this.PageMargins.Left = L;
this.PageMargins.Top = T;
this.PageMargins.Right = R;
this.PageMargins.Bottom = B;
}
};
SectPr.prototype.GetPageMarginLeft = function()
{
return this.PageMargins.Left;
};
SectPr.prototype.GetPageMarginRight = function()
{
return this.PageMargins.Right;
};
SectPr.prototype.GetPageMarginTop = function()
{
return this.PageMargins.Top;
};
SectPr.prototype.GetPageMarginBottom = function()
{
return this.PageMargins.Bottom;
};
SectPr.prototype.SetPageSize = function(W, H)
{
if (Math.abs(W - this.PageSize.W) > 0.001 || Math.abs(H - this.PageSize.H) > 0.001)
{
H = Math.max(2.6, H);
W = Math.max(12.7, W);
AscCommon.History.Add(new AscDFH.CChangesSectionPageSize(this, {W : this.PageSize.W, H : this.PageSize.H}, {W : W, H : H}));
this.PageSize.W = W;
this.PageSize.H = H;
}
};
SectPr.prototype.GetPageWidth = function()
{
return this.PageSize.W;
};
SectPr.prototype.GetPageHeight = function()
{
return this.PageSize.H;
};
SectPr.prototype.SetOrientation = function(Orient, ApplySize)
{
var _Orient = this.GetOrientation();
if (_Orient !== Orient)
{
AscCommon.History.Add(new AscDFH.CChangesSectionPageOrient(this, this.PageSize.Orient, Orient));
this.PageSize.Orient = Orient;
if (true === ApplySize)
{
// При смене ориентации меняем местами высоту и ширину страницы и изменяем отступы
var W = this.PageSize.W;
var H = this.PageSize.H;
var L = this.PageMargins.Left;
var R = this.PageMargins.Right;
var T = this.PageMargins.Top;
var B = this.PageMargins.Bottom;
this.SetPageSize(H, W);
if (Asc.c_oAscPageOrientation.PagePortrait === Orient)
this.SetPageMargins(T, R, B, L);
else
this.SetPageMargins(B, L, T, R);
}
}
};
SectPr.prototype.GetOrientation = function()
{
if (this.PageSize.W > this.PageSize.H)
return Asc.c_oAscPageOrientation.PageLandscape;
return Asc.c_oAscPageOrientation.PagePortrait;
};
SectPr.prototype.GetColumnCount = function()
{
return this.Columns.GetCount();
};
SectPr.prototype.GetColumnWidth = function(nColIndex)
{
return this.Columns.Get_ColumnWidth(nColIndex);
};
SectPr.prototype.GetMinColumnWidth = function()
{
return this.Columns.GetMinColumnWidth();
};
SectPr.prototype.GetColumnSpace = function(nColIndex)
{
return this.Columns.Get_ColumnSpace(nColIndex);
};
SectPr.prototype.GetColumnSep = function()
{
return this.Columns.Sep;
};
SectPr.prototype.IsEqualColumnWidth = function()
{
return this.Columns.EqualWidth;
};
SectPr.prototype.SetBordersOffsetFrom = function(nOffsetFrom)
{
if (nOffsetFrom !== this.Borders.OffsetFrom)
{
AscCommon.History.Add(new AscDFH.CChangesSectionBordersOffsetFrom(this, this.Borders.OffsetFrom, nOffsetFrom));
this.Borders.OffsetFrom = nOffsetFrom;
}
};
SectPr.prototype.GetBordersOffsetFrom = function()
{
return this.Borders.OffsetFrom;
};
SectPr.prototype.SetPageMarginHeader = function(nHeader)
{
if (nHeader !== this.PageMargins.Header)
{
AscCommon.History.Add(new AscDFH.CChangesSectionPageMarginsHeader(this, this.PageMargins.Header, nHeader));
this.PageMargins.Header = nHeader;
}
};
SectPr.prototype.GetPageMarginHeader = function()
{
return this.PageMargins.Header;
};
SectPr.prototype.SetPageMarginFooter = function(nFooter)
{
if (nFooter !== this.PageMargins.Footer)
{
AscCommon.History.Add(new AscDFH.CChangesSectionPageMarginsFooter(this, this.PageMargins.Footer, nFooter));
this.PageMargins.Footer = nFooter;
}
};
SectPr.prototype.GetPageMarginFooter = function()
{
return this.PageMargins.Footer;
};
/**
* Получаем границы для расположения содержимого документа на заданной страницы
* @param nPageAbs {number}
* @returns {{Left: number, Top: number, Right: number, Bottom: number}}
*/
SectPr.prototype.GetContentFrame = function(nPageAbs)
{
var nT = this.GetPageMarginTop();
var nB = this.GetPageHeight() - this.GetPageMarginBottom();
var nL = this.GetPageMarginLeft();
var nR = this.GetPageWidth() - this.GetPageMarginRight();
if (nT < 0)
nT = -nT;
if (this.LogicDocument && this.LogicDocument.IsMirrorMargins() && 1 === nPageAbs % 2)
{
nL = this.GetPageMarginRight();
nR = this.GetPageWidth() - this.GetPageMarginLeft();
}
var nGutter = this.GetGutter();
if (nGutter > 0.001)
{
if (this.LogicDocument && this.LogicDocument.IsGutterAtTop())
{
nT += nGutter;
}
else
{
if (this.LogicDocument && this.LogicDocument.IsMirrorMargins() && 1 === nPageAbs % 2)
{
if (this.IsGutterRTL())
nL += nGutter;
else
nR -= nGutter;
}
else
{
if (this.IsGutterRTL())
nR -= nGutter;
else
nL += nGutter;
}
}
}
return {
Left : nL,
Top : nT,
Right : nR,
Bottom : nB
};
};
/**
* Получаем ширину области для расположения содержимого документа
* @returns {number}
*/
SectPr.prototype.GetContentFrameWidth = function()
{
var nFrameWidth = this.GetPageWidth() - this.GetPageMarginLeft() - this.GetPageMarginRight();
var nGutter = this.GetGutter();
if (nGutter > 0.001 && !(this.LogicDocument && this.LogicDocument.IsGutterAtTop()))
nFrameWidth -= nGutter;
return nFrameWidth;
};
/**
* Получаем высоту области для расположения содержимого документа
* @returns {number}
*/
SectPr.prototype.GetContentFrameHeight = function()
{
var nFrameHeight = this.GetPageHeight() - this.GetPageMarginTop() - this.GetPageMarginBottom();
var nGutter = this.GetGutter();
if (nGutter > 0.001 && this.LogicDocument && this.LogicDocument.IsGutterAtTop())
nFrameHeight -= nGutter;
return nFrameHeight;
};
/**
* Есть ли нумерация строк
* @returns {boolean}
*/
SectPr.prototype.HaveLineNumbers = function()
{
return (undefined !== this.LnNumType && undefined !== this.LnNumType.CountBy && this.LnNumType.GetStart() >= 0);
};
/**
* Добавляем или меняем нумерацию строк
* @param nCountBy
* @param nDistance
* @param nStart
* @param nRestartType
*/
SectPr.prototype.SetLineNumbers = function(nCountBy, nDistance, nStart, nRestartType)
{
if (!this.HaveLineNumbers()
|| nCountBy !== this.GetLineNumbersCountBy()
|| nDistance !== this.GetLineNumbersDistance()
|| nStart !== this.GetLineNumbersStart()
|| nRestartType !== this.GetLineNumbersRestart()
)
{
var oLnNumType = new AscWord.SectionLnNumType(nCountBy, nDistance, nStart, nRestartType);
AscCommon.History.Add(new AscDFH.CChangesSectionLnNumType(this, this.LnNumType, oLnNumType));
this.LnNumType = oLnNumType;
}
};
/**
* Получаем класс с настройками нумерации строк
* @returns {?AscWord.SectionLnNumType}
*/
SectPr.prototype.GetLineNumbers = function()
{
if (this.HaveLineNumbers())
return this.LnNumType;
return undefined;
};
/**
* Убираем нумерацию строк
*/
SectPr.prototype.RemoveLineNumbers = function()
{
if (this.LnNumType)
{
AscCommon.History.Add(new AscDFH.CChangesSectionLnNumType(this, this.LnNumType, undefined));
this.LnNumType = undefined;
}
};
SectPr.prototype.GetLineNumbersCountBy = function()
{
return (this.LnNumType && undefined !== this.LnNumType.CountBy ? this.LnNumType.CountBy : 0);
};
SectPr.prototype.GetLineNumbersStart = function()
{
return (this.LnNumType && undefined !== this.LnNumType.GetStart() ? this.LnNumType.GetStart() : 0);
};
SectPr.prototype.GetLineNumbersRestart = function()
{
return (this.LnNumType && undefined !== this.LnNumType.Restart ? this.LnNumType.Restart : Asc.c_oAscLineNumberRestartType.NewPage);
};
SectPr.prototype.GetLineNumbersDistance = function()
{
return (this.LnNumType ? this.LnNumType.Distance : undefined);
};
SectPr.prototype.RemoveHeader = function(oHeader)
{
if (!oHeader)
return;
if (this.HeaderDefault === oHeader)
this.Set_Header_Default(null);
else if (this.HeaderEven === oHeader)
this.Set_Header_Even(null);
else if (this.HeaderFirst === oHeader)
this.Set_Header_First(null);
else if (this.FooterDefault === oHeader)
this.Set_Footer_Default(null);
else if (this.FooterEven === oHeader)
this.Set_Footer_Even(null);
else if (this.FooterFirst === oHeader)
this.Set_Footer_First(null);
};
SectPr.prototype.CheckPageNumSymbols = function()
{
if (!AscFonts.IsCheckSymbols)
return;
let symbols = AscWord.GetNumberingSymbolsByFormat(this.PageNumType.Format);
AscFonts.FontPickerByCharacter.checkTextLight(symbols);
};
//------------------------------------------------------------------------------------------------------------------
/**
* @constructor
*/
function SectionLayoutColumnInfo(X, XLimit)
{
this.X = X;
this.XLimit = XLimit;
this.Pos = 0;
this.EndPos = 0;
}
/**
* @constructor
*/
function SectionLayoutInfo(X, Y, XLimit, YLimit)
{
this.X = X;
this.Y = Y;
this.XLimit = XLimit;
this.YLimit = YLimit;
this.Columns = [];
}
//--------------------------------------------------------export----------------------------------------------------
AscWord.SectPr = SectPr;
})();