Files
DocumentServer-v-9.2.0/sdkjs/word/Editor/Field.js
T
Yajbir Singh f1b860b25c
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

823 lines
25 KiB
JavaScript

/*
* (c) Copyright Ascensio System SIA 2010-2024
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
// Import
var History = AscCommon.History;
/**
*
* @param FieldType
* @param Arguments
* @param Switches
* @constructor
* @extends {CParagraphContentWithParagraphLikeContent}
*/
function ParaField(FieldType, Arguments, Switches)
{
CParagraphContentWithParagraphLikeContent.call(this);
this.Id = AscCommon.g_oIdCounter.Get_NewId();
this.Type = para_Field;
this.Istruction = null;
this.FieldType = (undefined === FieldType ? AscWord.fieldtype_UNKNOWN : FieldType);
this.Arguments = (undefined === Arguments ? [] : Arguments);
this.Switches = (undefined === Switches ? [] : Switches);
this.TemplateContent = this.Content;
this.Bounds = {};
this.FormFieldName = "";
this.FormFieldDefaultText = "";
// Добавляем данный класс в таблицу Id (обязательно в конце конструктора)
AscCommon.g_oTableId.Add( this, this.Id );
}
ParaField.prototype = Object.create(CParagraphContentWithParagraphLikeContent.prototype);
ParaField.prototype.constructor = ParaField;
ParaField.prototype.Get_Id = function()
{
return this.Id;
};
ParaField.prototype.Copy = function(Selected, oPr)
{
let newField = CParagraphContentWithParagraphLikeContent.prototype.Copy.apply(this, arguments);
if (oPr && oPr.SkipFldSimple)
{
let newItems = this.Content.slice();
this.RemoveAll();
return newItems;
}
else
{
// TODO: Сделать функциями с иторией
newField.FieldType = this.FieldType;
newField.Arguments = this.Arguments;
newField.Switches = this.Switches;
if (editor)
editor.WordControl.m_oLogicDocument.Register_Field(newField);
return newField;
}
};
ParaField.prototype.GetSelectedElementsInfo = function(Info, ContentPos, Depth)
{
Info.SetField(this);
CParagraphContentWithParagraphLikeContent.prototype.GetSelectedElementsInfo.apply(this, arguments);
};
ParaField.prototype.Get_Bounds = function()
{
var oParagraph = this.GetParagraph();
if (!oParagraph)
return [];
var arrBounds = [];
for (var Place in this.Bounds)
{
this.Bounds[Place].PageIndex = oParagraph.GetAbsolutePage(this.Bounds[Place].PageInternal);
arrBounds.push(this.Bounds[Place]);
}
return arrBounds;
};
ParaField.prototype.Add_ToContent = function(Pos, Item, UpdatePosition)
{
History.Add(new CChangesParaFieldAddItem(this, Pos, [Item]));
CParagraphContentWithParagraphLikeContent.prototype.Add_ToContent.apply(this, arguments);
};
ParaField.prototype.Remove_FromContent = function(Pos, Count, UpdatePosition)
{
if (Count <= 0)
return;
// Получим массив удаляемых элементов
var DeletedItems = this.Content.slice(Pos, Pos + Count);
History.Add(new CChangesParaFieldRemoveItem(this, Pos, DeletedItems));
CParagraphContentWithParagraphLikeContent.prototype.Remove_FromContent.apply(this, arguments);
};
ParaField.prototype.Add = function(Item)
{
if (para_Field === Item.Type)
{
// Вместо добавления самого элемента добавляем его содержимое
var Count = Item.Content.length;
if (Count > 0)
{
var CurPos = this.State.ContentPos;
var CurItem = this.Content[CurPos];
var CurContentPos = new AscWord.CParagraphContentPos();
CurItem.Get_ParaContentPos(false, false, CurContentPos);
var NewItem = CurItem.Split(CurContentPos, 0);
for (var Index = 0; Index < Count; Index++)
{
this.Add_ToContent(CurPos + Index + 1, Item.Content[Index], false);
}
this.Add_ToContent(CurPos + Count + 1, NewItem, false);
this.State.ContentPos = CurPos + Count;
this.Content[this.State.ContentPos].MoveCursorToEndPos();
}
}
else
{
CParagraphContentWithParagraphLikeContent.prototype.Add.apply(this, arguments);
}
};
ParaField.prototype.Split = function (ContentPos, Depth)
{
// Не даем разделять поле
return null;
};
ParaField.prototype.CanSplit = function()
{
return false;
};
ParaField.prototype.Recalculate_Range_Spaces = function(PRSA, _CurLine, _CurRange, _CurPage)
{
var CurLine = _CurLine - this.StartLine;
var CurRange = (0 === _CurLine ? _CurRange - this.StartRange : _CurRange);
if (0 === CurLine && 0 === CurRange && true !== PRSA.RecalcFast)
this.Bounds = {};
var X0 = PRSA.X;
var Y0 = PRSA.Y0;
var Y1 = PRSA.Y1;
CParagraphContentWithParagraphLikeContent.prototype.Recalculate_Range_Spaces.apply(this, arguments);
var X1 = PRSA.X;
this.Bounds[((CurLine << 16) & 0xFFFF0000) | (CurRange & 0x0000FFFF)] = {
X0 : X0,
X1 : X1,
Y0 : Y0,
Y1 : Y1,
PageIndex : PRSA.Paragraph.GetAbsolutePage(_CurPage),
PageInternal : _CurPage
};
};
ParaField.prototype.Draw_HighLights = function(PDSH)
{
var X0 = PDSH.X;
var Y0 = PDSH.Y0;
var Y1 = PDSH.Y1;
CParagraphContentWithParagraphLikeContent.prototype.Draw_HighLights.apply(this, arguments);
var X1 = PDSH.X;
if (Math.abs(X0 - X1) > 0.001 && (true === PDSH.DrawMMFields || AscWord.fieldtype_FORMTEXT === this.Get_FieldType()))
{
PDSH.MMFields.Add(Y0, Y1, X0, X1, 0, 0, 0, 0 );
}
};
ParaField.prototype.Get_LeftPos = function(SearchPos, ContentPos, Depth, UseContentPos)
{
if (false === UseContentPos && this.Content.length > 0)
{
// При переходе в новый контент встаем в его конец
var CurPos = this.Content.length - 1;
this.Content[CurPos].Get_EndPos(false, SearchPos.Pos, Depth + 1);
SearchPos.Pos.Update(CurPos, Depth);
SearchPos.Found = true;
return true;
}
CParagraphContentWithParagraphLikeContent.prototype.Get_LeftPos.call(this, SearchPos, ContentPos, Depth, UseContentPos);
};
ParaField.prototype.Get_RightPos = function(SearchPos, ContentPos, Depth, UseContentPos, StepEnd)
{
if (false === UseContentPos && this.Content.length > 0)
{
// При переходе в новый контент встаем в его начало
this.Content[0].Get_StartPos(SearchPos.Pos, Depth + 1);
SearchPos.Pos.Update(0, Depth);
SearchPos.Found = true;
return true;
}
CParagraphContentWithParagraphLikeContent.prototype.Get_RightPos.call(this, SearchPos, ContentPos, Depth, UseContentPos, StepEnd);
};
ParaField.prototype.Remove = function(nDirection, bOnAddText)
{
CParagraphContentWithParagraphLikeContent.prototype.Remove.call(this, nDirection, bOnAddText);
if (this.Is_Empty() && !bOnAddText && AscWord.fieldtype_FORMTEXT === this.Get_FieldType() && this.Paragraph && this.Paragraph.LogicDocument && true === this.Paragraph.LogicDocument.IsFillingFormMode())
{
var sDefaultText = this.FormFieldDefaultText == "" ? " " : this.FormFieldDefaultText;
this.SetValue(sDefaultText);
}
};
ParaField.prototype.Shift_Range = function(Dx, Dy, _CurLine, _CurRange, _CurPage)
{
CParagraphContentWithParagraphLikeContent.prototype.Shift_Range.call(this, Dx, Dy, _CurLine, _CurRange, _CurPage);
var CurLine = _CurLine - this.StartLine;
var CurRange = ( 0 === CurLine ? _CurRange - this.StartRange : _CurRange );
var oRangeBounds = this.Bounds[((CurLine << 16) & 0xFFFF0000) | (CurRange & 0x0000FFFF)];
if (oRangeBounds)
{
oRangeBounds.X0 += Dx;
oRangeBounds.X1 += Dx;
oRangeBounds.Y0 += Dy;
oRangeBounds.Y1 += Dy;
}
};
ParaField.prototype.Get_LeftPos = function(SearchPos, ContentPos, Depth, UseContentPos)
{
var bResult = CParagraphContentWithParagraphLikeContent.prototype.Get_LeftPos.call(this, SearchPos, ContentPos, Depth, UseContentPos);
if (true !== bResult && this.Paragraph && this.Paragraph.LogicDocument && true === this.Paragraph.LogicDocument.IsFillingFormMode())
{
this.Get_StartPos(SearchPos.Pos, Depth);
SearchPos.Found = true;
return true;
}
return bResult;
};
ParaField.prototype.Get_RightPos = function(SearchPos, ContentPos, Depth, UseContentPos, StepEnd)
{
var bResult = CParagraphContentWithParagraphLikeContent.prototype.Get_RightPos.call(this, SearchPos, ContentPos, Depth, UseContentPos, StepEnd);
if (true !== bResult && this.Paragraph && this.Paragraph.LogicDocument && true === this.Paragraph.LogicDocument.IsFillingFormMode())
{
this.Get_EndPos(false, SearchPos.Pos, Depth);
SearchPos.Found = true;
return true;
}
return bResult;
};
ParaField.prototype.Get_WordStartPos = function(SearchPos, ContentPos, Depth, UseContentPos)
{
CParagraphContentWithParagraphLikeContent.prototype.Get_WordStartPos.call(this, SearchPos, ContentPos, Depth, UseContentPos);
if (true !== SearchPos.Found && this.Paragraph && this.Paragraph.LogicDocument && true === this.Paragraph.LogicDocument.IsFillingFormMode())
{
this.Get_StartPos(SearchPos.Pos, Depth);
SearchPos.UpdatePos = true;
SearchPos.Found = true;
}
};
ParaField.prototype.Get_WordEndPos = function(SearchPos, ContentPos, Depth, UseContentPos, StepEnd)
{
CParagraphContentWithParagraphLikeContent.prototype.Get_WordEndPos.call(this, SearchPos, ContentPos, Depth, UseContentPos, StepEnd);
if (true !== SearchPos.Found && this.Paragraph && this.Paragraph.LogicDocument && true === this.Paragraph.LogicDocument.IsFillingFormMode())
{
this.Get_EndPos(false, SearchPos.Pos, Depth);
SearchPos.UpdatePos = true;
SearchPos.Found = true;
}
};
ParaField.prototype.SetCurrent = function(isCurrent)
{
};
ParaField.prototype.IsCurrent = function()
{
return false;
};
ParaField.prototype.SelectField = function()
{
this.SelectThisElement();
};
ParaField.prototype.GetAllFields = function(isUseSelection, arrFields)
{
arrFields.push(this);
return CParagraphContentWithParagraphLikeContent.prototype.GetAllFields.apply(this, arguments);
};
ParaField.prototype.GetAllSeqFieldsByType = function(sType, aFields)
{
if (this.FieldType === AscWord.fieldtype_SEQ
&& this.Arguments.length
&& this.Arguments[0].toLowerCase
&& sType.toLowerCase
&& this.Arguments[0].toLowerCase() === sType.toLowerCase())
{
aFields.push(this);
}
};
//----------------------------------------------------------------------------------------------------------------------
// Работа с данными поля
//----------------------------------------------------------------------------------------------------------------------
ParaField.prototype.Get_Argument = function(Index)
{
return this.Arguments[Index];
};
ParaField.prototype.Get_FieldType = function()
{
return this.FieldType;
};
ParaField.prototype.GetFieldType = function()
{
return this.FieldType;
};
ParaField.prototype.Map_MailMerge = function(_Value)
{
// Пока у нас в Value может быть только текст, в будущем планируется, чтобы могли быть картинки.
var Value = _Value;
if (undefined === Value || null === Value)
Value = "";
History.TurnOff();
var oRun = this.private_GetMappedRun(Value);
// Подменяем содержимое поля
this.Content = [];
this.Content[0] = oRun;
this.MoveCursorToStartPos();
History.TurnOn();
};
ParaField.prototype.Restore_StandardTemplate = function()
{
// В любом случае сначала восстанавливаем исходное содержимое.
this.Restore_Template();
if (AscWord.fieldtype_MERGEFIELD === this.FieldType && true === AscCommon.CollaborativeEditing.Is_SingleUser() && 1 === this.Arguments.length)
{
var oRun = this.private_GetMappedRun("«" + this.Arguments[0] + "»");
this.Remove_FromContent(0, this.Content.length);
this.Add_ToContent(0, oRun);
this.MoveCursorToStartPos();
this.TemplateContent = this.Content;
}
};
ParaField.prototype.Restore_Template = function()
{
// Восстанавливаем содержимое поля.
this.Content = this.TemplateContent;
this.MoveCursorToStartPos();
};
ParaField.prototype.Is_NeedRestoreTemplate = function()
{
if (1 !== this.TemplateContent.length)
return true;
var oRun = this.TemplateContent[0];
if (AscWord.fieldtype_MERGEFIELD === this.FieldType)
{
var sStandardText = "«" + this.Arguments[0] + "»";
var oRunText = new CParagraphGetText();
oRun.Get_Text(oRunText);
if (sStandardText === oRunText.Text)
return false;
return true;
}
return false;
};
ParaField.prototype.Replace_MailMerge = function(_Value)
{
// Пока у нас в Value может быть только текст, в будущем планируется, чтобы могли быть картинки.
var Value = _Value;
if (undefined === Value || null === Value)
Value = "";
var Paragraph = this.Paragraph;
if (!Paragraph)
return false;
// Получим ран, на который мы подменяем поле
var oRun = this.private_GetMappedRun(Value);
// Ищем расположение данного поля в параграфе
var ParaContentPos = Paragraph.Get_PosByElement(this);
if (null === ParaContentPos)
return false;
var Depth = ParaContentPos.GetDepth();
var FieldPos = ParaContentPos.Get(Depth);
if (Depth < 0)
return false;
ParaContentPos.DecreaseDepth(1);
var FieldContainer = Paragraph.Get_ElementByPos(ParaContentPos);
if (!FieldContainer || !FieldContainer.Content || FieldContainer.Content[FieldPos] !== this)
return false;
FieldContainer.Remove_FromContent(FieldPos, 1);
FieldContainer.Add_ToContent(FieldPos, oRun);
return true;
};
ParaField.prototype.private_GetMappedRun = function(sValue)
{
return this.CreateRunWithText(sValue);
};
ParaField.prototype.SetFormFieldName = function(sName)
{
History.Add(new CChangesParaFieldFormFieldName(this, this.FormFieldName, sName));
this.FormFieldName = sName;
};
ParaField.prototype.GetFormFieldName = function()
{
return this.FormFieldName;
};
ParaField.prototype.SetFormFieldDefaultText = function(sText)
{
History.Add(new CChangesParaFieldFormFieldDefaultText(this, this.FormFieldDefaultText, sText));
this.FormFieldDefaultText = sText;
};
ParaField.prototype.GetValue = function()
{
var oText = new CParagraphGetText();
oText.SetBreakOnNonText(false);
this.Get_Text(oText);
return oText.Text;
};
ParaField.prototype.SetValue = function(sValue)
{
this.ReplaceAllWithText(sValue);
};
ParaField.prototype.IsFillingForm = function()
{
if (AscWord.fieldtype_FORMTEXT === this.Get_FieldType())
return true;
return false;
};
ParaField.prototype.FindNextFillingForm = function(isNext, isCurrent, isStart)
{
var oParagraph = this.GetParagraph();
if (!oParagraph)
return null;
var oLogicDocument = oParagraph.GetLogicDocument();
if (!oLogicDocument)
return null;
if (!this.IsFillingForm() || oLogicDocument.IsFillingOFormMode())
return CParagraphContentWithParagraphLikeContent.prototype.FindNextFillingForm.apply(this, arguments);
if (isCurrent && true === this.IsSelectedAll())
{
if (isNext)
return CParagraphContentWithParagraphLikeContent.prototype.FindNextFillingForm.apply(this, arguments);
return null;
}
if (!isCurrent && isNext)
return this;
var oRes = CParagraphContentWithParagraphLikeContent.prototype.FindNextFillingForm.apply(this, arguments);
if (!oRes && !isNext)
return this;
return null;
};
ParaField.prototype.Update = function(isCreateHistoryPoint, isRecalculate)
{
if (!this.Paragraph && !this.Paragraph.Parent)
return;
var sReplaceString = null;
if (this.FieldType === AscWord.fieldtype_SEQ)
{
var oInstruction = new CFieldInstructionSEQ();
oInstruction.ComplexField = this;
oInstruction.ParentContent = this.Paragraph.Parent;
oInstruction.Id = this.Arguments[0];
sReplaceString = oInstruction.GetText();
}
else if (this.FieldType === AscWord.fieldtype_STYLEREF)
{
var oInstruction = new CFieldInstructionSTYLEREF();
oInstruction.ComplexField = this;
oInstruction.ParentContent = this.Paragraph.Parent;
oInstruction.ParentParagraph = this.Paragraph;
oInstruction.StyleName = this.Arguments[0];
sReplaceString = oInstruction.GetText();
}
if (sReplaceString)
{
var oRun = this.private_GetMappedRun(sReplaceString);
this.Remove_FromContent(0, this.Content.length);
this.Add_ToContent(0, oRun);
}
};
ParaField.prototype.GetInstructionLine = function()
{
let Instr = "";
let name;
switch (this.FieldType)
{
case AscWord.fieldtype_MERGEFIELD :
{
name = "MERGEFIELD";
break;
}
case AscWord.fieldtype_PAGE :
{
name = "PAGE";
break;
}
case AscWord.fieldtype_NUMPAGES :
{
name = "NUMPAGES";
break;
}
case AscWord.fieldtype_FORMTEXT :
{
name = "FORMTEXT";
break;
}
case AscWord.fieldtype_TOC :
{
name = "TOC";
break;
}
case AscWord.fieldtype_PAGEREF :
{
name = "PAGEREF";
break;
}
case AscWord.fieldtype_ASK :
{
name = "ASK";
break;
}
case AscWord.fieldtype_REF :
{
name = "REF";
break;
}
case AscWord.fieldtype_HYPERLINK :
{
name = "HYPERLINK";
break;
}
case AscWord.fieldtype_TIME :
{
name = "TIME";
break;
}
case AscWord.fieldtype_DATE :
{
name = "DATE";
break;
}
case AscWord.fieldtype_FORMULA :
{
name = "FORMULA";
break;
}
case AscWord.fieldtype_SEQ :
{
name = "SEQ";
break;
}
case AscWord.fieldtype_STYLEREF :
{
name = "STYLEREF";
break;
}
case AscWord.fieldtype_NOTEREF :
{
name = "NOTEREF";
break;
}
}
if (name)
{
Instr += name;
for (let i = 0; i < this.Arguments.length; ++i)
{
let argument = this.Arguments[i];
argument = argument.replace(/(\\|")/g, "\\$1");
if (-1 != argument.indexOf(' '))
{
argument = "\"" + argument + "\"";
}
Instr += " " + argument;
}
Instr += this.Switches.join(" ")
}
return Instr;
};
ParaField.prototype.GetInstruction = function()
{
let instructionLine = this.GetInstructionLine();
let parser = new CFieldInstructionParser();
let instruction = parser.GetInstructionClass(instructionLine);
instruction.SetInstructionLine(instructionLine);
return instruction;
};
ParaField.prototype.ReplaceWithComplexField = function()
{
let oParent = this.GetParent();
let nPosInParent = this.GetPosInParent(oParent);
let oParagraph = this.GetParagraph();
let oLogicDocument = oParagraph ? oParagraph.GetLogicDocument() : null;
if (!oLogicDocument || !oParent || -1 === nPosInParent)
return null;
let oBeginChar = new ParaFieldChar(fldchartype_Begin, oLogicDocument);
let oSeparateChar = new ParaFieldChar(fldchartype_Separate, oLogicDocument);
let oEndChar = new ParaFieldChar(fldchartype_End, oLogicDocument);
let sInstruction = this.GetInstructionLine();
let oRun = this.CreateRunWithText("");
oRun.AddToContent(-1, oBeginChar);
oRun.AddInstrText(sInstruction);
oRun.AddToContent(-1, oSeparateChar);
oRun.AddToContent(-1, oEndChar);
oParent.RemoveFromContent(nPosInParent, 1);
oParent.AddToContent(nPosInParent, oRun);
oBeginChar.SetRun(oRun);
oSeparateChar.SetRun(oRun);
oEndChar.SetRun(oRun);
var oComplexField = oBeginChar.GetComplexField();
oComplexField.SetBeginChar(oBeginChar);
oComplexField.SetInstructionLine(sInstruction);
oComplexField.SetSeparateChar(oSeparateChar);
oComplexField.SetEndChar(oEndChar);
oComplexField.Update(false);
return oComplexField;
};
ParaField.prototype.GetRunWithPageField = function(paragraph)
{
let res = null;
if (AscWord.fieldtype_PAGENUM == this.FieldType || AscWord.fieldtype_PAGECOUNT == this.FieldType) {
res = new ParaRun(paragraph);
let run = this.GetFirstRunNonEmpty();
let rPr = run && run.Get_FirstTextPr();
if (rPr) {
res.Set_Pr(rPr);
}
if (AscWord.fieldtype_PAGENUM == this.FieldType) {
res.AddToContentToEnd(new AscWord.CRunPageNum());
} else {
var pageCount = parseInt(this.GetSelectedText(true));
res.AddToContentToEnd(new AscWord.CRunPagesCount(isNaN(pageCount) ? undefined : pageCount));
}
}
return res;
}
ParaField.prototype.IsValid = function()
{
return true;
};
ParaField.prototype.CheckType = function(type)
{
return this.FieldType === type;
};
ParaField.prototype.IsAddin = function()
{
return this.CheckType(AscWord.fieldtype_ADDIN);
};
ParaField.prototype.IsFormCheckBox = function()
{
return this.CheckType(AscWord.fieldtype_FORMCHECKBOX);
};
//----------------------------------------------------------------------------------------------------------------------
// Функции совместного редактирования
//----------------------------------------------------------------------------------------------------------------------
ParaField.prototype.Write_ToBinary2 = function(Writer)
{
Writer.WriteLong(AscDFH.historyitem_type_Field);
// String : Id
// Long : FieldType
// Long : Количество аргументов
// Array of Strings : массив аргументов
// Long : Количество переключателей
// Array of Strings : массив переключателей
// Long : Количество элементов
// Array of Strings : массив с Id элементов
Writer.WriteString2(this.Id);
Writer.WriteLong(this.FieldType);
var ArgsCount = this.Arguments.length;
Writer.WriteLong(ArgsCount);
for (var Index = 0; Index < ArgsCount; Index++)
Writer.WriteString2(this.Arguments[Index]);
var SwitchesCount = this.Switches.length;
Writer.WriteLong(SwitchesCount);
for (var Index = 0; Index < SwitchesCount; Index++)
Writer.WriteString2(this.Switches[Index]);
var Count = this.Content.length;
Writer.WriteLong(Count);
for (var Index = 0; Index < Count; Index++)
Writer.WriteString2(this.Content[Index].Get_Id());
};
ParaField.prototype.Read_FromBinary2 = function(Reader)
{
// String : Id
// Long : FieldType
// Long : Количество аргументов
// Array of Strings : массив аргументов
// Long : Количество переключателей
// Array of Strings : массив переключателей
// Long : Количество элементов
// Array of Strings : массив с Id элементов
this.Id = Reader.GetString2();
this.FieldType = Reader.GetLong();
var Count = Reader.GetLong();
this.Arguments = [];
for (var Index = 0; Index < Count; Index++)
this.Arguments.push(Reader.GetString2());
Count = Reader.GetLong();
this.Switches = [];
for (var Index = 0; Index < Count; Index++)
this.Switches.push(Reader.GetString2());
Count = Reader.GetLong();
this.Content = [];
for (var Index = 0; Index < Count; Index++)
{
var Element = AscCommon.g_oTableId.Get_ById(Reader.GetString2());
if (null !== Element)
this.Content.push(Element);
}
this.TemplateContent = this.Content;
if (editor)
editor.WordControl.m_oLogicDocument.Register_Field(this);
};
//----------------------------------------------------------------------------------------------------------------------
ParaField.prototype.IsStopCursorOnEntryExit = function()
{
return true;
};
ParaField.prototype.CheckSpelling = function(oCollector, nDepth)
{
if (oCollector.IsExceedLimit())
return;
oCollector.FlushWord();
};
//--------------------------------------------------------export----------------------------------------------------
window['AscCommonWord'] = window['AscCommonWord'] || {};
window['AscCommonWord'].ParaField = ParaField;
window['AscWord'].CSimpleField = ParaField;
window['AscWord'].FldSimple = ParaField;