Compare commits

..

1 Commits

Author SHA1 Message Date
a4d9f27d54 [bu][de] - Added method for creating ApiComplexForm objects. 2022-11-17 17:35:25 +05:00
24 changed files with 1405 additions and 5120 deletions

335
api.js
View File

@ -1,5 +1,5 @@
/*
* (c) Copyright Ascensio System SIA 2010-2024
* (c) Copyright Ascensio System SIA 2010-2019
*
* 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)
@ -12,7 +12,7 @@
* 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
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
@ -30,8 +30,6 @@
*
*/
var AscOForm = {};
window["AscOForm"] = window.AscOForm = AscOForm;
(function(window, document) {
window['Asc']['Addons'] = window['Asc']['Addons'] || {};
@ -42,8 +40,6 @@ window["AscOForm"] = window.AscOForm = AscOForm;
if (!oLogicDocument)
return;
CheckCurrentSelection(oLogicDocument);
if (oPr && oFormPr)
{
if (oPr.GroupKey)
@ -61,7 +57,6 @@ window["AscOForm"] = window.AscOForm = AscOForm;
oPr.UncheckedFont = "Segoe UI Symbol";
}
var nCheckedSymbol = oPr && oPr.CheckedSymbol ? oPr.CheckedSymbol : Asc.c_oAscSdtCheckBoxDefaults.CheckedSymbol;
var nUncheckedSymbol = oPr && oPr.UncheckedSymbol ? oPr.UncheckedSymbol : Asc.c_oAscSdtCheckBoxDefaults.UncheckedSymbol;
var sCheckedFont = oPr && oPr.CheckedFont ? oPr.CheckedFont : Asc.c_oAscSdtCheckBoxDefaults.CheckedFont;
@ -87,12 +82,9 @@ window["AscOForm"] = window.AscOForm = AscOForm;
if (oFormPr)
{
private_ApplyFormPr(oCC, oFormPr, oLogicDocument);
if (oPr && oPr.GroupKey)
private_CheckRadioButtonChoice(oCC, oLogicDocument, oPr.GroupKey);
else
private_CheckFormKey(oCC, oLogicDocument);
oCC.SetFormPr(oFormPr);
oCC.UpdatePlaceHolderTextPrForForm();
private_CheckFormKey(oCC, oLogicDocument);
}
if (oCommonPr)
@ -171,55 +163,27 @@ window["AscOForm"] = window.AscOForm = AscOForm;
private_PerformAddCheckBox();
}
};
window['Asc']['asc_docs_api'].prototype['asc_AddContentControlPicture'] = window['Asc']['asc_docs_api'].prototype.asc_AddContentControlPicture = function(oFormPr, oCommonPr, isSignature)
window['Asc']['asc_docs_api'].prototype['asc_AddContentControlPicture'] = window['Asc']['asc_docs_api'].prototype.asc_AddContentControlPicture = function(oFormPr, oCommonPr)
{
var oLogicDocument = this.private_GetLogicDocument();
if (!oLogicDocument)
return;
CheckCurrentSelection(oLogicDocument);
oLogicDocument.RemoveTextSelection();
if (!oLogicDocument.IsSelectionLocked(AscCommon.changestype_Paragraph_Content))
{
oLogicDocument.StartAction(AscDFH.historydescription_Document_AddContentControlPicture);
// 150x32pt for Signature
let w = isSignature ? 150 / 72 * 25.4 : undefined;
let h = isSignature ? 32 / 72 * 25.4 : undefined;
var oCC = oLogicDocument.AddContentControlPicture(w, h);
// MSWord can't open files with anchored picture content controls (70332)
if (oCC && !oFormPr)
{
let allDrawings = oCC.GetAllDrawingObjects();
for (let i = 0; i < allDrawings.length; ++i)
{
allDrawings[i].MakeInline();
}
}
var oCC = oLogicDocument.AddContentControlPicture();
let oFormParaDrawing = null;
if (oCC && oFormPr)
{
oCC.SetFormPr(oFormPr);
oCC.UpdatePlaceHolderTextPrForForm();
let pictPr = new AscCommon.CSdtPictureFormPr();
if (isSignature)
{
pictPr.SetSignature(true);
let glossary = oLogicDocument.GetGlossaryDocument();
if (glossary)
oCC.SetPlaceholder(glossary.GetDefaultPlaceholderSignatureOformDocPartId());
}
oCC.SetPictureFormPr(pictPr);
private_CheckFormKey(oCC, oLogicDocument);
oLogicDocument.Recalculate(true);
oFormParaDrawing = oCC.ConvertFormToFixed();
oCC.SetPictureFormPr(new AscCommon.CSdtPictureFormPr());
var aDrawings = oCC.GetAllDrawingObjects();
for(var nDrawing = 0; nDrawing < aDrawings.length; ++nDrawing)
{
@ -271,11 +235,6 @@ window["AscOForm"] = window.AscOForm = AscOForm;
oLogicDocument.Recalculate(true);
oCC.UpdatePictureFormLayout();
}
else
{
oCC.ReplaceContentWithPlaceHolder();
oCC.ApplyPicturePr(true, w, h);
}
}
if (oCC && oCommonPr)
@ -294,17 +253,11 @@ window["AscOForm"] = window.AscOForm = AscOForm;
oLogicDocument.FinalizeAction();
}
};
window['Asc']['asc_docs_api'].prototype['asc_AddContentControlSignature'] = window['Asc']['asc_docs_api'].prototype.asc_AddContentControlSignature = function(oFormPr, oCommonPr)
{
return this.asc_AddContentControlPicture(oFormPr, oCommonPr, true);
};
window['Asc']['asc_docs_api'].prototype['asc_AddContentControlList'] = window['Asc']['asc_docs_api'].prototype.asc_AddContentControlList = function(isComboBox, oPr, oFormPr, oCommonPr)
{
var oLogicDocument = this.private_GetLogicDocument();
if (!oLogicDocument)
return;
CheckCurrentSelection(oLogicDocument);
oLogicDocument.RemoveTextSelection();
if (!oLogicDocument.IsSelectionLocked(AscCommon.changestype_Paragraph_Content))
@ -319,7 +272,7 @@ window["AscOForm"] = window.AscOForm = AscOForm;
if (oCC && oFormPr)
{
private_ApplyFormPr(oCC, oFormPr, oLogicDocument);
oCC.SetFormPr(oFormPr);
oCC.UpdatePlaceHolderTextPrForForm();
private_CheckFormKey(oCC, oLogicDocument);
}
@ -338,42 +291,15 @@ window["AscOForm"] = window.AscOForm = AscOForm;
var oLogicDocument = this.private_GetLogicDocument();
if (!oLogicDocument)
return;
CheckCurrentSelection(oLogicDocument);
oLogicDocument.RemoveTextSelection();
if (!oLogicDocument.IsSelectionLocked(AscCommon.changestype_Paragraph_Content))
{
oLogicDocument.StartAction(AscDFH.historydescription_Document_AddContentControlList);
let dateTimePr = null;
let formPr = null;
let ccPr = null;
// Пока для совместимости со старым форматом оставляем, чтобы настройки могли приходить по старому (oPr, oCommonPr)
// но в будущем надо перейти на новый вариант contentPr (AscCommon.CContentControlPr)
if (oPr && (oPr instanceof AscCommon.CContentControlPr))
{
dateTimePr = oPr.DateTimePr;
ccPr = oPr;
formPr = oPr.FormPr;
}
else if (oPr && (oPr instanceof AscWord.CSdtDatePickerPr))
{
dateTimePr = oPr;
ccPr = oCommonPr ? oCommonPr : null;
}
var oCC = oLogicDocument.AddContentControlDatePicker(dateTimePr);
var oCC = oLogicDocument.AddContentControlDatePicker(oPr, oCommonPr);
if (oCC && ccPr)
oCC.SetContentControlPr(ccPr);
if (oCC && formPr)
{
private_ApplyFormPr(oCC, formPr, oLogicDocument);
private_CheckFormKey(oCC, oLogicDocument);
}
if (oCC && oCommonPr)
oCC.SetContentControlPr(oCommonPr);
oLogicDocument.Recalculate();
oLogicDocument.UpdateInterface();
@ -386,8 +312,6 @@ window["AscOForm"] = window.AscOForm = AscOForm;
var oLogicDocument = this.private_GetLogicDocument();
if (!oLogicDocument)
return;
CheckCurrentSelection(oLogicDocument);
let textFormPr = contentControlPr ? contentControlPr.TextFormPr : null;
let formPr = contentControlPr ? contentControlPr.FormPr : null;
@ -405,7 +329,7 @@ window["AscOForm"] = window.AscOForm = AscOForm;
if (formPr)
{
private_ApplyFormPr(oCC, formPr, oLogicDocument);
oCC.SetFormPr(formPr);
oCC.UpdatePlaceHolderTextPrForForm();
private_CheckFormKey(oCC, oLogicDocument);
}
@ -421,8 +345,6 @@ window["AscOForm"] = window.AscOForm = AscOForm;
let logicDocument = this.private_GetLogicDocument();
if (!logicDocument)
return;
CheckCurrentSelection(logicDocument, true);
function AddComplexForm()
{
@ -481,161 +403,6 @@ window["AscOForm"] = window.AscOForm = AscOForm;
return AscWord.FormToJson(form);
};
window['Asc']['asc_docs_api'].prototype['asc_SetFormValue'] = window['Asc']['asc_docs_api'].prototype.asc_SetFormValue = function(value, formId)
{
let logicDocument = this.private_GetLogicDocument();
if (!logicDocument)
return;
let form = logicDocument.GetContentControl(formId);
if (!form || !form.IsForm())
return;
return this.private_SetFormValue(form.GetId(), value);
};
window['Asc']['asc_docs_api'].prototype['asc_GetFormValue'] = window['Asc']['asc_docs_api'].prototype.asc_GetFormValue = function(formId)
{
let logicDocument = this.private_GetLogicDocument();
if (!logicDocument)
return "";
let form = logicDocument.GetContentControl(formId);
if (!form || !form.IsForm())
return "";
if (form.IsPictureForm())
return "";
else if (form.IsCheckBox())
return form.IsCheckBoxChecked();
else if (form.IsPlaceHolder())
return "";
return form.GetInnerText();
};
window['Asc']['asc_docs_api'].prototype.private_SetFormValue = function(internalId, value)
{
let oLogicDocument = this.private_GetLogicDocument();
if (!AscCommon.g_oTableId
|| !oLogicDocument
|| !oLogicDocument.IsDocumentEditor())
return;
let oForm = AscCommon.g_oTableId.GetClass(internalId);
if (!oForm
|| !(oForm instanceof AscWord.CInlineLevelSdt)
|| !oForm.IsForm())
return;
// При проверке лока внутри параграфа мы ориентируемся на выделение внутри этого параграфа
// поэтому нужно выделить форму
let state = oLogicDocument.SaveDocumentState();
oForm.SelectContentControl();
let oParagraph = oForm.GetParagraph();
oForm.SkipFillingFormModeCheck(true);
oForm.SkipSpecialContentControlLock(true);
if (!oParagraph
|| oLogicDocument.IsSelectionLocked(AscCommon.changestype_None, {
Type : AscCommon.changestype_2_ElementsArray_and_Type,
Elements : [oParagraph],
CheckType : AscCommon.changestype_Paragraph_Content
}, true, oLogicDocument.IsFillingFormMode()))
{
oLogicDocument.LoadDocumentState(state);
oForm.SkipFillingFormModeCheck(false);
oForm.SkipSpecialContentControlLock(false);
return;
}
oLogicDocument.LoadDocumentState(state);
oForm.SkipFillingFormModeCheck(false);
oForm.SkipSpecialContentControlLock(false);
oLogicDocument.StartAction(AscDFH.historydescription_Document_FillFormInPlugin);
let isClear = false;
if (null === value)
{
isClear = true;
}
else if (oForm.IsTextForm() || oForm.IsComboBox())
{
let sValue = AscBuilder.GetStringParameter(value, "");
if (!sValue)
isClear = true;
else
oForm.SetInnerText(sValue);
}
else if (oForm.IsDropDownList())
{
let sValue = AscBuilder.GetStringParameter(value, "");
let oPr = oForm.GetDropDownListPr();
let nIndex = oPr.FindByText(sValue);
if (-1 !== nIndex)
oForm.SelectListItem(oPr.GetItemValue(nIndex));
else
isClear = true;
}
else if (oForm.IsCheckBox())
{
let isChecked = value === "true" ? true : value === "false" ? false : AscBuilder.GetBoolParameter(value, null);
if (null !== isChecked)
oForm.SetCheckBoxChecked(isChecked);
else
isClear = true;
}
else if (oForm.IsPictureForm())
{
let sValue = AscBuilder.GetStringParameter(value, "");
if (!sValue)
return;
let oImg;
let allDrawings = oForm.GetAllDrawingObjects();
for (let nDrawing = 0; nDrawing < allDrawings.length; ++nDrawing)
{
if (allDrawings[nDrawing].IsPicture())
{
oImg = allDrawings[nDrawing].GraphicObj;
break;
}
}
if (oImg)
{
oForm.SetShowingPlcHdr(false);
oImg.setBlipFill(AscFormat.CreateBlipFillRasterImageId(sValue));
}
else
{
isClear = true;
}
}
else if (oForm.IsDatePicker())
{
let sValue = AscBuilder.GetStringParameter(value, "");
if (!sValue)
isClear = true;
else
oForm.SetInnerText(sValue);
// TODO: Надо FullDate попытаться выставить по заданному значение. Сейчас мы всегда сбрасываем на текущую дату
let datePickerPr = oForm.GetDatePickerPr().Copy();
datePickerPr.SetFullDate(null);
oForm.SetDatePickerPr(datePickerPr);
}
if (isClear)
oForm.ClearContentControlExt();
oLogicDocument.OnChangeForm(oForm);
oLogicDocument.Recalculate();
oLogicDocument.UpdateTracks();
oLogicDocument.UpdateInterface();
oLogicDocument.FinalizeAction();
};
function private_CheckFormKey(form, logicDocument)
{
@ -657,79 +424,5 @@ window["AscOForm"] = window.AscOForm = AscOForm;
formPr.SetKey(key);
form.SetFormPr(formPr);
}
function private_CheckRadioButtonChoice(form, logicDocument, groupKey)
{
if (!form || !form.IsForm() || !logicDocument)
return;
let choice = form.GetFormKey();
if (choice && "" !== choice.trim())
return;
let formManager = logicDocument.GetFormsManager();
let keyGenerator = formManager.GetKeyGenerator();
let formPr = form.GetFormPr().Copy();
if (!formPr)
return;
choice = keyGenerator.GetNewChoiceByGroupKey(groupKey);
formPr.SetKey(choice);
form.SetFormPr(formPr);
}
function private_ApplyFormPr(form, formPr, logicDocument)
{
if (!form || !formPr)
return;
form.SetFormPr(formPr.Copy());
if (!form.IsMainForm() && form.GetMainForm().GetFormRole() !== formPr.GetRole())
form.SetFormRole(form.GetMainForm().GetFormRole());
let docPartId = form.GetPlaceholder();
let glossary = logicDocument.GetGlossaryDocument();
if ((form.IsTextForm()
|| form.IsDropDownList()
|| form.IsComboBox()
|| form.IsDatePicker())
&&
(docPartId === glossary.GetDefaultPlaceholderTextDocPartId()
|| docPartId === glossary.GetDefaultPlaceholderListDocPartId()
|| docPartId === glossary.GetDefaultPlaceholderDateTimeDocPartId()))
{
if (docPartId === glossary.GetDefaultPlaceholderTextDocPartId())
form.SetPlaceholder(glossary.GetDefaultPlaceholderTextOformDocPartId());
else if (docPartId === glossary.GetDefaultPlaceholderListDocPartId())
form.SetPlaceholder(glossary.GetDefaultPlaceholderListOformDocPartId());
else if (docPartId === glossary.GetDefaultPlaceholderDateTimeDocPartId())
form.SetPlaceholder(glossary.GetDefaultPlaceholderDateTimeOformDocPartId());
if (form.IsPlaceHolder())
form.private_FillPlaceholderContent();
}
let paragraph = form.GetParagraph();
if (form.IsMainForm() && formPr.GetFixed() && (!paragraph || !paragraph.GetParentShape()))
{
logicDocument.Recalculate(true);
let drawing = form.ConvertFormToFixed();
if (drawing)
drawing.SelectAsDrawing();
}
}
function CheckCurrentSelection(logicDocument, isComplex)
{
let form = logicDocument.GetContentControl();
if (!form || !form.IsForm() || (form.IsComplexForm() && !isComplex))
return;
if (isComplex)
form = form.GetMainForm();
form.MoveCursorOutsideForm(false);
}
})(window, window.document);

View File

@ -1,5 +1,5 @@
/*
* (c) Copyright Ascensio System SIA 2010-2024
* (c) Copyright Ascensio System SIA 2010-2019
*
* 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)
@ -12,7 +12,7 @@
* 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
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
@ -38,13 +38,10 @@
// Import
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const AscBuilder = window["AscBuilder"];
const ApiDocument = AscBuilder.ApiDocument;
const GetStringParameter = AscBuilder.GetStringParameter;
const GetBoolParameter = AscBuilder.GetBoolParameter;
const GetNumberParameter = AscBuilder.GetNumberParameter;
const GetArrayParameter = AscBuilder.GetArrayParameter;
const executeNoFormLockCheck = AscBuilder.executeNoFormLockCheck;
const GetStringParameter = AscBuilder.GetStringParameter;
const GetBoolParameter = AscBuilder.GetBoolParameter;
const GetNumberParameter = AscBuilder.GetNumberParameter;
const GetArrayParameter = AscBuilder.GetArrayParameter;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
@ -58,62 +55,40 @@
/**
* Common form properties.
* @typedef {Object} FormPrBase
* @property {string} key - The form key.
* @property {string} tip - The form tip text.
* @property {string} tag - The form tag.
* @property {string} role - The role to fill out form.
* @property {string} key - Form key.
* @property {string} tip - Form tip text.
* @property {boolean} required - Specifies if the form is required or not.
* @property {string} placeholder - The form placeholder text.
* @see office-js-api/Examples/Enumerations/FormPrBase.js
* @property {string} placeholder - Form placeholder text.
*/
/**
* Specific text field properties.
* Specific text form properties.
* @typedef {Object} TextFormPrBase
* @property {boolean} comb - Specifies if the text field should be a comb of characters with the same cell width. The maximum number of characters must be set to a positive value.
* @property {number} maxCharacters - The maximum number of characters in the text field.
* @property {boolean} comb - Specifies if the text form should be a comb of characters with the same cell width. The maximum number of characters must be set to a positive value.
* @property {number} maxCharacters - The maximum number of characters in the text form.
* @property {number} cellWidth - The cell width for each character measured in millimeters. If this parameter is not specified or equal to 0 or less, then the width will be set automatically.
* @property {boolean} multiLine - Specifies if the current fixed size text field is multiline or not.
* @property {boolean} autoFit - Specifies if the text field content should be autofit, i.e. whether the font size adjusts to the size of the fixed size form.
* @see office-js-api/Examples/Enumerations/TextFormPrBase.js
* @property {boolean} multiLine - Specifies if the current fixed size text form is multiline or not.
* @property {boolean} autoFit - Specifies if the text form content should be autofit, i.e. whether the font size adjusts to the size of the fixed size form.
*/
/**
* Text field properties.
* Text form properties.
* @typedef {FormPrBase | TextFormPrBase} TextFormPr
* @see office-js-api/Examples/Enumerations/TextFormPr.js
*/
/**
* Form insertion specific properties.
* @typedef {Object} FormInsertPr
* @property {boolean} [placeholderFromSelection=false] - Specifies if the currently selected text should be saved as a placeholder of the inserted form.
* @property {boolean} [keepSelectedTextInForm=true] - Specifies if the currently selected text should be saved as the content of the inserted form.
* @see office-js-api/Examples/Enumerations/FormInsertPr.js
*/
/**
* Properties for inserting a text field.
* @typedef {FormPrBase | TextFormPrBase | FormInsertPr} TextFormInsertPr
* @see office-js-api/Examples/Enumerations/TextFormInsertPr.js
*/
/**
* Specific checkbox / radio button properties.
* Specific checkbox properties.
* @typedef {Object} CheckBoxFormPrBase
* @property {boolean} radio - Specifies if the current checkbox is a radio button. In this case, the key parameter is considered as an identifier for the group of radio buttons.
* @see office-js-api/Examples/Enumerations/CheckBoxFormPrBase.js
*/
/**
* Checkbox / radio button properties.
* Checkbox form properties.
* @typedef {FormPrBase | CheckBoxFormPrBase} CheckBoxFormPr
* @see office-js-api/Examples/Enumerations/CheckBoxFormPr.js
*/
/**
* Specific combo box / dropdown list properties.
* Specific combo box properties.
* @typedef {Object} ComboBoxFormPrBase
* @property {boolean} editable - Specifies if the combo box text can be edited.
* @property {boolean} autoFit - Specifies if the combo box form content should be autofit, i.e. whether the font size adjusts to the size of the fixed size form.
@ -122,25 +97,21 @@
     * If the array consists of single strings, then the displayed value and its meaning are the same.
     * Example: ["First", ["Second", "2"], ["Third", "3"], "Fourth"].
* @see office-js-api/Examples/Enumerations/ComboBoxFormPrBase.js
*/
/**
* Combo box / dropdown list properties.
* Combo box form properties.
* @typedef {FormPrBase | ComboBoxFormPrBase} ComboBoxFormPr
* @see office-js-api/Examples/Enumerations/ComboBoxFormPr.js
*/
/**
* The condition to scale an image in the picture form.
* @typedef {"always" | "never" | "tooBig" | "tooSmall"} ScaleFlag
* @see office-js-api/Examples/Enumerations/ScaleFlag.js
*/
/**
* Value from 0 to 100.
* @typedef {number} percentage
* @see office-js-api/Examples/Enumerations/percentage.js
*/
/**
@ -150,607 +121,264 @@
* @property {boolean} lockAspectRatio - Specifies if the aspect ratio of the picture form is locked or not.
* @property {boolean} respectBorders - Specifies if the form border width is respected or not when scaling the image.
* @property {percentage} shiftX - Horizontal picture position inside the picture form measured in percent:
* <b>0</b> - the picture is placed on the left;
* <b>50</b> - the picture is placed in the center;
* <b>100</b> - the picture is placed on the right.
* * <b>0</b> - the picture is placed on the left;
* * <b>50</b> - the picture is placed in the center;
* * <b>100</b> - the picture is placed on the right.
* @property {percentage} shiftY - Vertical picture position inside the picture form measured in percent:
* <b>0</b> - the picture is placed on top;
* <b>50</b> - the picture is placed in the center;
* <b>100</b> - the picture is placed on the bottom.
* @see office-js-api/Examples/Enumerations/PictureFormPrBase.js
* * <b>0</b> - the picture is placed on top;
* * <b>50</b> - the picture is placed in the center;
* * <b>100</b> - the picture is placed on the bottom.
*/
/**
* Picture form properties.
* @typedef {FormPrBase | PictureFormPrBase} PictureFormPr
* @see office-js-api/Examples/Enumerations/PictureFormPr.js
*/
/**
* Specific date form properties.
* @typedef {Object} DateFormPrBase
* @property {string} format - The date format, ex: mm.dd.yyyy
* @property {string} lang - The date language. Possible value for this parameter is a language identifier as defined by
* RFC 4646/BCP 47. Example: "en-CA".
* @see office-js-api/Examples/Enumerations/DateFormPrBase.js
*/
/**
* Date form properties.
* @typedef {FormPrBase | DateFormPrBase} DateFormPr
* @see office-js-api/Examples/Enumerations/DateFormPr.js
*/
/**
* Creates a text field with the specified text field properties.
* Creates a text form with the specified text form properties.
* @memberof Api
* @typeofeditors ["CDE", "CFE"]
* @param {TextFormPr} formPr - Text field properties.
* @param {TextFormPr} oFormPr - Text form properties.
* @returns {ApiTextForm}
* @see office-js-api/Examples/Forms/Api/Methods/CreateTextForm.js
*/
Api.prototype.CreateTextForm = function(formPr)
Api.prototype.CreateTextForm = function(oFormPr)
{
return executeNoFormLockCheck(function()
{
if (!formPr)
formPr = {};
let form = CreateCommonForm(formPr);
ApplyTextFormPr(form, formPr);
CheckForm(form);
return new AscBuilder.ApiTextForm(form);
}, this);
if (!oFormPr)
oFormPr = {};
let oCC = CreateCommonForm(oFormPr);
let oPr = new AscCommon.CSdtTextFormPr();
oPr.SetComb(GetBoolParameter(oFormPr["comb"], false));
oPr.SetMaxCharacters(GetNumberParameter(oFormPr["maxCharacters"], -1));
oPr.SetMultiLine(GetBoolParameter(oFormPr["multiLine"], false));
oPr.SetAutoFit(GetBoolParameter(oFormPr["autoFit"], false));
oPr.SetWidth((GetNumberParameter(oFormPr["cellWidth"], 0) * 72 * 20 / 25.4) | 0);
oCC.ApplyTextFormPr(oPr);
CheckFormKey(oCC);
return new AscBuilder.ApiTextForm(oCC);
};
/**
* Creates a checkbox / radio button with the specified checkbox / radio button properties.
* Creates a checkbox/radio button form with the specified checkbox/radio button form properties.
* @memberof Api
* @typeofeditors ["CDE", "CFE"]
* @param {CheckBoxFormPr} formPr - Checkbox / radio button properties.
* @param {CheckBoxFormPr} oFormPr - Checkbox/radio button form properties.
* @returns {ApiCheckBoxForm}
* @see office-js-api/Examples/Forms/Api/Methods/CreateCheckBoxForm.js
*/
Api.prototype.CreateCheckBoxForm = function(formPr)
Api.prototype.CreateCheckBoxForm = function(oFormPr)
{
return executeNoFormLockCheck(function()
if (!oFormPr)
oFormPr = {};
oFormPr["placeholder"] = undefined;
var oCC;
var oCheckboxPr = new AscCommon.CSdtCheckBoxPr();
if (GetBoolParameter(oFormPr["radio"], false))
{
if (!formPr)
formPr = {};
formPr["placeholder"] = undefined;
var oCC;
var oCheckboxPr = new AscCommon.CSdtCheckBoxPr();
if (GetBoolParameter(formPr["radio"], false))
{
oCheckboxPr.CheckedSymbol = 0x25C9;
oCheckboxPr.UncheckedSymbol = 0x25CB;
oCheckboxPr.GroupKey = GetStringParameter(formPr["key"], "Group1");
}
else
{
oCheckboxPr.CheckedSymbol = 0x2611;
oCheckboxPr.UncheckedSymbol = 0x2610;
}
oCheckboxPr.CheckedFont = "Segoe UI Symbol";
oCheckboxPr.UncheckedFont = "Segoe UI Symbol";
var nCheckedSymbol = oCheckboxPr && oCheckboxPr.CheckedSymbol ? oCheckboxPr.CheckedSymbol : Asc.c_oAscSdtCheckBoxDefaults.CheckedSymbol;
var nUncheckedSymbol = oCheckboxPr && oCheckboxPr.UncheckedSymbol ? oCheckboxPr.UncheckedSymbol : Asc.c_oAscSdtCheckBoxDefaults.UncheckedSymbol;
var sCheckedFont = oCheckboxPr && oCheckboxPr.CheckedFont ? oCheckboxPr.CheckedFont : Asc.c_oAscSdtCheckBoxDefaults.CheckedFont;
var sUncheckedFont = oCheckboxPr && oCheckboxPr.UncheckedFont ? oCheckboxPr && oCheckboxPr.UncheckedFont : Asc.c_oAscSdtCheckBoxDefaults.UncheckedFont;
var isLoadFonts = false;
if (!AscCommon.IsAscFontSupport(sCheckedFont, nCheckedSymbol))
{
isLoadFonts = true;
AscFonts.FontPickerByCharacter.getFontBySymbol(nCheckedSymbol);
}
if (!AscCommon.IsAscFontSupport(sUncheckedFont, nUncheckedSymbol))
{
isLoadFonts = true;
AscFonts.FontPickerByCharacter.getFontBySymbol(nUncheckedSymbol);
}
function private_PerformAddCheckBox()
{
oCC = CreateCommonForm(formPr);
oCC.ApplyCheckBoxPr(oCheckboxPr);
}
if (isLoadFonts)
{
var oFonts = {};
oFonts[sCheckedFont] = true;
oFonts[sUncheckedFont] = true;
AscCommon.Check_LoadingDataBeforePrepaste(this, oFonts, {}, private_PerformAddCheckBox);
}
else
{
private_PerformAddCheckBox();
}
CheckForm(oCC);
return new AscBuilder.ApiCheckBoxForm(oCC);
}, this);
oCheckboxPr.CheckedSymbol = 0x25C9;
oCheckboxPr.UncheckedSymbol = 0x25CB;
oCheckboxPr.GroupKey = GetStringParameter(oFormPr["key"], "Group1");
}
else
{
oCheckboxPr.CheckedSymbol = 0x2611;
oCheckboxPr.UncheckedSymbol = 0x2610;
}
oCheckboxPr.CheckedFont = "Segoe UI Symbol";
oCheckboxPr.UncheckedFont = "Segoe UI Symbol";
var nCheckedSymbol = oCheckboxPr && oCheckboxPr.CheckedSymbol ? oCheckboxPr.CheckedSymbol : Asc.c_oAscSdtCheckBoxDefaults.CheckedSymbol;
var nUncheckedSymbol = oCheckboxPr && oCheckboxPr.UncheckedSymbol ? oCheckboxPr.UncheckedSymbol : Asc.c_oAscSdtCheckBoxDefaults.UncheckedSymbol;
var sCheckedFont = oCheckboxPr && oCheckboxPr.CheckedFont ? oCheckboxPr.CheckedFont : Asc.c_oAscSdtCheckBoxDefaults.CheckedFont;
var sUncheckedFont = oCheckboxPr && oCheckboxPr.UncheckedFont ? oCheckboxPr && oCheckboxPr.UncheckedFont : Asc.c_oAscSdtCheckBoxDefaults.UncheckedFont;
var isLoadFonts = false;
if (!AscCommon.IsAscFontSupport(sCheckedFont, nCheckedSymbol))
{
isLoadFonts = true;
AscFonts.FontPickerByCharacter.getFontBySymbol(nCheckedSymbol);
}
if (!AscCommon.IsAscFontSupport(sUncheckedFont, nUncheckedSymbol))
{
isLoadFonts = true;
AscFonts.FontPickerByCharacter.getFontBySymbol(nUncheckedSymbol);
}
function private_PerformAddCheckBox()
{
oCC = CreateCommonForm(oFormPr);
oCC.ApplyCheckBoxPr(oCheckboxPr);
}
if (isLoadFonts)
{
var oFonts = {};
oFonts[sCheckedFont] = true;
oFonts[sUncheckedFont] = true;
AscCommon.Check_LoadingDataBeforePrepaste(this, oFonts, {}, private_PerformAddCheckBox);
}
else
{
private_PerformAddCheckBox();
}
CheckFormKey(oCC);
return new AscBuilder.ApiCheckBoxForm(oCC);
};
/**
* Creates a combo box / dropdown list with the specified combo box / dropdown list properties.
* Creates a combo box/dropdown form with the specified combo box/dropdown form properties.
* @memberof Api
* @typeofeditors ["CDE", "CFE"]
* @param {ComboBoxFormPr} formPr - Combo box / dropdown list properties.
* @param {ComboBoxFormPr} oFormPr - Combo box/dropdown form properties.
* @returns {ApiComboBoxForm}
* @see office-js-api/Examples/Forms/Api/Methods/CreateComboBoxForm.js
*/
Api.prototype.CreateComboBoxForm = function(formPr)
Api.prototype.CreateComboBoxForm = function(oFormPr)
{
return executeNoFormLockCheck(function()
if (!oFormPr)
oFormPr = {};
var oPr = new AscCommon.CSdtComboBoxPr();
oPr.AddItem(AscCommon.translateManager.getValue("Choose an item"), "");
var oCC = CreateCommonForm(oFormPr);
let sPlaceholder = GetStringParameter(oFormPr["placeholder"], undefined);
let arrList = GetArrayParameter(oFormPr["items"], []);
for (let nIndex = 0, nCount = arrList.length; nIndex < nCount; ++nIndex)
{
if (!formPr)
formPr = {};
var oPr = new AscCommon.CSdtComboBoxPr();
oPr.AddItem(AscCommon.translateManager.getValue("Choose an item"), "");
var oCC = CreateCommonForm(formPr);
let sPlaceholder = GetStringParameter(formPr["placeholder"], undefined);
let arrList = GetArrayParameter(formPr["items"], []);
for (let nIndex = 0, nCount = arrList.length; nIndex < nCount; ++nIndex)
let oItem = arrList[nIndex];
if (GetStringParameter(oItem, null))
{
let oItem = arrList[nIndex];
if (GetStringParameter(oItem, null))
{
oPr.AddItem(oItem, oItem);
}
else if (GetArrayParameter(oItem, null))
{
let sDisplay = GetStringParameter(oItem[0], null);
let sValue = GetStringParameter(oItem[1], null);
if (null !== sDisplay && null !== sValue)
oPr.AddItem(sDisplay, sValue);
}
oPr.AddItem(oItem, oItem);
}
oPr.SetAutoFit(GetBoolParameter(formPr["autoFit"], false));
if (!GetBoolParameter(formPr["editable"], false))
else if (GetArrayParameter(oItem, null))
{
if (sPlaceholder)
{
oCC.ApplyDropDownListPr(oPr);
}
else
{
oCC.SetDropDownListPr(oPr);
oCC.SelectListItem();
}
let sDisplay = GetStringParameter(oItem[0], null);
let sValue = GetStringParameter(oItem[1], null);
if (null !== sDisplay && null !== sValue)
oPr.AddItem(sDisplay, sValue);
}
}
oPr.SetAutoFit(GetBoolParameter(oFormPr["autoFit"], false));
if (!GetBoolParameter(oFormPr["editable"], false))
{
if (sPlaceholder)
{
oCC.ApplyDropDownListPr(oPr);
}
else
{
if (sPlaceholder)
{
oCC.ApplyComboBoxPr(oPr);
}
else
{
oCC.SetComboBoxPr(oPr);
oCC.SelectListItem();
}
oCC.SetDropDownListPr(oPr);
oCC.SelectListItem();
}
CheckForm(oCC);
return new AscBuilder.ApiComboBoxForm(oCC);
}, this);
}
else
{
if (sPlaceholder)
{
oCC.ApplyComboBoxPr(oPr);
}
else
{
oCC.SetComboBoxPr(oPr);
oCC.SelectListItem();
}
}
CheckFormKey(oCC);
return new AscBuilder.ApiComboBoxForm(oCC);
};
/**
* Creates a picture form with the specified picture form properties.
* @memberof Api
* @typeofeditors ["CDE", "CFE"]
* @param {PictureFormPr} formPr - Picture form properties.
* @param {PictureFormPr} oFormPr - Picture form properties.
* @returns {ApiPictureForm}
* @see office-js-api/Examples/Forms/Api/Methods/CreatePictureForm.js
*/
Api.prototype.CreatePictureForm = function(formPr)
Api.prototype.CreatePictureForm = function(oFormPr)
{
return executeNoFormLockCheck(function()
{
if (!formPr)
formPr = {};
if (GetStringParameter("placeholder", null))
formPr["placeholder"] = AscCommon.translateManager.getValue("Click to load image");
var oCC = CreateCommonForm(formPr);
oCC.ApplyPicturePr(true);
oCC.ConvertFormToFixed();
let oPr = new AscCommon.CSdtPictureFormPr();
let sScale = GetStringParameter(formPr["scaleFlag"], undefined);
switch (sScale)
{
case "always":
oPr.SetScaleFlag(Asc.c_oAscPictureFormScaleFlag.Always);
break;
case "never":
oPr.SetScaleFlag(Asc.c_oAscPictureFormScaleFlag.Never);
break;
case "tooBig":
oPr.SetScaleFlag(Asc.c_oAscPictureFormScaleFlag.Bigger);
break;
case "tooSmall":
oPr.SetScaleFlag(Asc.c_oAscPictureFormScaleFlag.Smaller);
break;
}
oPr.SetConstantProportions(GetBoolParameter(formPr["lockAspectRatio"], true));
oPr.SetRespectBorders(GetBoolParameter(formPr["respectBorders"], false));
oPr.SetShiftX(Math.max(0, Math.min(100, GetNumberParameter(formPr["shiftX"], 50))) / 100);
oPr.SetShiftY(Math.max(0, Math.min(100, GetNumberParameter(formPr["shiftY"], 50))) / 100);
oCC.SetPictureFormPr(oPr);
CheckForm(oCC);
return new AscBuilder.ApiPictureForm(oCC);
}, this);
};
/**
* Creates a date form with the specified date form properties.
* @memberof Api
* @typeofeditors ["CDE", "CFE"]
* @param {DateFormPr} formPr - Date form properties.
* @returns {ApiDateForm}
* @see office-js-api/Examples/Forms/Api/Methods/CreateDateForm.js
*/
Api.prototype.CreateDateForm = function(formPr)
{
return executeNoFormLockCheck(function()
{
if (!formPr)
formPr = {};
let form = CreateCommonForm(formPr);
ApplyDateFormPr(form, formPr);
CheckForm(form);
return new AscBuilder.ApiDateForm(form);
}, this);
};
/**
* Creates a complex form with the specified complex form properties.
* @memberof Api
* @typeofeditors ["CDE", "CFE"]
* @param {FormPrBase} formPr - Complex form properties.
* @returns {ApiComplexForm}
* @see office-js-api/Examples/Forms/Api/Methods/CreateComplexForm.js
*/
Api.prototype.CreateComplexForm = function(formPr)
{
return executeNoFormLockCheck(function()
{
if (!formPr)
formPr = {};
if (!oFormPr)
oFormPr = {};
let form = CreateCommonForm(formPr);
ApplyComplexFormPr(form);
CheckForm(form);
return new AscBuilder.ApiComplexForm(form);
}, this);
};
/**
* Inserts a text box with the specified text box properties over the selected text.
* @memberof ApiDocument
* @typeofeditors ["CDE", "CFE"]
* @param {TextFormInsertPr} formPr - Properties for inserting a text field.
* @returns {ApiTextForm}
* @see office-js-api/Examples/Forms/ApiDocument/Methods/InsertTextForm.js
*/
ApiDocument.prototype.InsertTextForm = function(formPr)
{
return executeNoFormLockCheck(function()
if (GetStringParameter("placeholder", null))
oFormPr["placeholder"] = AscCommon.translateManager.getValue("Click to load image");
var oCC = CreateCommonForm(oFormPr);
oCC.ApplyPicturePr(true);
oCC.ConvertFormToFixed();
let oPr = new AscCommon.CSdtPictureFormPr();
let sScale = GetStringParameter(oFormPr["scaleFlag"], undefined);
switch (sScale)
{
if (!formPr)
formPr = {};
let logicDocument = this.Document;
let placeholder = GetStringParameter(formPr["placeholder"], undefined);
if (GetBoolParameter(formPr["placeholderFromSelection"], false))
placeholder = logicDocument.GetSelectedText();
if (!GetBoolParameter(formPr["keepSelectedTextInForm"], true))
logicDocument.RemoveBeforePaste();
let contentControl = logicDocument.AddContentControl(c_oAscSdtLevelType.Inline);
if (!contentControl)
return null;
ApplyCommonFormPr(contentControl, formPr);
SetFormPlaceholder(contentControl, placeholder);
ApplyTextFormPr(contentControl, formPr, true);
CheckForm(contentControl);
return new AscBuilder.ApiTextForm(contentControl);
}, this);
};
/**
* Class representing a collection of form roles.
* @constructor
* @since 9.0.0
* @typeofeditors ["CDE", "CFE"]
*/
function ApiFormRoles(oform)
{
this.oform = oform;
}
/**
* The date form properties.
* @typedef {FormPrBase | DateFormPrBase} DateFormPr
* @see office-js-api/Examples/Enumerations/DateFormPr.js
*/
/**
* The role properties.
* @typedef {Object} RoleProperties
* @property {string} color - The role color.
* @see office-js-api/Examples/Enumerations/RoleProperties.js
*/
/**
* Returns a collection of form roles.
* @since 9.0.0
* @typeofeditors ["CDE", "CFE"]
* @returns {ApiFormRoles}
* @see office-js-api/Examples/Forms/ApiDocument/Methods/GetFormRoles.js
*/
ApiDocument.prototype.GetFormRoles = function()
{
return new ApiFormRoles(this.Document.GetOFormDocument());
};
/**
* Adds a new form role.
* @memberof ApiFormRoles
* @since 9.0.0
* @typeofeditors ["CDE", "CFE"]
* @param {string} name - The name of role being added.
* @param {RoleProperties} props - The role properties.
* @returns {boolean}
* @see office-js-api/Examples/Forms/ApiFormRoles/Methods/Add.js
*/
ApiFormRoles.prototype.Add = function(name, props)
{
if (!this.oform || !name || this.oform.getRole(name))
return false;
let rgba = ParseRoleColor(props && props["color"] ? props["color"] : null);
let rolePr = new AscOForm.CRoleSettings();
rolePr.Name = name;
rolePr.Color = AscCommon.CreateAscColorCustom(rgba.R, rgba.G, rgba.B);
this.oform.addRole(rolePr);
return true;
};
/**
* Removes a role with the specified name.
* @memberof ApiFormRoles
* @since 9.0.0
* @typeofeditors ["CDE", "CFE"]
* @param {string} name - The name of role to be removed.
* @param {string} [delegateRole] - The name of the role to which all forms bound to this role will be delegated.
* @returns {boolean}
* @see office-js-api/Examples/Forms/ApiFormRoles/Methods/Remove.js
*/
ApiFormRoles.prototype.Remove = function(name, delegateRole)
{
if (!this.oform)
return false;
return this.oform.removeRole(name, delegateRole);
};
/**
* Returns a number of form roles.
* @memberof ApiFormRoles
* @since 9.0.0
* @typeofeditors ["CDE", "CFE"]
* @returns {number}
* @see office-js-api/Examples/Forms/ApiFormRoles/Methods/GetCount.js
*/
ApiFormRoles.prototype.GetCount = function()
{
if (!this.oform)
return 0;
return this.oform.getAllRoles().length;
};
/**
* Lists all available roles.
* @memberof ApiFormRoles
* @since 9.0.0
* @typeofeditors ["CDE", "CFE"]
* @returns {string[]}
* @see office-js-api/Examples/Forms/ApiFormRoles/Methods/GetAllRoles.js
*/
ApiFormRoles.prototype.GetAllRoles = function()
{
if (!this.oform)
return [];
let roles = this.oform.getAllRoles();
let result = [];
for (let i = 0; i < roles.length; ++i)
{
result.push(roles[i].getRole());
case "always": oPr.SetScaleFlag(Asc.c_oAscPictureFormScaleFlag.Always); break;
case "never": oPr.SetScaleFlag(Asc.c_oAscPictureFormScaleFlag.Never); break;
case "tooBig": oPr.SetScaleFlag(Asc.c_oAscPictureFormScaleFlag.Bigger); break;
case "tooSmall": oPr.SetScaleFlag(Asc.c_oAscPictureFormScaleFlag.Smaller); break;
}
return result;
oPr.SetConstantProportions(GetBoolParameter(oFormPr["lockAspectRatio"], true));
oPr.SetRespectBorders(GetBoolParameter(oFormPr["respectBorders"], false));
oPr.SetShiftX(Math.max(0, Math.min(100, GetNumberParameter(oFormPr["shiftX"], 50))) / 100);
oPr.SetShiftY(Math.max(0, Math.min(100, GetNumberParameter(oFormPr["shiftY"], 50))) / 100);
oCC.SetPictureFormPr(oPr);
CheckFormKey(oCC);
return new AscBuilder.ApiPictureForm(oCC);
};
/**
* Checks if a role with the specified name exists.
* @memberof ApiFormRoles
* @since 9.0.0
* @typeofeditors ["CDE", "CFE"]
* @param {string} name - The role name.
* @returns {boolean}
* @see office-js-api/Examples/Forms/ApiFormRoles/Methods/HaveRole.js
* Creates a complex form with the specified base form properties.
* @memberof Api
* @param {FormPrBase} oFormPr - base form property.
* @returns {ApiComplexForm}
*/
ApiFormRoles.prototype.HaveRole = function(name)
Api.prototype.CreateComplexForm = function(oFormPr)
{
return this.oform && this.oform.haveRole(name);
};
/**
* Returns the RGB color of the specified role.
* @memberof ApiFormRoles
* @since 9.0.0
* @typeofeditors ["CDE", "CFE"]
* @param {string} name - The role name.
* @returns {null | {r:byte, g:byte, b:byte}}
* @see office-js-api/Examples/Forms/ApiFormRoles/Methods/GetRoleColor.js
*/
ApiFormRoles.prototype.GetRoleColor = function(name)
{
if (!this.oform || !this.oform.haveRole(name))
return null;
let color = this.oform.getRoleSettings(name).getColor();
if (!color)
return null;
return {
"r" : color.r,
"g" : color.g,
"b" : color.b
};
};
/**
* Sets the color for the specified role.
* @memberof ApiFormRoles
* @since 9.0.0
* @typeofeditors ["CDE", "CFE"]
* @param {string} name - The role name.
* @param {string} color - The role color.
* @returns {boolean}
* @see office-js-api/Examples/Forms/ApiFormRoles/Methods/SetRoleColor.js
*/
ApiFormRoles.prototype.SetRoleColor = function(name, color)
{
if (!this.oform || !this.oform.haveRole(name))
return false;
let rgba = ParseRoleColor(color);
let rolePr = new AscOForm.CRoleSettings();
rolePr.Name = name;
rolePr.Color = AscCommon.CreateAscColorCustom(rgba.R, rgba.G, rgba.B);
this.oform.editRole(name, rolePr);
return true;
};
/**
* Moves a role up in filling order.
* @memberof ApiFormRoles
* @since 9.0.0
* @typeofeditors ["CDE", "CFE"]
* @param {string} name - The role name.
* @returns {boolean}
* @see office-js-api/Examples/Forms/ApiFormRoles/Methods/MoveUp.js
*/
ApiFormRoles.prototype.MoveUp = function(name)
{
if (!this.oform)
return false;
return this.oform.moveUpRole(name);
};
/**
* Moves a role down in filling order.
* @memberof ApiFormRoles
* @since 9.0.0
* @typeofeditors ["CDE", "CFE"]
* @param {string} name - The role name.
* @returns {boolean}
* @see office-js-api/Examples/Forms/ApiFormRoles/Methods/MoveDown.js
*/
ApiFormRoles.prototype.MoveDown = function(name)
{
if (!this.oform)
return false;
return this.oform.moveDownRole(name);
if (!oFormPr)
oFormPr = {};
let oCC = CreateCommonForm(oFormPr);
let oComplexPr = new AscWord.CSdtComplexFormPr();
oCC.SetComplexFormPr(oComplexPr);
CheckFormKey(oCC);
return new AscBuilder.ApiComplexForm(oCC);
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Private area
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function CreateCommonForm(formPr)
function CreateCommonForm(oFormPr)
{
let contentControl = new AscCommonWord.CInlineLevelSdt();
if (!oFormPr)
oFormPr = {};
ApplyCommonFormPr(contentControl, formPr);
let placeholder = formPr ? GetStringParameter(formPr["placeholder"], undefined) : undefined;
SetFormPlaceholder(contentControl, placeholder);
let tag = formPr ? GetStringParameter(formPr["tag"], undefined) : undefined;
if (tag)
contentControl.SetTag(tag);
contentControl.ReplaceContentWithPlaceHolder(false);
contentControl.UpdatePlaceHolderTextPrForForm();
return contentControl;
}
function SetFormPlaceholder(form, text)
{
if (text)
form.SetPlaceholderText(text);
var oTempFormPr = new AscCommon.CSdtFormPr();
oTempFormPr.SetHelpText(GetStringParameter(oFormPr["tip"], undefined));
oTempFormPr.SetRequired(GetBoolParameter(oFormPr["required"], false));
oTempFormPr.SetKey(GetStringParameter(oFormPr["key"], undefined));
var oCC = new AscCommonWord.CInlineLevelSdt();
let sPlaceHolder = GetStringParameter(oFormPr["placeholder"], undefined);
if (sPlaceHolder)
oCC.SetPlaceholderText(sPlaceHolder);
else
form.SetPlaceholder(c_oAscDefaultPlaceholderName.Text);
}
function ApplyCommonFormPr(form, formPr)
{
if (!formPr)
formPr = {};
let sdtFormPr = new AscCommon.CSdtFormPr();
sdtFormPr.SetHelpText(GetStringParameter(formPr["tip"], undefined));
sdtFormPr.SetRequired(GetBoolParameter(formPr["required"], false));
sdtFormPr.SetKey(GetStringParameter(formPr["key"], undefined));
sdtFormPr.SetRole(GetStringParameter(formPr["role"], undefined));
form.SetFormPr(sdtFormPr);
}
function ApplyTextFormPr(form, formPr, keepContent)
{
let textFormPr = new AscCommon.CSdtTextFormPr();
textFormPr.SetComb(GetBoolParameter(formPr["comb"], false));
textFormPr.SetMaxCharacters(GetNumberParameter(formPr["maxCharacters"], -1));
textFormPr.SetMultiLine(GetBoolParameter(formPr["multiLine"], false));
textFormPr.SetAutoFit(GetBoolParameter(formPr["autoFit"], false));
textFormPr.SetWidth((GetNumberParameter(formPr["cellWidth"], 0) * 72 * 20 / 25.4) | 0);
form.ApplyTextFormPr(textFormPr, keepContent);
}
function ApplyDateFormPr(form, formPr)
{
let datePickerPr = new AscCommon.CSdtDatePickerPr();
oCC.SetPlaceholder(c_oAscDefaultPlaceholderName.Text);
var nLcid = Asc.g_oLcidNameToIdMap[formPr["lang"]];
if (undefined == nLcid)
nLcid = 1033;
oCC.ReplaceContentWithPlaceHolder(false);
oCC.SetFormPr(oTempFormPr);
oCC.UpdatePlaceHolderTextPrForForm();
datePickerPr.SetDateFormat(GetStringParameter(formPr["format"], "mm/dd/yyyy"));
datePickerPr.SetLangId(nLcid);
form.ApplyDatePickerPr(datePickerPr);
}
function ApplyComplexFormPr(form)
{
let complexFormPr = new AscWord.CSdtComplexFormPr();
form.SetComplexFormPr(complexFormPr);
}
function CheckForm(form)
{
CheckFormKey(form);
CheckFormRole(form);
return oCC;
}
function CheckFormKey(form)
{
@ -773,52 +401,12 @@
formPr.SetKey(key);
form.SetFormPr(formPr);
}
function CheckFormRole(form)
{
let logicDocument = editor && editor.WordControl && editor.WordControl.m_oLogicDocument;
if (!form || !form.IsForm() || !logicDocument)
return;
let role = form.GetFormRole();
if (role && "" !== role.trim())
return;
let oform = logicDocument.GetOFormDocument();
if (!oform)
return;
let defaultRole = oform.getDefaultRole();
if (!defaultRole)
return;
form.SetFormRole(defaultRole.getRole());
}
function ParseRoleColor(color)
{
return color ? AscCommon.RgbaTextToRGBA(color) : {R : 254, G : 248, B : 229, A : 255};
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Export
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Api.prototype["CreateTextForm"] = Api.prototype.CreateTextForm;
Api.prototype["CreatePictureForm"] = Api.prototype.CreatePictureForm;
Api.prototype["CreateDateForm"] = Api.prototype.CreateDateForm;
Api.prototype["CreateCheckBoxForm"] = Api.prototype.CreateCheckBoxForm;
Api.prototype["CreateComboBoxForm"] = Api.prototype.CreateComboBoxForm;
Api.prototype["CreateComplexForm"] = Api.prototype.CreateComplexForm;
ApiDocument.prototype["InsertTextForm"] = ApiDocument.prototype.InsertTextForm;
ApiDocument.prototype["GetFormRoles"] = ApiDocument.prototype.GetFormRoles;
ApiFormRoles.prototype["Add"] = ApiFormRoles.prototype.Add;
ApiFormRoles.prototype["Remove"] = ApiFormRoles.prototype.Remove;
ApiFormRoles.prototype["GetCount"] = ApiFormRoles.prototype.GetCount;
ApiFormRoles.prototype["GetAllRoles"] = ApiFormRoles.prototype.GetAllRoles;
ApiFormRoles.prototype["HaveRole"] = ApiFormRoles.prototype.HaveRole;
ApiFormRoles.prototype["GetRoleColor"] = ApiFormRoles.prototype.GetRoleColor;
ApiFormRoles.prototype["SetRoleColor"] = ApiFormRoles.prototype.SetRoleColor;
ApiFormRoles.prototype["MoveUp"] = ApiFormRoles.prototype.MoveUp;
ApiFormRoles.prototype["MoveDown"] = ApiFormRoles.prototype.MoveDown;
Api.prototype["CreateCheckBoxForm"] = Api.prototype.CreateCheckBoxForm;
Api.prototype["CreateComboBoxForm"] = Api.prototype.CreateComboBoxForm;
Api.prototype["CreateComplexForm"] = Api.prototype.CreateComplexForm;
}(window, null));

View File

@ -1,5 +1,5 @@
/*
* (c) Copyright Ascensio System SIA 2010-2024
* (c) Copyright Ascensio System SIA 2010-2022
*
* 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)
@ -12,7 +12,7 @@
* 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
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
@ -34,37 +34,16 @@
(function(window)
{
let Api = window["asc_docs_api"];
/**
* @typedef {Object} ContentControl
* Content control object.
* @property {string} Tag - A tag assigned to the content control. The same tag can be assigned to several content controls so that it is possible to make reference to them in your code.
* @property {string} Id - A unique identifier of the content control. It can be used to search for a certain content control and make reference to it in the code.
* @property {ContentControlLock} Lock - A value that defines if it is possible to delete and/or edit the content control or not: 0 - only deleting, 1 - no deleting or editing, 2 - only editing, 3 - full access.
* @property {string} InternalId - A unique internal identifier of the content control. It is used for all operations with content controls.
* @see office-js-api/Examples/Plugins/Forms/Enumeration/ContentControl.js
*/
/**
* @typedef {(0 | 1 | 2 | 3)} ContentControlLock
* A value that defines if it is possible to delete and/or edit the content control or not:
* **0** - only deleting
* **1** - disable deleting or editing
* **2** - only editing
* **3** - full access
* @see office-js-api/Examples/Plugins/Forms/Enumeration/ContentControlLock.js
*/
/**
* Returns information about all the forms that have been added to the document.
* Returns information about all the forms that have been added to the document
* @memberof Api
* @typeofeditors ["CDE"]
* @alias GetAllForms
* @returns {ContentControl[]} - An array with all the forms from the document.
* @see office-js-api/Examples/Plugins/Forms/Api/Methods/GetAllForms.js
* @returns {[]} - An array of forms
* @example
* window.Asc.plugin.executeMethod("GetAllForms");
*/
Api.prototype["pluginMethod_GetAllForms"] = function()
window["asc_docs_api"].prototype["pluginMethod_GetAllForms"] = function()
{
let oFormsManager = this.private_GetFormsManager();
if (!oFormsManager)
@ -79,15 +58,16 @@
return arrResult;
};
/**
* Returns information about all the forms that have been added to the document with specified tag.
* Returns information about all the forms that have been added to the document with specified Tag
* @memberof Api
* @typeofeditors ["CDE"]
* @alias GetFormsByTag
* @param {string} tag - The form tag.
* @returns {ContentControl[]} - An array with all the forms from the document with the specified tag.
* @see office-js-api/Examples/Plugins/Forms/Api/Methods/GetFormsByTag.js
* @param {string} tag - Tag of the form
* @returns {[]} - An array of forms
* @example
* window.Asc.plugin.executeMethod("GetFormsByTag");
*/
Api.prototype["pluginMethod_GetFormsByTag"] = function(tag)
window["asc_docs_api"].prototype["pluginMethod_GetFormsByTag"] = function(tag)
{
let oFormsManager = this.private_GetFormsManager();
if (!oFormsManager)
@ -105,28 +85,127 @@
return arrResult;
};
/**
* Sets a value to the specified form.
* Set value for specified form
* @memberof Api
* @typeofeditors ["CDE"]
* @alias SetFormValue
* @param {string} internalId - A unique internal identifier of the form.
* @param {string | boolean} value - Form value to be set. Its type depends on the form type.
* @see office-js-api/Examples/Plugins/Forms/Api/Methods/SetFormValue.js
* @param {string} internalId - A unique internal identifier of the content control.
* @param {*} value - Depends on the type of a form
* @example
* window.Asc.plugin.executeMethod("SetFormValue");
*/
Api.prototype["pluginMethod_SetFormValue"] = function(internalId, value)
window["asc_docs_api"].prototype["pluginMethod_SetFormValue"] = function(internalId, value)
{
this.private_SetFormValue(internalId, value);
let oLogicDocument = this.private_GetLogicDocument();
if (!AscCommon.g_oTableId
|| !oLogicDocument
|| !oLogicDocument.IsDocumentEditor())
return;
let oForm = AscCommon.g_oTableId.GetClass(internalId);
if (!oForm
|| !(oForm instanceof AscWord.CInlineLevelSdt)
|| !oForm.IsForm())
return;
let oParagraph = oForm.GetParagraph();
oForm.SkipSpecialContentControlLock(true);
if (!oParagraph
|| oLogicDocument.IsSelectionLocked(AscCommon.changestype_None, {
Type : AscCommon.changestype_2_ElementsArray_and_Type,
Elements : [oParagraph],
CheckType : AscCommon.changestype_Paragraph_Content
}, true, oLogicDocument.IsFillingFormMode()))
{
oForm.SkipSpecialContentControlLock(false);
return;
}
oForm.SkipSpecialContentControlLock(false);
oLogicDocument.StartAction(AscDFH.historydescription_Document_FillFormInPlugin);
let isClear = false;
if (null === value)
{
isClear = true;
}
else if (oForm.IsTextForm() || oForm.IsComboBox())
{
let sValue = AscBuilder.GetStringParameter(value, "");
if (!value)
isClear = true;
else
oForm.SetInnerText(sValue);
}
else if (oForm.IsDropDownList())
{
let sValue = AscBuilder.GetStringParameter(value, "");
let oPr = oForm.GetDropDownListPr();
let nIndex = oPr.FindByText(sValue);
if (-1 !== nIndex)
oForm.SelectListItem(oPr.GetItemValue(nIndex));
else
isClear = true;
}
else if (oForm.IsCheckBox())
{
let isChecked = value === "true" ? true : value === "false" ? false : AscBuilder.GetBoolParameter(value, null);
if (null !== isChecked)
oForm.SetCheckBoxChecked(isChecked);
else
isClear = true;
}
else if (oForm.IsPictureForm())
{
let sValue = AscBuilder.GetStringParameter(value, "");
if (!sValue)
return;
let oImg;
let allDrawings = oForm.GetAllDrawingObjects();
for (let nDrawing = 0; nDrawing < allDrawings.length; ++nDrawing)
{
if (allDrawings[nDrawing].IsPicture())
{
oImg = allDrawings[nDrawing].GraphicObj;
break;
}
}
if (oImg)
{
oForm.SetShowingPlcHdr(false);
oImg.setBlipFill(AscFormat.CreateBlipFillRasterImageId(sValue));
}
else
{
isClear = true;
}
}
if (isClear)
oForm.ClearContentControlExt();
oLogicDocument.OnChangeForm(oForm);
oLogicDocument.Recalculate();
oLogicDocument.UpdateTracks();
oLogicDocument.FinalizeAction();
};
/**
* Returns a value of the specified form.
* Get form value
* @memberof Api
* @typeofeditors ["CDE"]
* @alias GetFormValue
* @param {string} internalId - A unique internal identifier of the form.
* @returns {null | string | boolean} The form value in the string or boolean format depending on the form type. The null value means that the form is filled with a placeholder.
* @see office-js-api/Examples/Plugins/Forms/Api/Methods/GetFormValue.js
* @param {string} internalId - A unique internal identifier of the content control.
* @returns {null | string} Value of the form (null means the form is filled with a placeholder)
* @example
* window.Asc.plugin.executeMethod("GetFormValue");
*
*/
Api.prototype["pluginMethod_GetFormValue"] = function(internalId)
window["asc_docs_api"].prototype["pluginMethod_GetFormValue"] = function(internalId)
{
if (!AscCommon.g_oTableId)
return "";
@ -170,4 +249,3 @@
};
})(window);

View File

@ -2,26 +2,13 @@
"sdk": {
"min": [
"api.js",
"apiPlugins.js"
],
"common": [
"apiBuilder.js",
"oform/OForm.js",
"oform/Role.js",
"oform/xml/XmlPackage.js",
"oform/xml/XmlContext.js",
"oform/format/BaseFormatObject.js",
"oform/format/Document.js",
"oform/format/FieldGroup.js",
"oform/format/FieldMaster.js",
"oform/format/User.js",
"oform/format/UserMaster.js",
"oform/format/changes/DictionaryBase.js",
"oform/format/changes/DocumentChanges.js",
"oform/format/changes/FieldGroupChanges.js",
"oform/format/changes/FieldMasterChanges.js",
"oform/format/changes/UserChanges.js",
"oform/format/changes/UserMasterChanges.js"
"apiPlugins.js"
],
"common": [
"apiBuilder.js",
"oform/Main.js",
"oform/Field.js",
"oform/User.js"
]
}
}

416
oform/Field.js Normal file
View File

@ -0,0 +1,416 @@
/*
* (c) Copyright Ascensio System SIA 2010-2019
*
* 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-12 Ernesta Birznieka-Upisha
* 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";
(function(window, undefined) {
const CBaseFormatObject = AscFormat.CBaseFormatObject;
const InitClass = AscFormat.InitClass;
const CChangesString = AscDFH.CChangesDrawingsString;
const CChangesObject = AscDFH.CChangesDrawingsObject;
const CChangesContent = AscDFH.CChangesDrawingsContent;
AscDFH.changesFactory[AscDFH.historyitem_FormFieldMaster_FieldId] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_FormFieldMaster_User] = CChangesContent;
AscDFH.changesFactory[AscDFH.historyitem_FormFieldMaster_Field] = CChangesObject;
AscDFH.changesFactory[AscDFH.historyitem_FormFieldMaster_SignRequest] = CChangesObject;
AscDFH.changesFactory[AscDFH.historyitem_FormField_Content] = CChangesObject;
AscDFH.changesFactory[AscDFH.historyitem_FormField_EncryptedData] = CChangesContent;
AscDFH.changesFactory[AscDFH.historyitem_FormField_FieldMaster] = CChangesObject;
AscDFH.changesFactory[AscDFH.historyitem_SignRequest_User] = CChangesContent;
AscDFH.changesFactory[AscDFH.historyitem_EncryptedData_Method] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_EncryptedData_Value] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_EncryptedData_KeyInfo] = CChangesObject;
AscDFH.changesFactory[AscDFH.historyitem_KeyInfo_User] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_KeyInfo_Value] = CChangesObject;
AscDFH.drawingsChangesMap[AscDFH.historyitem_FormFieldMaster_FieldId] = function(oClass, value) {oClass.FieldId = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_FormFieldMaster_Field] = function(oClass, value) {oClass.Field = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_FormFieldMaster_SignRequest] = function(oClass, value) {oClass.SignRequest = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_FormField_Content] = function(oClass, value) {oClass.FieldContent = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_FormField_FieldMaster] = function(oClass, value) {oClass.FieldMaster = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_EncryptedData_Method] = function(oClass, value) {oClass.EncryptedMethod = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_EncryptedData_Value] = function(oClass, value) {oClass.EncryptedValue = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_EncryptedData_KeyInfo] = function(oClass, value) {oClass.KeyInfo = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_KeyInfo_User] = function(oClass, value) {oClass.FieldId = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_KeyInfo_Value] = function(oClass, value) {oClass.FieldId = value;};
AscDFH.drawingContentChanges[AscDFH.historyitem_FormFieldMaster_User] = function (oClass) {return oClass.Users;};
AscDFH.drawingContentChanges[AscDFH.historyitem_SignRequest_User] = function (oClass) {return oClass.Users;};
AscDFH.drawingContentChanges[AscDFH.historyitem_FormField_EncryptedData] = function (oClass) {return oClass.EndcriptedData;};
function CFieldMaster() {
CBaseFormatObject.call(this);
this.FieldId = null;
this.Users = [];
this.Field = null;
this.SignRequest = null;
}
InitClass(CFieldMaster, CBaseFormatObject, AscDFH.historyitem_type_FormFieldMaster);
CFieldMaster.prototype.setFieldId = function(sFieldId) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_FormFieldMaster_FieldId, this.FieldId, sFieldId));
this.FieldId = sFieldId;
};
CFieldMaster.prototype.addUser = function(oUser) {
AscCommon.History.Add(new CChangesContent(this, AscDFH.historyitem_FormFieldMaster_User, this.Users.length, [oUser], true));
this.Users.push(oUser);
};
CFieldMaster.prototype.setField = function(oField) {
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_FormFieldMaster_Field, this.Field, oField));
this.Field = oField;
if(oField) {
oField.setFieldMaster(this);
}
};
CFieldMaster.prototype.setSignRequest = function(oSignRequest) {
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_FormFieldMaster_SignRequest, this.SignRequest, oSignRequest));
this.SignRequest = oSignRequest;
};
CFieldMaster.prototype.readAttrXml = function(name, reader) {
switch (name) {
case "id": {
this.setFieldId(reader.GetValue());
break;
}
}
};
CFieldMaster.prototype.readChildXml = function (name, reader) {
let oThis = this;
switch (name) {
case "Users": {
let oUsersNode = new CT_XmlNode(function (reader, name){
if(name === "User") {
let oUserNode = new CT_XmlNode();
oUserNode.fromXml(reader);
let sId = oUserNode.attributes["id"];
let oRel = reader.rels.getRelationshipById(sId);
reader.context.addFieldMasterRelation(oThis, oRel.targetFullName)
}
return true;
});
oUsersNode.fromXml(reader);
break;
}
case "SignRequest": {
let oSignRequest = new CSignRequest();
oSignRequest.fromXml(reader);
this.setSignRequest(oSignRequest);
break;
}
}
};
CFieldMaster.prototype.toXml = function (writer) {
writer.WriteXmlString(AscCommonWord.g_sXmlHeader);
writer.WriteXmlNodeStart("FieldMaster");
writer.WriteXmlAttributeString("xmlns:r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
writer.WriteXmlNullableAttributeString("id", this.FieldId);
writer.WriteXmlAttributesEnd();
writer.WriteXmlNodeStart("Users");
writer.WriteXmlAttributesEnd();
let oContext = writer.context;
let oUserMasterPartMap = oContext.userMasterPartMap;
let oUsersIdMap = {};
for(let nUser = 0; nUser < this.Users.length; ++nUser) {
let oUser = this.Users[nUser];
let oPart = oUserMasterPartMap[oUser.Id];
if(!oPart) {
oPart = writer.context.part.addPart(AscCommon.openXml.Types.userMaster);
let oUserMemory = new AscCommon.CMemory();
oUserMemory.context = writer.context;
oPart.part.setDataXml(oUser, oUserMemory);
oUserMasterPartMap[oUser.Id] = oPart;
}
let oNode = new CT_XmlNode();
let sRId = oContext.part.addRelationship(AscCommon.openXml.Types.userMaster.relationType, oPart.uri);
oNode.attributes["r:id"] = sRId
oUsersIdMap[oUser.Id] = sRId;
oNode.toXml(writer, "User");
}
writer.WriteXmlNodeEnd("Users");
if(this.SignRequest) {
this.SignRequest.toXml(writer, oUsersIdMap);
}
writer.WriteXmlNodeEnd("FieldMaster");
if(writer.context.fileType === Asc.c_oAscFileType.OFORM) {
if(this.Field) {
let oPart = writer.context.docPart.part.addPartWithoutRels(AscCommon.openXml.Types.field);
let oMemory = new AscCommon.CMemory();
oMemory.context = writer.context;
oPart.setDataXml(this.Field, oMemory);
oMemory.Seek(0);
oPart.addRelationship(AscCommon.openXml.Types.fieldMaster.relationType, oContext.part.uri)
}
}
};
function CSignRequest() {
CBaseFormatObject.call(this);
this.Users = [];
}
InitClass(CSignRequest, CBaseFormatObject, AscDFH.historyitem_type_SignRequest);
CSignRequest.prototype.addUser = function(oUser) {
AscCommon.History.Add(new CChangesContent(this, AscDFH.historyitem_SignRequest_User, this.Users.length, [oUser], true));
this.Users.push(oUser);
};
CSignRequest.prototype.readChildXml = function (name, reader) {
CFieldMaster.prototype.readChildXml.call(this, name, reader);
};
CSignRequest.prototype.toXml = function (writer, oUsersIdMap) {
writer.WriteXmlNodeStart("SignRequest");
writer.WriteXmlAttributesEnd();
writer.WriteXmlNodeStart("Users");
writer.WriteXmlAttributesEnd();
for(let nUser = 0; nUser < this.Users.length; ++nUser) {
let oUser = this.Users[nUser];
let oNode = new CT_XmlNode();
let sRId = oUsersIdMap[oUser.Id];
if(sRId) {
oNode.attributes["r:id"] = sRId
oUsersIdMap[oUser.Id] = sRId;
oNode.toXml(writer, "User");
}
}
writer.WriteXmlNodeEnd("Users");
writer.WriteXmlNodeEnd("SignRequest");
};
function CFieldContent() {
CParagraphContentWithParagraphLikeContent.call(this);
}
InitClass(CFieldContent, CParagraphContentWithParagraphLikeContent, 0);
CFieldContent.prototype.Add_ToContent = function(Pos, Item, UpdatePosition)
{
AscCommon.History.Add(new CChangesFormFieldAddItem(this, Pos, [Item]));
CParagraphContentWithParagraphLikeContent.prototype.Add_ToContent.apply(this, arguments);
};
CFieldContent.prototype.Remove_FromContent = function(Pos, Count, UpdatePosition)
{
let DeletedItems = this.Content.slice( Pos, Pos + Count );
AscCommon.History.Add(new CChangesFormFieldRemoveItem(this, Pos, DeletedItems));
CParagraphContentWithParagraphLikeContent.prototype.Remove_FromContent.apply(this, arguments);
};
CFieldContent.prototype.fromXml = function (reader) {
CParagraphContentWithParagraphLikeContent.prototype.fromXml.call(this, reader);
};
CFieldContent.prototype.toXml = function (writer) {
writer.WriteXmlNodeStart("w:sdtContent");
writer.WriteXmlAttributesEnd();
CParagraphContentWithParagraphLikeContent.prototype.toXml.call(this, writer);
writer.WriteXmlNodeEnd("w:sdtContent");
};
function CField() {
CBaseFormatObject.call(this);
this.EndcriptedData = [];
this.FieldContent = null;
}
InitClass(CField, CBaseFormatObject, AscDFH.historyitem_type_FormField);
CField.prototype.setFieldContent = function(oFieldContent) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_FormField_Content, this.FieldContent, oFieldContent));
this.FieldContent = oFieldContent;
};
CField.prototype.addEncryptedData = function(oEncryptedData) {
AscCommon.History.Add(new CChangesContent(this, AscDFH.historyitem_FormField_EncryptedData, this.EndcriptedData.length, [oEncryptedData], true));
this.EndcriptedData.push(oEncryptedData);
};
CField.prototype.setFieldMaster = function(oFieldMaster) {
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_FormField_FieldMaster, this.FieldMaster, oFieldMaster));
this.FieldMaster = oFieldMaster;
};
CField.prototype.readChildXml = function (name, reader) {
switch (name) {
case "EncryptedData": {
let oEncryptedData = new CEncryptedData();
oEncryptedData.fromXml(reader);
this.addEncryptedData(oEncryptedData);
break;
}
case "Body": {
let oFieldContent = null;
let oNode = new CT_XmlNode(function (reader, name) {
if(name === "sdtContent") {
oFieldContent = new CFieldContent();
oFieldContent.fromXml(reader);
return oFieldContent;
}
return null;
});
oNode.fromXml(reader);
if(oFieldContent) {
this.setFieldContent(oFieldContent);
}
break;
}
}
};
CField.prototype.toXml = function(writer) {
writer.WriteXmlString(AscCommonWord.g_sXmlHeader);
writer.WriteXmlNodeStart("Field");
writer.WriteXmlAttributesEnd();
if(this.FieldContent) {
writer.WriteXmlNodeStart("Body");
writer.WriteXmlString(AscCommonWord.g_sXmlDocumentNamespaces);
writer.WriteXmlAttributesEnd();
this.FieldContent.toXml(writer);
writer.WriteXmlNodeEnd("Body");
}
for(let nData = 0; nData < this.EndcriptedData.length; ++nData) {
this.EndcriptedData[nData].toXml(writer);
}
writer.WriteXmlNodeEnd("Field");
};
function CEncryptedData() {
CBaseFormatObject.call(this);
this.EncryptedMethod = null;
this.EncryptedValue = null;
this.KeyInfo = null;
}
InitClass(CEncryptedData, CBaseFormatObject, AscDFH.historyitem_type_EncryptedData);
CEncryptedData.prototype.setEncryptedMethod = function (sEncryptedMethod) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_EncryptedData_Method, this.EncryptedMethod, sEncryptedMethod));
this.EncryptedMethod = sEncryptedMethod;
};
CEncryptedData.prototype.setEncryptedValue = function (sEncryptedValue) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_EncryptedData_Value, this.EncryptedValue, sEncryptedValue));
this.EncryptedValue = sEncryptedValue;
};
CEncryptedData.prototype.setKeyInfo = function (oKeyInfo) {
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_EncryptedData_KeyInfo, this.KeyInfo, oKeyInfo));
this.KeyInfo = oKeyInfo;
};
CEncryptedData.prototype.readChildXml = function (name, reader) {
switch (name) {
case "EncryptedMethod": {
let oMethod = new CT_XmlNode();
oMethod.fromXml(reader);
let sAlgorithm = oMethod.attributes["Algorithm"];
if(sAlgorithm) {
this.setEncryptedMethod(sAlgorithm)
}
break;
}
case "EncryptedValue": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setEncryptedValue(oNode.text);
break;
}
case "KeyInfo": {
let oKeyInfo = new CKeyInfo();
oKeyInfo.fromXml(reader);
this.setKeyInfo(oKeyInfo)
break;
}
}
};
CEncryptedData.prototype.toXml = function(writer) {
writer.WriteXmlNodeStart("EncryptedData");
writer.WriteXmlAttributesEnd();
if(this.EncryptedMethod) {
let oMethod = new CT_XmlNode();
oMethod.attributes["Algorithm"] = this.EncryptedMethod;
oMethod.toXml(writer, "EncryptedMethod");
}
if(this.EncryptedValue) {
let oValue = new CT_XmlNode();
oValue.text = this.EncryptedValue;
oValue.toXml(writer, "EncryptedValue");
}
if(this.KeyInfo) {
this.KeyInfo.toXml(writer);
}
writer.WriteXmlNodeEnd("EncryptedData");
};
function CKeyInfo() {
CBaseFormatObject.call(this);
this.UserId = null;
this.Value = null;
}
InitClass(CKeyInfo, CBaseFormatObject, AscDFH.historyitem_type_KeyInfo);
CKeyInfo.prototype.setUserId = function (sUserId) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_KeyInfo_User, this.UserId, sUserId));
this.UserId = sUserId;
};
CKeyInfo.prototype.setValue = function (sValue) {
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_KeyInfo_Value, this.Value, sValue));
this.Value = sValue;
};
CKeyInfo.prototype.readChildXml = function (name, reader) {
switch (name) {
case "User": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setUserId(oNode.attributes["id"]);
break;
}
case "Value": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setValue(oNode.text);
break;
}
}
};
CKeyInfo.prototype.toXml = function(writer) {
writer.WriteXmlNodeStart("KeyInfo");
writer.WriteXmlAttributesEnd();
if(this.UserId) {
let oNode = new CT_XmlNode();
oNode.attributes["id"] = this.UserId;
oNode.toXml(writer, "User");
}
if(this.Value) {
let oValue = new CT_XmlNode();
oValue.text = this.Value;
oValue.toXml(writer, "Value");
}
writer.WriteXmlNodeEnd("KeyInfo");
};
AscWord.CFieldContent = CFieldContent;
AscWord.CFieldMaster = CFieldMaster;
AscWord.CField = CField;
AscWord.CEncryptedData = CEncryptedData;
AscWord.CKeyInfo = CKeyInfo;
AscWord.CSignRequest = CSignRequest;
})(window);

316
oform/Main.js Normal file
View File

@ -0,0 +1,316 @@
/*
* (c) Copyright Ascensio System SIA 2010-2019
*
* 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-12 Ernesta Birznieka-Upisha
* 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";
(function(window, undefined) {
const CBaseFormatObject = AscFormat.CBaseFormatObject;
const InitClass = AscFormat.InitClass;
const CChangesString = AscDFH.CChangesDrawingsString;
const CChangesObject = AscDFH.CChangesDrawingsObject;
const CChangesContent = AscDFH.CChangesDrawingsContent;
const CChangesLong = AscDFH.CChangesDrawingsLong;
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_Author] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_Date] = CChangesObject;
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_Description] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_Type] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_Application] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_DocumentId] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_FieldsGroups] = CChangesContent;
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_User] = CChangesContent;
AscDFH.changesFactory[AscDFH.historyitem_FormDate_Format] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_FormDate_Value] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_FieldsGroup_Id] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_FieldsGroup_Weight] = CChangesLong;
AscDFH.changesFactory[AscDFH.historyitem_FieldsGroup_Field] = CChangesContent;
AscDFH.drawingsChangesMap[AscDFH.historyitem_MainDocument_Author] = function (oClass, value) {oClass.Author = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_MainDocument_Date] = function (oClass, value) {oClass.Date = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_MainDocument_Description] = function (oClass, value) {oClass.Description = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_MainDocument_Type] = function (oClass, value) {oClass.Type = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_MainDocument_Application] = function (oClass, value) {oClass.Application = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_MainDocument_DocumentId] = function (oClass, value) {oClass.DocumentId = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_FormDate_Format] = function (oClass, value) {oClass.Format = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_FormDate_Value] = function (oClass, value) {oClass.Value = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_FieldsGroup_Id] = function (oClass, value) {oClass.GroupId = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_FieldsGroup_Weight] = function (oClass, value) {oClass.Weight = value;};
AscDFH.drawingContentChanges[AscDFH.historyitem_MainDocument_FieldsGroups] = function (oClass) {return oClass.FieldsGroups;};
AscDFH.drawingContentChanges[AscDFH.historyitem_MainDocument_User] = function (oClass) {return oClass.Users;};
AscDFH.drawingContentChanges[AscDFH.historyitem_FieldsGroup_Field] = function (oClass) {return oClass.Fields;};
function CMainDocument() {
CBaseFormatObject.call(this);
this.Author = null;
this.Date = null;
this.Description = null;
this.Type = null;
this.Application = null;
this.DocumentId = null;
this.FieldsGroups = [];
this.Users = [];
}
InitClass(CMainDocument, CBaseFormatObject, AscDFH.historyitem_type_MainDocument);
CMainDocument.prototype.setAuthor = function (sAuthor) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_MainDocument_Author, this.Author, sAuthor));
this.Author = sAuthor;
};
CMainDocument.prototype.setDate = function (oDate) {
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_MainDocument_Date, this.Date, oDate));
this.Date = oDate;
};
CMainDocument.prototype.setDescription = function (sDescription) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_MainDocument_Description, this.Description, sDescription));
this.Description = sDescription;
};
CMainDocument.prototype.setType = function (sType) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_MainDocument_Type, this.Type, sType));
this.Type = sType;
};
CMainDocument.prototype.setApplication = function (sApplication) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_MainDocument_Application, this.Application, sApplication));
this.Application = sApplication;
};
CMainDocument.prototype.setDocumentId = function (sDocumentId) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_MainDocument_DocumentId, this.DocumentId, sDocumentId));
this.DocumentId = sDocumentId;
};
CMainDocument.prototype.addFieldsGroups = function(oFieldsGroup) {
AscCommon.History.Add(new CChangesContent(this, AscDFH.historyitem_MainDocument_FieldsGroups, this.FieldsGroups.length, [oFieldsGroup], true));
this.FieldsGroups.push(oFieldsGroup);
};
CMainDocument.prototype.addUser = function(oUser) {
AscCommon.History.Add(new CChangesContent(this, AscDFH.historyitem_MainDocument_User, this.FieldsGroups.length, [oUser], true));
this.Users.push(oUser);
};
CMainDocument.prototype.readChildXml = function (name, reader) {
switch (name) {
case "Author": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
let sAuthor = oNode.attributes["id"];
if(sAuthor) {
this.setAuthor(sAuthor);
}
break;
}
case "Date": {
let oDate = new CFormDate();
oDate.fromXml(reader);
this.setDate(oDate);
break;
}
case "Description": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setDescription(oNode.text);
break;
}
case "Type": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setType(oNode.text);
break;
}
case "Application": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setApplication(oNode.text);
break;
}
case "Id": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setDocumentId(oNode.text);
break;
}
case "FieldsGroup": {
let oFieldsGroup = new CFieldsGroup();
oFieldsGroup.fromXml(reader);
this.addFieldsGroups(oFieldsGroup);
break;
}
}
};
CMainDocument.prototype.toXml = function(writer) {
writer.WriteXmlString(AscCommonWord.g_sXmlHeader);
writer.WriteXmlNodeStart("Document");
writer.WriteXmlAttributeString("xmlns:r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
writer.WriteXmlAttributesEnd();
if(this.Author) {
let oNode = new CT_XmlNode();
oNode.attributes["id"] = this.Author;
oNode.toXml(writer, "Author");
}
if(this.Date) {
this.Date.toXml(writer);
}
let oDescriptionNode = new CT_XmlNode();
oDescriptionNode.text = this.Description;
oDescriptionNode.toXml(writer, "Description");
let oTypeNode = new CT_XmlNode();
oTypeNode.text = this.Type;
oTypeNode.toXml(writer, "Type");
let oAppNode = new CT_XmlNode();
oAppNode.text = this.Application;
oAppNode.toXml(writer, "Application");
let oIdNode = new CT_XmlNode();
oIdNode.text = this.DocumentId;
oIdNode.toXml(writer, "Id");
for(let nFG = 0; nFG < this.FieldsGroups.length; ++nFG) {
this.FieldsGroups[nFG].toXml(writer);
}
writer.WriteXmlNodeEnd("Document");
};
function CFormDate() {
CBaseFormatObject.call(this);
this.Format = null;
this.Value = null;
}
InitClass(CFormDate, CBaseFormatObject, AscDFH.historyitem_type_FormDate);
CFormDate.prototype.setFormat = function(sFormat) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_FormDate_Format, this.Format, sFormat));
this.Format = sFormat;
};
CFormDate.prototype.setValue = function(sValue) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_FormDate_Value, this.Value, sValue));
this.Value = sValue;
};
CFormDate.prototype.readChildXml = function (name, reader) {
switch (name) {
case "Format": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setFormat(oNode.text);
break;
}
case "Value": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setValue(oNode.text);
break;
}
}
};
CFormDate.prototype.toXml = function (writer) {
writer.WriteXmlNodeStart("Date");
writer.WriteXmlAttributesEnd();
let oFormatNode = new CT_XmlNode();
oFormatNode.text = this.Format;
oFormatNode.toXml(writer, "Format");
let oValueNode = new CT_XmlNode();
oValueNode.text = this.Value;
oValueNode.toXml(writer, "Value");
writer.WriteXmlNodeEnd("Date");
};
function CFieldsGroup() {
CBaseFormatObject.call(this);
this.GroupId = null;
this.Weight = null;
this.Fields = [];
}
InitClass(CFieldsGroup, CBaseFormatObject, AscDFH.historyitem_type_FieldsGroup);
CFieldsGroup.prototype.setGroupId = function (sGroupId) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_FieldsGroup_Id, this.GroupId, sGroupId));
this.GroupId = sGroupId;
};
CFieldsGroup.prototype.setWeight = function (nWeight) {
AscCommon.History.Add(new CChangesLong(this, AscDFH.historyitem_FieldsGroup_Weight, this.Weight, nWeight));
this.Weight = nWeight;
};
CFieldsGroup.prototype.addField = function (oField) {
AscCommon.History.Add(new CChangesContent(this, AscDFH.historyitem_FieldsGroup_Field, this.Fields.length, [oField], true));
this.Fields.push(oField);
};
CFieldsGroup.prototype.readAttrXml = function(name, reader) {
switch (name) {
case "id": {
this.setGroupId(reader.GetValue());
break;
}
case "weight": {
this.setWeight(reader.GetValueInt());
break;
}
}
};
CFieldsGroup.prototype.readChildXml = function(name, reader) {
switch (name) {
case "Field": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
let sId = oNode.attributes["id"];
let oRel = reader.rels.getRelationshipById(sId);
reader.context.addFieldGroupRelation(this, oRel.targetFullName);
break;
}
}
};
CFieldsGroup.prototype.toXml = function (writer) {
writer.WriteXmlNodeStart("FieldsGroup");
writer.WriteXmlNullableAttributeString("id", this.GroupId);
writer.WriteXmlNullableAttributeInt("weight", this.Weight);
writer.WriteXmlAttributesEnd();
let oContext = writer.context;
let oFldMasterPartMap = oContext.fieldMastersPartMap;
for(let nFldMaster = 0; nFldMaster < this.Fields.length; ++nFldMaster) {
let oFieldMaster = this.Fields[nFldMaster];
let oPart = oFldMasterPartMap[oFieldMaster.Id];
if(oPart) {
let oNode = new CT_XmlNode();
oNode.attributes["r:id"] = oContext.part.addRelationship(AscCommon.openXml.Types.fieldMaster.relationType, oPart.part.uri);
oNode.toXml(writer, "Field");
}
}
writer.WriteXmlNodeEnd("FieldsGroup");
};
AscWord.CMainDocument = CMainDocument;
AscWord.CFieldsGroup = CFieldsGroup;
AscWord.CFormDate = CFormDate;
})(window);

View File

@ -1,702 +0,0 @@
/*
* (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";
(function(window)
{
/**
* Основной класс для работы с форматом oform
* @param document {AscWord.CDocument}
* @constructor
*/
function OForm(document)
{
this.Format = new AscOForm.CDocument(this);
this.Document = document;
this.CurrentUser = null;
// Сейчас у нас роль - это ровно один userMaster и ровно одна группа полей
this.Roles = [];
this.NeedUpdateRoles = true;
this.NeedRedraw = true;
}
/**
* @returns {AscWord.CDocument}
*/
OForm.prototype.getDocument = function()
{
return this.Document;
};
/**
* @returns {AscOForm.CDocument}
*/
OForm.prototype.getFormat = function()
{
return this.Format;
};
OForm.prototype.fromZip = function(zip, opt_sdtPrWithFieldPath)
{
let xmlPkg = new AscOForm.XmlPackage(zip);
xmlPkg.setContext(new AscOForm.XmlReaderContext(xmlPkg));
this.Format.fromPkg(xmlPkg, opt_sdtPrWithFieldPath);
};
OForm.prototype.toZip = function(zip, opt_fieldMastersPartMap)
{
let writer = new AscCommon.CMemory();
let xmlPkg = new AscOForm.XmlPackage(zip, writer);
xmlPkg.setContext(new AscOForm.XmlWriterContext(xmlPkg));
writer.context = xmlPkg.getContext();
this.Format.toPkg(xmlPkg, opt_fieldMastersPartMap);
// Наш XmlPackage работает в общей папке, а нам нужно запихнуть в zip подпапку oform
zip.getPaths().forEach(function(path)
{
let fileData = zip.getFile(path);
if (path.startsWith("oform/"))
zip.addFile(path.substr(6), fileData);
zip.removeFile(path);
});
};
OForm.prototype.setCurrentRole = function(roleName)
{
let role = this.getRole(roleName);
if (!role)
return;
this.CurrentUser = role.getUserMaster();
};
/**
* Difference between noRole and when role is not set, is that when role is not set we can fill any field,
* but when noRole is set then we can't fill anything
*/
OForm.prototype.setCurrentNoRole = function()
{
this.CurrentUser = AscOForm.getNoRole();
};
OForm.prototype.clearCurrentRole = function()
{
this.CurrentUser = null;
};
OForm.prototype.getCurrentRole = function()
{
return this.CurrentUser ? this.CurrentUser.getRole() : null;
};
OForm.prototype.getCurrentUserMaster = function()
{
return this.CurrentUser;
};
OForm.prototype.getAllRoles = function()
{
this.updateRoles();
return this.Roles;
};
/**
* @param roleSettings {AscOForm.CRoleSettings}
*/
OForm.prototype.addRole = function(roleSettings)
{
let name = "";
if ("string" === typeof roleSettings)
{
name = roleSettings;
roleSettings = new AscOForm.CRoleSettings();
roleSettings.setName(name);
}
if (roleSettings instanceof AscOForm.CRoleSettings)
name = roleSettings.getName();
else
return false;
if (this.haveRole(name))
return false;
if (!this.startAction(AscDFH.historydescription_OForm_AddRole))
return false;
let userMaster = new AscOForm.CUserMaster(true);
userMaster.setRole(name);
let color = roleSettings.getColor();
if (color)
userMaster.setColor(color.r, color.g, color.b);
let fieldGroup = new AscOForm.CFieldGroup();
fieldGroup.setWeight(this.Format.getMaxWeight() + 1);
fieldGroup.addUser(userMaster);
this.Format.addFieldGroup(fieldGroup);
this.Format.addUserMaster(userMaster);
this.endAction();
return true;
};
OForm.prototype.removeRole = function(name, delegateName)
{
this.updateRoles();
let roleIndex = this.getRoleIndex(name);
if (-1 === roleIndex)
return false;
let userMaster = this.Roles[roleIndex].getUserMaster();
let fieldGroup = this.Roles[roleIndex].getFieldGroup();
let fields = fieldGroup.getAllFields();
let delegateIndex = this.getRoleIndex(delegateName);
// На самом деле можно убрать эту проверку, но тогда мы просто удалим группу по умолчнию и заново её добавим
if (this.Roles.length <= 1
&& this.Roles[roleIndex].getUserMaster() === this.Format.getDefaultUserMaster()
&& -1 === delegateIndex)
{
let defaultUserMaster = this.Format.getDefaultUserMaster();
if (!defaultUserMaster.isDefaultUserProps())
{
if (!this.startAction(AscDFH.historydescription_OForm_RemoveRole))
return false;
defaultUserMaster.initDefaultUser();
this.NeedRedraw = true;
this.endAction();
return true;
}
return false;
}
if (!this.startAction(AscDFH.historydescription_OForm_RemoveRole))
return false;
fieldGroup.clear();
this.Format.removeFieldGroup(fieldGroup);
this.Format.removeUserMaster(userMaster);
if (fields.length > 0)
{
let delegateUserMaster, delegateFieldGroup;
if (-1 === delegateIndex || delegateIndex === roleIndex)
{
let defaultRole = this.getDefaultRole();
if (defaultRole)
{
delegateUserMaster = defaultRole.getUserMaster();
delegateFieldGroup = defaultRole.getFieldGroup();
}
else
{
let defaultGroup = new AscOForm.CFieldGroup();
defaultGroup.setWeight(this.Format.getMaxWeight() + 1);
this.Format.addFieldGroup(defaultGroup);
defaultGroup.addUser(this.Format.getDefaultUserMaster());
delegateUserMaster = this.Format.getDefaultUserMaster();
delegateFieldGroup = defaultGroup;
}
}
else
{
delegateUserMaster = this.Roles[delegateIndex].getUserMaster();
delegateFieldGroup = this.Roles[delegateIndex].getFieldGroup();
}
for (let index = 0, count = fields.length; index < count; ++index)
{
let fieldMaster = fields[index];
fieldMaster.removeUser(userMaster);
fieldMaster.addUser(delegateUserMaster);
}
delegateFieldGroup.addUser(delegateUserMaster);
this.Format.addFieldGroup(delegateFieldGroup);
if (!this.getDefaultRole() && delegateUserMaster)
this.Format.setDefaultUser(delegateUserMaster);
}
this.NeedRedraw = true;
this.endAction();
return true;
};
OForm.prototype.editRole = function(name, roleSettings)
{
let role = this.getRole(name);
if (!role)
return false;
let newName = roleSettings.getName();
if (undefined !== newName
&& null !== newName
&& name !== newName
&& this.haveRole(newName))
return false;
if (!this.startAction(AscDFH.historyitem_OForm_EditRole))
return false;
let userMaster = role.getUserMaster();
if (undefined !== roleSettings.getName())
userMaster.setRole(roleSettings.getName());
let color = roleSettings.getColor();
if (null === color)
userMaster.setColor(color);
else if (undefined !== color)
userMaster.setColor(color.r, color.g, color.b);
this.endAction();
return true;
};
OForm.prototype.moveUpRole = function(name)
{
let role = this.getRole(name);
if (!role)
return false;
let weight = role.getWeight();
let sameWeightRoles = this.getRolesByWeight(weight);
if (weight === this.Format.getMinWeight() && sameWeightRoles.length <= 1)
return false;
if (!this.startAction(AscDFH.historydescription_OForm_ChangeRoleOrder))
return false;
if (sameWeightRoles.length > 1)
{
for (let index = 0, count = this.Roles.length; index < count; ++index)
{
let curRole = this.Roles[index];
let curWeight = curRole.getWeight();
if (role !== curRole && curWeight >= weight)
{
curRole.setWeight(curWeight + 1);
}
}
}
let prevWeight = -1;
for (let index = 0, count = this.Roles.length; index < count; ++index)
{
let curRole = this.Roles[index];
let curWeight = curRole.getWeight();
if (curWeight < weight)
{
if (-1 === prevWeight || prevWeight < curWeight)
prevWeight = curWeight;
}
}
if (-1 !== prevWeight)
{
let prevRoles = this.getRolesByWeight(prevWeight);
role.setWeight(prevWeight);
for (let index = 0, count = prevRoles.length; index < count; ++index)
{
prevRoles[index].setWeight(weight);
}
}
this.endAction();
return true;
};
OForm.prototype.moveDownRole = function(name)
{
let role = this.getRole(name);
if (!role)
return false;
let weight = role.getWeight();
let sameWeightRoles = this.getRolesByWeight(weight);
if (weight === this.Format.getMaxWeight() && sameWeightRoles.length <= 1)
return false;
if (!this.startAction(AscDFH.historydescription_OForm_ChangeRoleOrder))
return false;
if (sameWeightRoles.length > 1)
{
weight++;
if (this.getRolesByWeight(weight + 1).length)
{
for (let index = 0, count = this.Roles.length; index < count; ++index)
{
let curRole = this.Roles[index];
let curWeight = curRole.getWeight();
if (curWeight > weight)
{
curRole.setWeight(curWeight + 1);
}
}
}
}
let nextWeight = -1;
for (let index = 0, count = this.Roles.length; index < count; ++index)
{
let curRole = this.Roles[index];
let curWeight = curRole.getWeight();
if (curWeight > weight)
{
if (-1 === nextWeight || nextWeight > curWeight)
nextWeight = curWeight;
}
}
if (-1 !== nextWeight)
{
let nextRoles = this.getRolesByWeight(nextWeight);
role.setWeight(nextWeight);
for (let index = 0, count = nextRoles.length; index < count; ++index)
{
nextRoles[index].setWeight(weight);
}
}
else if (weight !== role.getWeight())
{
role.setWeight(weight);
}
this.endAction();
return true;
};
OForm.prototype.getRole = function(name)
{
let roleIndex = this.getRoleIndex(name);
if (-1 === roleIndex)
return null;
return this.Roles[roleIndex];
};
OForm.prototype.getRoleIndex = function(name)
{
this.updateRoles();
for (let index = 0, count = this.Roles.length; index < count; ++index)
{
if (name === this.Roles[index].getRole())
return index;
}
return -1;
};
OForm.prototype.getRolesByWeight = function(weight)
{
this.updateRoles();
let roles = [];
for (let index = 0, count = this.Roles.length; index < count; ++index)
{
if (this.Roles[index].getWeight() === weight)
roles.push(this.Roles[index]);
}
return roles;
};
OForm.prototype.haveRole = function(name)
{
return !!(this.getRole(name));
};
OForm.prototype.getRoleSettings = function(name)
{
let role = this.getRole(name);
if (!role)
return null;
return role.getSettings();
};
OForm.prototype.getDefaultRole = function()
{
this.updateRoles();
let defaultUser = this.Format.getDefaultUserMaster();
for (let index = 0, count = this.Roles.length; index < count; ++index)
{
if (defaultUser === this.Roles[index].getUserMaster())
return this.Roles[index];
}
return null;
};
OForm.prototype.onChangeRoles = function()
{
this.NeedUpdateRoles = true;
};
OForm.prototype.onChangeFieldGroupFilled = function(fieldGroup)
{
if (!this.Document)
return;
for (let i = 0; i < this.Roles.length; ++i)
{
let role = this.Roles[i];
if (fieldGroup === role.getFieldGroup())
{
this.Document.sendEvent("asc_onOFormRoleFilled", role.getRole(), fieldGroup.isFilled());
return;
}
}
};
OForm.prototype.onChangeRoleColor = function()
{
this.NeedRedraw = true;
};
OForm.prototype.checkRedraw = function()
{
if (!this.NeedRedraw)
return;
this.NeedRedraw = false;
this.Document.Redraw();
};
OForm.prototype.updateRoles = function()
{
if (!this.NeedUpdateRoles)
return;
this.NeedUpdateRoles = false;
this.Roles = [];
for (let fgIndex = 0, fgCount = this.Format.getFieldGroupsCount(); fgIndex < fgCount; ++fgIndex)
{
let fieldGroup = this.Format.getFieldGroup(fgIndex);
let user = fieldGroup.getFirstUser();
if (!user)
{
// TODO: Разобраться с такими группами
}
let haveRole = false;
for (let roleIndex = 0, roleCount = this.Roles.length; roleIndex < roleCount; ++roleIndex)
{
if (this.Roles[roleIndex].getUserMaster() === user)
{
haveRole = true;
break;
}
}
if (haveRole)
{
// TODO: Разобраться с такими ситуациями
}
let weight = fieldGroup.getWeight();
let newRoleIndex = this.Roles.length;
for (let roleIndex = 0, roleCount = this.Roles.length; roleIndex < roleCount; ++roleIndex)
{
let curWeight = this.Roles[roleIndex].getWeight();
if (weight < curWeight || (weight === curWeight && user.compare(this.Roles[roleIndex].getUserMaster()) < 0))
{
newRoleIndex = roleIndex;
break;
}
}
let newRole = new AscOForm.CRole(fieldGroup, user);
if (newRoleIndex === this.Roles.length)
this.Roles.push(newRole);
else
this.Roles.splice(newRoleIndex, 0, newRole);
}
this.onUpdateRoles();
};
OForm.prototype.correctFieldGroups = function()
{
// Проверяем есть ли хоть одна группа с заданной ролью (где указан userMaster)
for (let fgIndex = 0, fgCount = this.Format.getFieldGroupsCount(); fgIndex < fgCount; ++fgIndex)
{
let fieldGroup = this.Format.getFieldGroup(fgIndex);
let user = fieldGroup.getFirstUser();
if (!user)
continue;
return;
}
// Нельзя, чтобы групп не было вообще
let defaultGroup = new AscOForm.CFieldGroup();
defaultGroup.setWeight(this.Format.getMaxWeight() + 1);
this.Format.addFieldGroup(defaultGroup);
defaultGroup.addUser(this.Format.getDefaultUserMaster());
};
OForm.prototype.onEndLoad = function()
{
this.NeedUpdateRoles = true;
this.Format.correctFieldMasters(this.getDocument());
this.correctFieldGroups();
this.updateRoles();
};
OForm.prototype.onUpdateRoles = function()
{
let logicDocument = this.getDocument();
let api;
if (!logicDocument || !(api = logicDocument.GetApi()))
return;
api.sendEvent("asc_onUpdateOFormRoles", this.Roles);
};
OForm.prototype.onEndAction = function()
{
this.Format.removeUnusedFieldMasters();
this.Format.correctFieldMasters(this.getDocument());
this.correctFieldGroups();
this.updateRoles();
this.checkRedraw();
};
OForm.prototype.onUndoRedo = function()
{
this.updateRoles();
this.checkRedraw();
};
OForm.prototype.onEndLoadChanges = function()
{
this.onUndoRedo();
};
OForm.prototype.canFillRole = function(roleName)
{
let role = this.getRole(roleName);
if (!role || role.isFilled())
return false;
let weight = role.getWeight();
for (let i = 0; i < this.Roles.length; ++i)
{
if (this.Roles[i] === role || this.Roles[i].isFilled())
continue;
if (this.Roles[i].getWeight() < weight)
return false;
}
return true;
};
OForm.prototype.setRoleFilled = function(roleName, isFilled)
{
let role = this.getRole(roleName);
if (!role)
return;
role.setFilled(isFilled);
};
OForm.prototype.setAllRolesNotFilled = function()
{
for (let roleIndex = 0, roleCount = this.Roles.length; roleIndex < roleCount; ++roleIndex)
{
this.Roles[roleIndex].setFilled(false);
}
};
OForm.prototype.setAllRolesFilled = function(userPr)
{
let name = userPr ? userPr.name : null;
let id = userPr ? userPr.id : null;
let email = userPr ? userPr.email : null;
for (let roleIndex = 0, roleCount = this.Roles.length; roleIndex < roleCount; ++roleIndex)
{
let role = this.Roles[roleIndex];
if (role.isFilled())
continue;
role.setFilled(true);
let userMaster = role.getUserMaster();
if (!userMaster)
continue;
if (name)
userMaster.setUserName(name);
if (id)
userMaster.setUserId(id);
if (email)
userMaster.setEmail(email);
}
};
OForm.prototype.isAllRolesFilled = function()
{
for (let roleIndex = 0, roleCount = this.Roles.length; roleIndex < roleCount; ++roleIndex)
{
if (!this.Roles[roleIndex].isFilled())
return false;
}
return true;
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Private area
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
OForm.prototype.startAction = function(description)
{
let logicDocument = this.getDocument();
if (!logicDocument)
return false;
if (logicDocument.IsSelectionLocked(AscCommon.changestype_Document_Settings, null, false, false, null))
return false;
logicDocument.StartAction(description);
return true;
};
OForm.prototype.endAction = function()
{
let logicDocument = this.getDocument();
if (!logicDocument)
return;
this.onEndAction();
logicDocument.UpdateInterface();
logicDocument.FinalizeAction();
};
//--------------------------------------------------------export----------------------------------------------------
AscOForm.OForm = OForm;
//---------------------------------------------interface export-----------------------------------------------------
OForm.prototype['asc_getAllRoles'] = OForm.prototype.getAllRoles;
OForm.prototype['asc_addRole'] = OForm.prototype.addRole;
OForm.prototype['asc_removeRole'] = OForm.prototype.removeRole;
OForm.prototype['asc_editRole'] = OForm.prototype.editRole;
OForm.prototype['asc_moveUpRole'] = OForm.prototype.moveUpRole;
OForm.prototype['asc_moveDownRole'] = OForm.prototype.moveDownRole;
OForm.prototype['asc_haveRole'] = OForm.prototype.haveRole;
OForm.prototype['asc_getRole'] = OForm.prototype.getRoleSettings;
OForm.prototype['asc_canFillRole'] = OForm.prototype.canFillRole;
})(window);

View File

@ -1,172 +0,0 @@
/*
* (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";
(function(window)
{
/**
* Класс представляющий роль при заполнении формы. В данный момент роль - это ровно один userMaster
* и группа полей связанные с данным userMaster
* @param fieldGroup
* @param userMaster
* @constructor
*/
function CRole(fieldGroup, userMaster)
{
this.FieldGroup = fieldGroup;
this.UserMaster = userMaster;
}
CRole.prototype.getSettings = function()
{
let r = new CRoleSettings();
if (this.UserMaster)
{
r.setName(this.UserMaster.getRole());
r.setColor(this.UserMaster.getColor());
}
if (this.FieldGroup)
r.setFieldCount(this.FieldGroup.getAllFields().length)
return r;
};
CRole.prototype.getRole = function()
{
return this.UserMaster.getRole();
};
CRole.prototype.getUserMaster = function()
{
return this.UserMaster;
};
CRole.prototype.getWeight = function()
{
return this.FieldGroup.getWeight();
};
CRole.prototype.setWeight = function(weight)
{
if (this.FieldGroup)
this.FieldGroup.setWeight(weight);
};
CRole.prototype.isFilled = function()
{
return this.FieldGroup ? this.FieldGroup.isFilled() : true;
};
CRole.prototype.setFilled = function(isFilled)
{
if (!this.FieldGroup || isFilled === this.FieldGroup.isFilled())
return;
this.FieldGroup.setFilled(isFilled);
if (isFilled)
{
this.FieldGroup.setDate(Date.now());
}
else
{
this.UserMaster.setUserId(AscCommon.CreateGUID());
this.UserMaster.setUserName(undefined);
this.UserMaster.setUserEmail(undefined);
this.FieldGroup.setDate(undefined);
}
};
CRole.prototype.getFieldGroup = function()
{
return this.FieldGroup;
};
/**
* Класс для задания настроек роли из интерфейса
* @constructor
*/
function CRoleSettings()
{
this.Name = "";
this.Color = null;
this.FieldCount = 0;
}
CRoleSettings.prototype.getName = function()
{
return this.Name;
};
CRoleSettings.prototype.setName = function(name)
{
this.Name = name;
};
CRoleSettings.prototype.setColor = function(color)
{
this.Color = color ? color.Copy() : null;
};
CRoleSettings.prototype.getColor = function()
{
return this.Color;
};
CRoleSettings.prototype.setAscColor = function(ascColor)
{
if (undefined === ascColor || null === ascColor)
this.Color = null;
else
this.Color = new AscWord.CDocumentColor(ascColor.asc_getR(), ascColor.asc_getG(), ascColor.asc_getB());
}
CRoleSettings.prototype.getAscColor = function()
{
if (!this.Color)
return null;
return new Asc.asc_CColor(this.Color.r, this.Color.g, this.Color.b);
};
CRoleSettings.prototype.haveColor = function()
{
return (!!this.Color);
};
CRoleSettings.prototype.setFieldCount = function(count)
{
this.FieldCount = count;
};
CRoleSettings.prototype.getFieldCount = function()
{
return this.FieldCount;
};
//--------------------------------------------------------export----------------------------------------------------
AscOForm.CRole = CRole;
AscOForm.CRoleSettings = CRoleSettings;
//---------------------------------------------interface export-----------------------------------------------------
CRole.prototype['asc_getSettings'] = CRole.prototype.getSettings;
window['AscCommon']["CRoleSettings"] = CRoleSettings;
CRoleSettings.prototype["asc_getName"] = CRoleSettings.prototype.getName;
CRoleSettings.prototype["asc_putName"] = CRoleSettings.prototype.setName;
CRoleSettings.prototype["asc_getColor"] = CRoleSettings.prototype.getAscColor;
CRoleSettings.prototype["asc_putColor"] = CRoleSettings.prototype.setAscColor;
CRoleSettings.prototype["asc_getFieldCount"] = CRoleSettings.prototype.getFieldCount;
})(window);

306
oform/User.js Normal file
View File

@ -0,0 +1,306 @@
/*
* (c) Copyright Ascensio System SIA 2010-2019
*
* 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-12 Ernesta Birznieka-Upisha
* 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";
(function(window, undefined) {
const CBaseFormatObject = AscFormat.CBaseFormatObject;
const InitClass = AscFormat.InitClass;
const CChangesString = AscDFH.CChangesDrawingsString;
const CChangesObject = AscDFH.CChangesDrawingsObject;
const CChangesContent = AscDFH.CChangesDrawingsContent;
AscDFH.changesFactory[AscDFH.historyitem_UserMasterUserId] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_UserMasterSignInfo] = CChangesObject;
AscDFH.changesFactory[AscDFH.historyitem_UserMasterCipherInfo] = CChangesObject;
AscDFH.changesFactory[AscDFH.historyitem_UserMasterRole] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_UserEmail] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_UserTelephone] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_UserMasterUser] = CChangesContent;
AscDFH.drawingsChangesMap[AscDFH.historyitem_UserMasterUserId] = function(oClass, value) {oClass.UserId = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_UserMasterSignInfo] = function(oClass, value) {oClass.SignInfo = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_UserMasterCipherInfo] = function(oClass, value) {oClass.CipherInfo = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_UserMasterRole] = function(oClass, value) {oClass.Role = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_UserEmail] = function(oClass, value) {oClass.Email = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_UserTelephone] = function(oClass, value) {oClass.Telephone = value;};
AscDFH.drawingContentChanges[AscDFH.historyitem_UserMasterUser] = function(oClass) {return oClass.Users;};
function CUserMaster() {
CBaseFormatObject.call(this);
this.UserId = null;
this.SignInfo = null;
this.CipherInfo = null;
this.Role = null;
this.Users = [];
}
InitClass(CUserMaster, CBaseFormatObject, AscDFH.historyitem_type_UserMaster);
CUserMaster.prototype.setUserId = function (sUserId) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_UserMasterUserId, this.UserId, sUserId));
this.UserId = sUserId;
};
CUserMaster.prototype.setSignInfo = function (oSignInfo) {
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_UserMasterSignInfo, this.SignInfo, oSignInfo));
this.SignInfo = oSignInfo;
};
CUserMaster.prototype.setCipherInfo = function (oCipherInfo) {
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_UserMasterCipherInfo, this.CipherInfo, oCipherInfo));
this.CipherInfo = oCipherInfo;
};
CUserMaster.prototype.setRole = function (sRole) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_UserMasterRole, this.Role, sRole));
this.Role = sRole;
};
CUserMaster.prototype.addUser = function (oUser) {
AscCommon.History.Add(new CChangesContent(this, AscDFH.historyitem_UserMasterUser, this.Users.length, [oUser], true));
this.Users.push(oUser);
};
CUserMaster.prototype.readChildXml = function (name, reader) {
let bRead = false;
switch (name) {
case "Id": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setUserId(oNode.text);
bRead = true;
break;
}
case "SignInfo": {
let oSignInfo = new CSignInfo();
oSignInfo.fromXml(reader);
this.setSignInfo(oSignInfo);
bRead = true;
break;
}
case "CipherInfo": {
let oCipherInfo = new CCipherInfo();
oCipherInfo.fromXml(reader);
this.setCipherInfo(oCipherInfo);
bRead = true;
break;
}
case "Role": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setRole(oNode.text);
bRead = true;
break;
}
}
return bRead;
};
CUserMaster.prototype.writeChildren = function(writer) {
let oIdNode = new CT_XmlNode();
oIdNode.text = this.UserId;
oIdNode.toXml(writer, "Id");
if(this.SignInfo) {
this.SignInfo.toXml(writer);
}
if(this.CipherInfo) {
this.CipherInfo.toXml(writer);
}
let oRoleNode = new CT_XmlNode();
oRoleNode.text = this.Role;
oRoleNode.toXml(writer, "Role");
}
CUserMaster.prototype.toXml = function (writer) {
writer.WriteXmlString(AscCommonWord.g_sXmlHeader);
writer.WriteXmlNodeStart("UserMaster");
writer.WriteXmlAttributesEnd();
this.writeChildren(writer);
writer.WriteXmlNodeEnd("UserMaster");
};
function CUser() {
CUserMaster.call(this);
this.Email = null;
this.Telephone = null;
}
InitClass(CUser, CUserMaster, AscDFH.historyitem_type_User);
CUser.prototype.setEmail = function (sEmail) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_UserEmail, this.Email, sEmail));
this.Email = sEmail;
};
CUser.prototype.setTelephone = function (sTelephone) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_UserTelephone, this.Telephone, sTelephone));
this.Telephone = sTelephone;
};
CUser.prototype.readChildXml = function (name, reader) {
if(CUserMaster.prototype.readChildXml.call(this, name, reader)) {
return true;
}
let bRead = false;
switch (name) {
case "Email": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setEmail(oNode.text);
bRead = true;
break;
}
case "Telephone": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setTelephone(oNode.text);
bRead = true;
break;
}
}
return bRead;
};
CUser.prototype.toXml = function (writer) {
writer.WriteXmlString(AscCommonWord.g_sXmlHeader);
writer.WriteXmlNodeStart("User");
writer.WriteXmlAttributesEnd();
let oEmailNode = new CT_XmlNode();
oEmailNode.text = this.Email;
oEmailNode.toXml(writer, "Email");
let oTelephoneNode = new CT_XmlNode();
oTelephoneNode.text = this.Telephone;
oTelephoneNode.toXml(writer, "Telephone");
this.writeChildren(writer);
writer.WriteXmlNodeEnd("User");
};
function CSignInfo() {
CBaseFormatObject.call(this);
this.PublicKey = null;
this.X509 = null;
this.ImageValid = null;
this.ImageInvalid = null;
}
InitClass(CSignInfo, CBaseFormatObject, AscDFH.historyitem_type_SignInfo);
CSignInfo.prototype.setPublicKey = function (sPublicKey) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_SignInfo_PublicKey, this.PublicKey, sPublicKey));
this.PublicKey = sPublicKey;
};
CSignInfo.prototype.setX509 = function (sX509) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_SignInfo_X509, this.X509, sX509));
this.X509 = sX509;
};
CSignInfo.prototype.setImageValid = function (sImageValid) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_SignInfo_ImageValid, this.ImageValid, sImageValid));
this.ImageValid = sImageValid;
};
CSignInfo.prototype.setImageInvalid = function (sImageInvalid) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_SignInfo_ImageInvalid, this.ImageInvalid, sImageInvalid));
this.ImageInvalid = sImageInvalid;
};
CSignInfo.prototype.readChildXml = function (name, reader) {
switch (name) {
case "PublicKey": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setPublicKey(oNode.text);
break;
}
case "X509": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setX509(oNode.text);
break;
}
case "ImageValid": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setImageValid(oNode.text);
break;
}
case "ImageInvalid": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setImageInvalid(oNode.text);
break;
}
}
};
CSignInfo.prototype.toXml = function(writer) {
writer.WriteXmlNodeStart("SignInfo");
writer.WriteXmlAttributesEnd();
let oPublicKeyNode = new CT_XmlNode();
oPublicKeyNode.text = this.PublicKey;
oPublicKeyNode.toXml(writer, "PublicKey");
let oX509Node = new CT_XmlNode();
oX509Node.text = this.X509;
oX509Node.toXml(writer, "X509");
let oImageValidNode = new CT_XmlNode();
oImageValidNode.text = this.ImageValid;
oImageValidNode.toXml(writer, "ImageValid");
let oImageInvalidNode = new CT_XmlNode();
oImageInvalidNode.text = this.ImageInvalid;
oImageInvalidNode.toXml(writer, "ImageInvalid");
writer.WriteXmlNodeEnd("SignInfo");
};
function CCipherInfo() {
CBaseFormatObject.call(this);
this.PublicKey = null;
}
InitClass(CCipherInfo, CBaseFormatObject, AscDFH.historyitem_type_CipherInfo);
CCipherInfo.prototype.setPublicKey = function (sPublicKey) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_CipherInfo_PublicKey, this.PublicKey, sPublicKey));
this.PublicKey = sPublicKey;
};
CCipherInfo.prototype.readChildXml = function (name, reader) {
switch (name) {
case "PublicKey": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setPublicKey(oNode.text);
break;
}
}
};
CCipherInfo.prototype.toXml = function(writer) {
writer.WriteXmlNodeStart("CipherInfo");
writer.WriteXmlAttributesEnd();
let oPublicKeyNode = new CT_XmlNode();
oPublicKeyNode.text = this.PublicKey;
oPublicKeyNode.toXml(writer, "PublicKey");
writer.WriteXmlNodeEnd("CipherInfo");
};
AscWord.CUserMaster = CUserMaster;
AscWord.CUser = CUser;
AscWord.CSignInfo = CSignInfo;
AscWord.CCipherInfo = CCipherInfo;
})(window);

View File

@ -1,76 +0,0 @@
/*
* (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";
(function(window)
{
/**
* Базовый класс для всех форматных классов в oform
* @constructor
*/
function CBaseFormatObject()
{
this.Id = null;
if (!AscCommon.g_oIdCounter.m_bLoad && !AscCommon.History.CanAddChanges())
return;
this.Id = AscCommon.g_oIdCounter.GetNewIdForOForm();
AscCommon.g_oTableId.Add(this, this.Id);
}
CBaseFormatObject.prototype.GetId = function()
{
return this.Id;
};
CBaseFormatObject.prototype.Get_Id = function()
{
return this.Id;
};
CBaseFormatObject.prototype.Write_ToBinary2 = function(writer)
{
writer.WriteLong(this.classType);
writer.WriteString2(this.GetId());
};
CBaseFormatObject.prototype.Read_FromBinary2 = function(reader)
{
this.Id = reader.GetString2();
};
CBaseFormatObject.prototype.Refresh_RecalcData = function(change)
{
};
//--------------------------------------------------------export----------------------------------------------------
AscOForm.CBaseFormatObject = CBaseFormatObject;
})(window);

View File

@ -1,632 +0,0 @@
/*
* (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";
(function(window)
{
/**
* Основной класс для работы с форматом oform
* @param oform {AscOForm.OForm}
* @constructor
* @extends AscOForm.CBaseFormatObject
*/
function CDocument(oform)
{
AscOForm.CBaseFormatObject.call(this);
this.OForm = oform;
this.DefaultUser = new AscOForm.CUserMaster();
this.DefaultUser.initDefaultUser();
this.DefaultUser.setParent(this);
// Форматная часть
this.Author = null;
this.Date = null;
this.Description = null;
this.Type = null;
this.Application = null;
this.DocumentId = null;
this.FieldGroups = [];
// Массивы всех имеющихся пользователей и полей
this.Users = [];
this.UserMasters = [];
this.FieldMasters = [];
}
AscFormat.InitClass(CDocument, AscOForm.CBaseFormatObject, AscDFH.historyitem_type_OForm_Document);
CDocument.prototype.clear = function()
{
// TODO: fields?
this.clearUsers();
this.clearUserMasters();
this.clearFieldGroups();
this.clearFieldMasters();
};
CDocument.prototype.setDefaultUser = function(userMaster)
{
if (!userMaster || userMaster === this.DefaultUser)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentDefaultUser(this, this.DefaultUser.GetId(), userMaster.GetId()));
this.DefaultUser = userMaster;
};
CDocument.prototype.setAuthor = function(author)
{
if (this.Author === author)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentAuthor(this, this.Author, author));
this.Author = author;
};
CDocument.prototype.getAuthor = function()
{
return this.Author;
};
CDocument.prototype.setDate = function(date)
{
if (this.Date === date)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentDate(this, this.Date, date));
this.Date = date;
};
CDocument.prototype.getDate = function()
{
return this.Date;
};
CDocument.prototype.setDescription = function(description)
{
if (this.Description === description)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentDescription(this, this.Description, description));
this.Description = description;
};
CDocument.prototype.getDescription = function()
{
return this.Description;
};
CDocument.prototype.setType = function(type)
{
if (this.Type === type)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentType(this, this.Type, type));
this.Type = type;
};
CDocument.prototype.getType = function()
{
return this.Type;
};
CDocument.prototype.setApplication = function(app)
{
if (this.Application === app)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentApplication(this, this.Application, app));
this.Application = app;
};
CDocument.prototype.getApplication = function()
{
return this.Application;
};
CDocument.prototype.setDocumentId = function(documentId)
{
if (this.DocumentId === documentId)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentDocumentId(this, this.DocumentId, documentId));
this.DocumentId = documentId;
};
CDocument.prototype.getDocumentId = function()
{
return this.DocumentId;
};
CDocument.prototype.addFieldGroup = function(fieldGroup)
{
if (-1 !== this.FieldGroups.indexOf(fieldGroup))
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentFieldGroup(this, fieldGroup.GetId(), true));
this.FieldGroups.push(fieldGroup);
fieldGroup.setParent(this);
this.onChangeFieldGroups();
};
CDocument.prototype.removeFieldGroup = function(fieldGroup)
{
if (!fieldGroup)
return;
let index = this.FieldGroups.indexOf(fieldGroup);
if (-1 === index)
return;
fieldGroup.setParent(null);
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentFieldGroup(this, fieldGroup.GetId(), false));
this.FieldGroups.splice(index, 1);
this.onChangeFieldGroups();
};
CDocument.prototype.clearFieldGroups = function()
{
while (this.FieldGroups.length)
{
this.removeFieldGroup(this.FieldGroups[0]);
}
};
CDocument.prototype.getFieldGroupsCount = function()
{
return this.FieldGroups.length;
};
CDocument.prototype.getFieldGroup = function(index)
{
if (index < 0 || index >= this.FieldGroups.length)
return null;
return this.FieldGroups[index];
};
CDocument.prototype.fromPkg = function(xmlPkg, opt_sdtPrWithFieldPath)
{
let xmlContext = xmlPkg.getContext();
let mainPart = xmlPkg.getMainPart();
let mainContent = mainPart ? mainPart.getDocumentContent() : null;
if (mainContent)
{
let xmlParserContext = new AscCommon.XmlParserContext();
xmlParserContext.setOformContext(xmlContext);
let reader = new AscCommon.StaxParser(mainContent, mainPart, xmlParserContext);
this.fromXml(reader);
}
let document = this;
xmlContext.getAllUsers().forEach(function(user)
{
document.addUser(user)
});
xmlContext.getAllUserMasters().forEach(function(userMaster)
{
document.addUserMaster(userMaster);
});
xmlContext.getAllFieldMasters().forEach(function(fieldMaster)
{
document.addFieldMaster(fieldMaster);
});
//todo unite with XmlParserContext.prototype.assignFieldsToSdt
if (opt_sdtPrWithFieldPath) {
for (let nSdt = 0; nSdt < opt_sdtPrWithFieldPath.length; ++nSdt) {
let oPair = opt_sdtPrWithFieldPath[nSdt];
// let oFieldMaster = xmlContext.pathToFieldMaster[oPair.target];
let oFieldMaster = xmlContext.getFieldMaster(oPair.target);
if (oFieldMaster && oPair.sdt.SetFieldMaster) {
oPair.sdt.SetFieldMaster(oFieldMaster);
}
}
}
};
CDocument.prototype.toPkg = function(xmlPkg, opt_fieldMastersPartMap)
{
let xmlContext = xmlPkg.getContext();
let xmlWriter = xmlPkg.getXmlWriter();
let main = xmlPkg.addPart(AscCommon.openXml.Types.oformMain).part;
xmlWriter.Seek(0);
main.setDataXml(this, xmlWriter);
this.Users.forEach(function(user)
{
if (!xmlContext.haveUserPart(user))
{
xmlWriter.Seek(0);
let part = xmlPkg.addPart(AscCommon.openXml.Types.oformUser);
if (part)
part.part.setDataXml(user, xmlWriter);
}
});
this.UserMasters.forEach(function(userMaster)
{
if (!xmlContext.haveUserMasterPart(userMaster))
{
xmlWriter.Seek(0);
let part = xmlPkg.addPart(AscCommon.openXml.Types.oformUserMaster);
if (part)
part.part.setDataXml(userMaster, xmlWriter);
}
});
this.FieldMasters.forEach(function(fieldMaster)
{
if (!xmlContext.haveFieldMasterPart(fieldMaster))
{
xmlWriter.Seek(0);
let part = xmlPkg.addPart(AscCommon.openXml.Types.oformFieldMaster);
if (part)
{
part.part.setDataXml(fieldMaster, xmlWriter);
if (opt_fieldMastersPartMap)
{
//todo remove path manipulation
opt_fieldMastersPartMap[fieldMaster.Id] = '..'+part.part.uri;
}
}
}
});
};
CDocument.prototype.fromXml = function(reader)
{
this.clear();
// TODO: Author, Date
if (!reader.ReadNextNode() || "document" !== reader.GetNameNoNS())
return false;
let depth = reader.GetDepth();
while (reader.ReadNextSiblingNode(depth))
{
switch(reader.GetNameNoNS())
{
case "author":
break;
case "date":
break;
case "description":
this.setDescription(reader.GetTextDecodeXml());
break;
case "type":
this.setType(reader.GetTextDecodeXml());
break;
case "application":
this.setApplication(reader.GetTextDecodeXml());
break;
case "id":
this.setDocumentId(reader.GetTextDecodeXml());
break;
case "fieldGroup":
this.addFieldGroup(AscOForm.CFieldGroup.fromXml(reader));
break;
case "defaultUser":
{
while (reader.MoveToNextAttribute())
{
if ("r:id" === reader.GetName())
{
let xmlReaderContext = reader.GetOformContext();
let rId = reader.GetValueDecodeXml();
let rel = reader.rels.getRelationship(rId);
let userMaster = xmlReaderContext.getUserMaster(rel.getFullPath());
if (userMaster)
this.setDefaultUser(userMaster);
}
}
break;
}
}
}
return true;
};
CDocument.prototype.toXml = function(writer)
{
writer.WriteXmlHeader();
writer.WriteXmlNodeStart("document");
writer.WriteXmlRelationshipsNS();
writer.WriteXmlAttributesEnd();
// TODO: Author, Date
let description = this.getDescription();
if (description)
writer.WriteXmlNodeWithText("description", description);
let type = this.getType();
if (type)
writer.WriteXmlNodeWithText("type", type);
let application = this.getApplication();
if (application)
writer.WriteXmlNodeWithText("application", application);
let documentId = this.getDocumentId();
if (documentId)
writer.WriteXmlNodeWithText("id", documentId);
let xmlContext = writer.context;
let defaultUserPart = xmlContext.getDefaultUserMasterPart(this.DefaultUser);
if (defaultUserPart)
{
writer.WriteXmlNodeStart("defaultUser");
writer.WriteXmlNullableAttributeString("r:id", xmlContext.getRId(defaultUserPart));
writer.WriteXmlAttributesEnd(true);
}
for (let fgIndex = 0, fgCount = this.FieldGroups.length; fgIndex < fgCount; ++fgIndex)
{
this.FieldGroups[fgIndex].toXml(writer);
}
writer.WriteXmlNodeEnd("document");
};
/**
* @returns {AscOForm.CUserMaster}
*/
CDocument.prototype.getDefaultUserMaster = function()
{
return this.DefaultUser;
};
CDocument.prototype.addUser = function(user)
{
if (-1 !== this.Users.indexOf(user))
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentUser(this, user.GetId(), true));
this.Users.push(user);
};
CDocument.prototype.removeUser = function(user)
{
let index = this.Users.indexOf(user);
if (-1 === index)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentUser(this, user.GetId(), false));
this.Users.splice(index, 1);
};
CDocument.prototype.getUserCount = function()
{
return this.Users.length;
};
/**
* @param index {number}
* @returns {?AscOForm.CUser}
*/
CDocument.prototype.getUser = function(index)
{
if (index < 0 || index >= this.Users.length)
return null;
return this.Users[index];
};
CDocument.prototype.clearUsers = function()
{
while (this.Users.length)
{
this.removeUser(this.Users[0]);
}
};
CDocument.prototype.addUserMaster = function(userMaster)
{
if (-1 !== this.UserMasters.indexOf(userMaster))
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentUserMaster(this, userMaster.GetId(), true));
this.UserMasters.push(userMaster);
userMaster.setParent(this);
};
CDocument.prototype.removeUserMaster = function(userMaster)
{
let index = this.UserMasters.indexOf(userMaster);
if (-1 === index)
return;
userMaster.setParent(null);
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentUserMaster(this, userMaster.GetId(), false));
this.UserMasters.splice(index, 1);
};
CDocument.prototype.getUserMasterCount = function()
{
return this.UserMasters.length;
};
CDocument.prototype.getUserMaster = function(index)
{
if (index < 0 || index >= this.UserMasters.length)
return null;
return this.UserMasters[index];
};
CDocument.prototype.getAllUserMasters = function()
{
return this.UserMasters;
};
CDocument.prototype.clearUserMasters = function()
{
while (this.UserMasters.length)
{
this.removeUserMaster(this.UserMasters[0]);
}
};
CDocument.prototype.createFieldMaster = function(id)
{
let fieldMaster = new AscOForm.CFieldMaster(!id);
if (id)
fieldMaster.setFieldId(id);
this.addFieldMaster(fieldMaster);
return fieldMaster;
};
CDocument.prototype.addFieldMaster = function(fieldMaster)
{
if (-1 !== this.FieldMasters.indexOf(fieldMaster))
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentFieldMaster(this, fieldMaster.GetId(), true));
this.FieldMasters.push(fieldMaster);
};
CDocument.prototype.removeFieldMaster = function(fieldMaster)
{
let index = this.FieldMasters.indexOf(fieldMaster);
if (-1 === index)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentFieldMaster(this, fieldMaster.GetId(), false));
this.FieldMasters.splice(index, 1);
};
CDocument.prototype.removeFieldMasterByIndex = function(index)
{
if (index < 0 || index >= this.FieldMasters.length)
return;
let fieldMaster = this.FieldMasters[index];
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentFieldMaster(this, fieldMaster.GetId(), false));
this.FieldMasters.splice(index, 1);
};
CDocument.prototype.getFieldMasterCount = function()
{
return this.FieldMasters.length;
};
CDocument.prototype.getFieldMaster = function(index)
{
if (index < 0 || index >= this.FieldMasters.length)
return null;
return this.FieldMasters[index];
};
CDocument.prototype.clearFieldMasters = function()
{
while (this.FieldMasters.length)
{
this.removeFieldMaster(this.FieldMasters[0]);
}
};
CDocument.prototype.getMinWeight = function()
{
let min = -1;
for (let index = 0, count = this.FieldGroups.length; index < count; ++index)
{
let curWeight = this.FieldGroups[index].getWeight();
if (-1 === min || min > curWeight)
min = curWeight;
}
return min;
};
CDocument.prototype.getMaxWeight = function()
{
let max = -1;
for (let index = 0, count = this.FieldGroups.length; index < count; ++index)
{
let curWeight = this.FieldGroups[index].getWeight();
if (max < curWeight)
max = curWeight;
}
return max;
};
CDocument.prototype.getAllFieldsByUserMaster = function(userMaster)
{
let fields = [];
for (let index = 0, count = this.FieldMasters.length; index < count; ++index)
{
let fieldMaster = this.FieldMasters[index];
if (fieldMaster.checkUser(userMaster))
fields.push(fieldMaster);
}
return fields;
};
CDocument.prototype.onChangeFieldGroups = function()
{
if (!this.OForm)
return;
this.OForm.onChangeRoles();
};
CDocument.prototype.onChangeFieldGroup = function(fieldGroup)
{
if (!this.OForm)
return;
this.OForm.onChangeRoles();
};
CDocument.prototype.onChangeFieldGroupFilled = function(fieldGroup)
{
if (!this.OForm)
return;
this.OForm.onChangeFieldGroupFilled(fieldGroup);
};
CDocument.prototype.onChangeUserMaster = function(userMaster)
{
if (!this.OForm)
return;
this.OForm.onChangeRoles();
this.OForm.onChangeRoleColor();
};
CDocument.prototype.correctFieldMasters = function(logicDocument)
{
if (!logicDocument)
return;
let formManager = logicDocument.GetFormsManager();
let allForms = formManager.GetAllForms();
for (let index = 0, count = allForms.length; index < count; ++index)
{
let form = allForms[index];
let fieldMaster = form.GetFieldMaster();
if (!fieldMaster)
{
// TODO: Мы не можем здесь генерировать id, т.к. данная функция вызывается на открытии
// и тогда у разных клиентов будут разные id. Поэтому, пока лучше вообще такие поля будут без id
fieldMaster = new AscOForm.CFieldMaster(false);
this.addFieldMaster(fieldMaster);
fieldMaster.addUser(this.getDefaultUserMaster());
form.SetFieldMaster(fieldMaster);
}
fieldMaster.setLogicField(form);
}
for (let fieldIndex = this.FieldMasters.length - 1; fieldIndex >= 0; --fieldIndex)
{
let fieldMaster = this.FieldMasters[fieldIndex];
let form = fieldMaster.getLogicField();
if (!form || form.GetFieldMaster() !== fieldMaster)
this.removeFieldMasterByIndex(fieldIndex);
}
};
CDocument.prototype.removeUnusedFieldMasters = function()
{
for (let fieldIndex = this.FieldMasters.length - 1; fieldIndex >= 0; --fieldIndex)
{
let fieldMaster = this.FieldMasters[fieldIndex];
if (!fieldMaster.isUseInDocument())
this.removeFieldMasterByIndex(fieldIndex);
}
};
//--------------------------------------------------------export----------------------------------------------------
AscOForm.CDocument = CDocument;
})(window);

View File

@ -1,342 +0,0 @@
/*
* (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";
(function(window)
{
/**
* @constructor
* @extends AscOForm.CBaseFormatObject
*/
function CFieldGroup()
{
AscOForm.CBaseFormatObject.call(this);
this.Filled = false;
this.Date = undefined;
this.Weight = null;
this.Fields = [];
this.Users = [];
this.Parent = null;
}
AscFormat.InitClass(CFieldGroup, AscOForm.CBaseFormatObject, AscDFH.historyitem_type_OForm_FieldGroup);
CFieldGroup.prototype.setParent = function(parent)
{
if (this.Parent === parent)
return;
this.Parent = parent;
this.onChange();
};
CFieldGroup.prototype.isFilled = function()
{
return !!this.Filled;
};
CFieldGroup.prototype.setFilled = function(isFilled)
{
if (this.Filled === isFilled)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormFieldGroupFilled(this, this.Filled, isFilled));
this.Filled = isFilled;
this.onChangeFilled();
};
CFieldGroup.prototype.setWeight = function(value)
{
if (this.Weight === value)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormFieldGroupWeight(this, this.Weight, value));
this.Weight = value;
this.onChange();
};
CFieldGroup.prototype.getWeight = function()
{
return this.Weight;
};
CFieldGroup.prototype.setDate = function(date)
{
if (date === this.Date)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormFieldGroupDate(this, this.Date, date));
this.Date = date;
};
CFieldGroup.prototype.getDate = function()
{
return this.Date;
};
CFieldGroup.prototype.addField = function(field)
{
if (!field || -1 !== this.Fields.indexOf(field))
return;
AscCommon.History.Add(new AscDFH.CChangesOFormFieldGroupAddRemoveField(this, field.GetId(), true));
this.Fields.push(field);
this.onChange();
};
CFieldGroup.prototype.removeField = function(field)
{
if (!field)
return;
let index = this.Fields.indexOf(field);
if (-1 === index)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormFieldGroupAddRemoveField(this, field.GetId(), false));
this.Fields.splice(index, 1);
this.onChange();
};
CFieldGroup.prototype.getFieldCount = function()
{
return this.Fields.length;
};
CFieldGroup.prototype.getField = function(index)
{
return (index >= 0 && index < this.Fields.length ? this.Fields[index] : null);
};
CFieldGroup.prototype.addUser = function(user)
{
if (!user || -1 !== this.Users.indexOf(user))
return;
AscCommon.History.Add(new AscDFH.CChangesOFormFieldGroupAddRemoveUser(this, user.GetId(), true));
this.Users.push(user);
this.onChange();
};
CFieldGroup.prototype.removeUser = function(user)
{
if (!user)
return;
let index = this.Users.indexOf(user);
if (-1 === index)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormFieldGroupAddRemoveUser(this, user.GetId(), false));
this.Users.splice(index, 1);
this.onChange();
};
CFieldGroup.prototype.getUserCount = function()
{
return this.Users.length;
};
CFieldGroup.prototype.getUser = function(index)
{
return (index >= 0 && index < this.Users.length ? this.Users[index] : null);
};
CFieldGroup.prototype.clear = function()
{
while (this.Users.length)
{
this.removeUser(this.Users[this.Users.length - 1]);
}
while (this.Fields.length)
{
this.removeField(this.Fields[this.Fields.length - 1]);
}
};
CFieldGroup.prototype.onChange = function()
{
if (!this.Parent)
return;
this.Parent.onChangeFieldGroup(this);
};
CFieldGroup.prototype.onChangeFilled = function()
{
if (!this.Parent)
return;
this.Parent.onChangeFieldGroupFilled(this);
};
CFieldGroup.prototype.getAllFields = function()
{
let fields = [];
for (let fieldIndex = 0, fieldCount = this.Fields.length; fieldIndex < fieldCount; ++fieldIndex)
{
if (this.Fields[fieldIndex].isUseInDocument()
&& this.Fields[fieldIndex].isMainField())
{
fields.push(this.Fields[fieldIndex]);
}
}
if (this.Users.length && this.Parent)
{
for (let index = 0, count = this.Users.length; index < count; ++index)
{
let userFields = this.Parent.getAllFieldsByUserMaster(this.Users[index]);
for (let fieldIndex = 0, fieldCount = userFields.length; fieldIndex < fieldCount; ++fieldIndex)
{
if (-1 === fields.indexOf(userFields[fieldIndex])
&& userFields[fieldIndex].isUseInDocument()
&& userFields[fieldIndex].isMainField())
{
fields.push(userFields[fieldIndex]);
}
}
}
}
return fields;
};
CFieldGroup.prototype.getFirstUser = function()
{
let user = null;
for (let index = 0, userCount = this.Users.length; index < userCount; ++index)
{
let curUser = this.Users[index];
if (!user || user.compare(curUser) < 0)
user = curUser;
}
if (!user)
{
for (let fieldIndex = 0, fieldCount = this.Fields.length; fieldIndex < fieldCount; ++fieldIndex)
{
let curUser = this.Fields[fieldIndex].getFirstUser();
if (!user || user.compare(curUser) < 0)
user = curUser;
}
}
return user;
};
CFieldGroup.prototype.toXml = function(writer)
{
let context = writer.context;
writer.WriteXmlNodeStart("fieldGroup");
writer.WriteXmlNullableAttributeInt("weight", this.getWeight());
if (this.isFilled())
writer.WriteXmlNullableAttributeBool("filled", true);
if (this.Date)
{
let dateUtc = new Date(this.Date).toISOString().slice(0, 19) + 'Z';
writer.WriteXmlNullableAttributeString("date", dateUtc);
}
writer.WriteXmlAttributesEnd();
for (let userIndex = 0, userCount = this.Users.length; userIndex < userCount; ++userIndex)
{
let part = context.getUserMasterPart(this.Users[userIndex]);
if (!part)
continue;
writer.WriteXmlNodeStart("user");
writer.WriteXmlNullableAttributeString("r:id", context.getRId(part));
writer.WriteXmlAttributesEnd(true);
}
for (let fieldIndex = 0, fieldCount = this.Fields.length; fieldIndex < fieldCount; ++fieldIndex)
{
let part = context.getFieldMasterPart(this.Fields[fieldIndex]);
if (!part)
continue;
writer.WriteXmlNodeStart("field");
writer.WriteXmlNullableAttributeString("r:id", context.getRId(part));
writer.WriteXmlAttributesEnd(true);
}
writer.WriteXmlNodeEnd("fieldGroup");
};
CFieldGroup.fromXml = function(reader)
{
let fG = new CFieldGroup();
while (reader.MoveToNextAttribute())
{
let attrName = reader.GetNameNoNS();
if ("weight" === attrName)
fG.setWeight(reader.GetValueInt());
else if ("filled" === attrName)
fG.setFilled(reader.GetValueBool());
else if ("date" === attrName)
{
let date = AscCommon.getTimeISO8601(reader.GetValueDecodeXml());
if (!isNaN(date))
fG.setDate(date);
}
}
let xmlReaderContext = reader.GetOformContext();
let depth = reader.GetDepth();
while (reader.ReadNextSiblingNode(depth))
{
switch(reader.GetNameNoNS())
{
case "user":
while (reader.MoveToNextAttribute())
{
if ("r:id" === reader.GetName())
{
let rId = reader.GetValueDecodeXml();
let rel = reader.rels.getRelationship(rId);
let userMaster = xmlReaderContext && xmlReaderContext.getUserMaster(rel.getFullPath());
if (userMaster)
fG.addUser(userMaster);
}
}
break;
case "field":
while (reader.MoveToNextAttribute())
{
if ("r:id" === reader.GetName())
{
let rId = reader.GetValueDecodeXml();
let rel = reader.rels.getRelationship(rId);
let fieldMaster = xmlReaderContext && xmlReaderContext.getFieldMaster(rel.getFullPath());
if (fieldMaster)
fG.addField(fieldMaster);
}
}
break;
}
}
return fG;
};
//--------------------------------------------------------export----------------------------------------------------
AscOForm.CFieldGroup = CFieldGroup;
})(window);

View File

@ -1,303 +0,0 @@
/*
* (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";
(function(window)
{
/**
* @param {boolean} [generateId=false]
* @constructor
* @extends AscOForm.CBaseFormatObject
*/
function CFieldMaster(generateId)
{
AscOForm.CBaseFormatObject.call(this);
this.FieldId = null;
this.Field = null;
this.Users = [];
this.Signers = [];
if (true === generateId)
this.setFieldId(AscCommon.CreateGUID());
}
AscFormat.InitClass(CFieldMaster, AscOForm.CBaseFormatObject, AscDFH.historyitem_type_OForm_FieldMaster);
CFieldMaster.prototype.setLogicField = function(logicField)
{
this.Field = logicField;
};
CFieldMaster.prototype.getLogicField = function()
{
return this.Field;
};
CFieldMaster.prototype.clone = function()
{
let fm = new CFieldMaster(true);
this.copyTo(fm);
return fm;
};
CFieldMaster.prototype.copyTo = function(fm)
{
fm.clearUsers();
for (let index = 0, count = this.Users.length; index < count; ++index)
{
fm.addUser(this.Users[index]);
}
fm.clearSigners();
for (let index = 0, count = this.Signers.length; index < count; ++index)
{
fm.addSigner(this.Signers[index]);
}
};
CFieldMaster.prototype.setFieldId = function(fieldId)
{
if (fieldId === this.FieldId)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormFieldMasterFieldId(this, this.FieldId, fieldId));
this.FieldId = fieldId;
};
CFieldMaster.prototype.getFieldId = function()
{
return this.FieldId;
};
CFieldMaster.prototype.addUser = function(user)
{
if (-1 !== this.Users.indexOf(user))
return;
AscCommon.History.Add(new AscDFH.CChangesOFormFieldMasterAddRemoveUser(this, user.GetId(), true));
this.Users.push(user);
};
CFieldMaster.prototype.removeUser = function(user)
{
let index = this.Users.indexOf(user);
if (-1 === index)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormFieldMasterAddRemoveUser(this, user.GetId(), false));
this.Users.splice(index, 1);
};
CFieldMaster.prototype.clearUsers = function()
{
while (this.Users.length)
{
this.removeUser(this.Users[this.Users.length - 1]);
}
};
CFieldMaster.prototype.getUserCount = function()
{
return this.Users.length;
};
CFieldMaster.prototype.getUser = function(index)
{
if (index < 0 || index >= this.Users.length)
return null;
return this.Users[index];
};
CFieldMaster.prototype.getFirstUser = function()
{
let user = null;
for (let userIndex = 0, userCount = this.getUserCount(); userIndex < userCount; ++userIndex)
{
let curUser = this.getUser(userIndex);
if (!user || user.compare(curUser) < 0)
user = curUser;
}
return user;
};
CFieldMaster.prototype.addSigner = function(user)
{
if (-1 !== this.Signers.indexOf(user))
return;
AscCommon.History.Add(new AscDFH.CChangesOFormFieldMasterAddRemoveSigner(this, user.GetId(), true));
this.Signers.push(user);
};
CFieldMaster.prototype.removeSigner = function(user)
{
let index = this.Signers.indexOf(user);
if (-1 === index)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormFieldMasterAddRemoveSigner(this, user.GetId(), false));
this.Signers.splice(index, 1);
};
CFieldMaster.prototype.clearSigners = function()
{
while (this.Signers.length)
{
this.removeSigner(this.Signers[this.Signers.length - 1]);
}
};
CFieldMaster.prototype.checkUser = function(user)
{
for (let index = 0, count = this.Users.length; index < count; ++index)
{
if (this.Users[index] === user)
return true;
}
return false;
};
CFieldMaster.prototype.isUseInDocument = function()
{
return (this.Field
&& this.Field.IsUseInDocument()
&& this === this.Field.GetFieldMaster());
};
CFieldMaster.prototype.isMainField = function()
{
return (this.Field && this.Field.IsMainForm());
};
CFieldMaster.prototype.toXml = function(writer)
{
let context = writer.context;
writer.WriteXmlHeader();
writer.WriteXmlNodeStart("fieldMaster");
writer.WriteXmlRelationshipsNS();
if (this.FieldId)
writer.WriteXmlNullableAttributeString("id", this.FieldId);
writer.WriteXmlAttributesEnd();
writer.WriteXmlNodeStart("users");
writer.WriteXmlAttributesEnd();
for (let index = 0, count = this.Users.length; index < count; ++index)
{
let user = this.Users[index];
let part = context.getUserMasterPart(user);
if (!part)
continue;
writer.WriteXmlNodeStart("user");
writer.WriteXmlNullableAttributeString("r:id", context.getRId(part));
writer.WriteXmlAttributesEnd(true);
}
writer.WriteXmlNodeEnd("users");
writer.WriteXmlNodeStart("signRequest");
writer.WriteXmlAttributesEnd();
for (let index = 0, count = this.Signers.length; index < count; ++index)
{
let user = this.Signers[index];
let part = context.getUserMasterPart(user);
if (!part)
continue;
writer.WriteXmlNodeStart("user");
writer.WriteXmlNullableAttributeString("r:id", context.getRId(part));
writer.WriteXmlAttributesEnd(true);
}
writer.WriteXmlNodeEnd("signRequest");
writer.WriteXmlNodeEnd("fieldMaster");
};
CFieldMaster.fromXml = function(reader)
{
if (!reader.ReadNextNode())
return null;
if ("fieldMaster" !== reader.GetNameNoNS())
return null;
let fieldMaster = new CFieldMaster();
while (reader.MoveToNextAttribute())
{
if ("id" === reader.GetNameNoNS())
fieldMaster.setFieldId(reader.GetValueDecodeXml());
}
let depth = reader.GetDepth();
while (reader.ReadNextSiblingNode(depth))
{
switch(reader.GetNameNoNS())
{
case "users":
{
let users = readUsersFromXml(reader);
for (let index = 0, count = users.length; index < count; ++index)
{
fieldMaster.addUser(users[index]);
}
break;
}
case "signRequest":
{
let users = readUsersFromXml(reader);
for (let index = 0, count = users.length; index < count; ++index)
{
fieldMaster.addSigner(users[index]);
}
break;
}
}
}
return fieldMaster;
};
function readUsersFromXml(reader)
{
let xmlReaderContext = reader.GetOformContext();
let users = [];
let depth = reader.GetDepth();
while (reader.ReadNextSiblingNode(depth))
{
if ("user" === reader.GetNameNoNS())
{
while (reader.MoveToNextAttribute())
{
if ("r:id" === reader.GetName())
{
let rId = reader.GetValueDecodeXml();
let rel = reader.rels.getRelationship(rId);
let userMaster = xmlReaderContext && xmlReaderContext.getUserMaster(rel.getFullPath());
if (userMaster)
users.push(userMaster);
}
}
}
}
return users;
}
//--------------------------------------------------------export----------------------------------------------------
AscOForm.CFieldMaster = CFieldMaster;
})(window);

View File

@ -1,128 +0,0 @@
/*
* (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";
(function(window)
{
/**
* @param {AscOForm.CUserMaster} userMaster
* @constructor
* @extends AscOForm.CBaseFormatObject
*/
function CUser(userMaster)
{
AscOForm.CBaseFormatObject.call(this);
this.Email = undefined;
this.Telephone = undefined;
this.UserMaster = undefined;
if (userMaster)
this.setUserMaster(userMaster);
}
AscFormat.InitClass(CUser, AscOForm.CBaseFormatObject, AscDFH.historyitem_type_OForm_User);
CUser.prototype.setUserMaster = function(userMaster)
{
if (this.UserMaster === userMaster)
return;
let oldValue = this.UserMaster ? this.UserMaster.GetId() : undefined;
let newValue = userMaster ? userMaster.GetId() : undefined;
AscCommon.History.Add(new AscDFH.CChangesOFormUserUserMaster(this, oldValue, newValue));
this.UserMaster = userMaster;
};
CUser.prototype.setEmail = function(email)
{
if (email === this.Email)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormUserEmail(this, this.Email, email));
this.Email = email;
};
CUser.prototype.setTelephone = function(telephone)
{
if (telephone === this.Telephone)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormUserTelephone(this, this.Telephone, telephone));
this.Telephone = telephone;
};
CUser.prototype.getUserMaster = function()
{
return this.UserMaster;
};
CUser.prototype.toXml = function(writer)
{
writer.WriteXmlHeader();
writer.WriteXmlNodeStart("user");
writer.WriteXmlAttributesEnd();
if (this.Email)
writer.WriteXmlNodeWithText("email", this.Email);
if (this.Telephone)
writer.WriteXmlNodeWithText("telephone", this.Telephone);
writer.WriteXmlNodeEnd("user");
};
CUser.fromXml = function(reader)
{
if (!reader.ReadNextNode())
return null;
let name = reader.GetNameNoNS();
if ("user" !== reader.GetNameNoNS())
return null;
let user = new CUser();
let depth = reader.GetDepth();
while (reader.ReadNextSiblingNode(depth))
{
name = reader.GetNameNoNS();
switch(reader.GetNameNoNS())
{
case "email":
user.setEmail(reader.GetTextDecodeXml());
break;
case "telephone":
user.setTelephone(reader.GetTextDecodeXml());
break;
}
}
return user;
};
//--------------------------------------------------------export----------------------------------------------------
AscOForm.CUser = CUser;
})(window);

View File

@ -1,295 +0,0 @@
/*
* (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";
(function(window)
{
let noRole = null;
function getNoRole()
{
if (!noRole)
{
noRole = AscCommon.ExecuteNoHistory(function()
{
let user = new CUserMaster();
user.setUserId("{BA186350-BB64-8503-5C55-083595AB15A9}");
user.setRole("NoRole");
return user;
});
}
return noRole;
}
/**
* @param {boolean} [generateId=false]
* @constructor
* @extends AscOForm.CBaseFormatObject
*/
function CUserMaster(generateId)
{
AscOForm.CBaseFormatObject.call(this);
this.UserId = undefined;
this.UserName = undefined;
this.UserEmail = undefined;
this.Role = undefined;
this.Color = undefined;
if (true === generateId)
this.setUserId(AscCommon.CreateGUID());
this.Parent = null;
}
AscFormat.InitClass(CUserMaster, AscOForm.CBaseFormatObject, AscDFH.historyitem_type_OForm_UserMaster);
CUserMaster.prototype.setParent = function(parent)
{
if (this.Parent === parent)
return;
this.Parent = parent;
this.onChange();
};
CUserMaster.prototype.setUserId = function(userId)
{
if (userId === this.UserId)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormUserMasterUserId(this, this.UserId, userId));
this.UserId = userId;
this.onChange();
};
CUserMaster.prototype.getUserId = function()
{
return this.UserId;
};
CUserMaster.prototype.setUserName = function(userName)
{
if (userName === this.UserName)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormUserMasterUserName(this, this.UserName, userName));
this.UserName = userName;
this.onChange();
};
CUserMaster.prototype.getUserName = function()
{
return this.UserName;
};
CUserMaster.prototype.setUserEmail = function(userEmail)
{
if (userEmail === this.UserEmail)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormUserMasterUserEmail(this, this.UserEmail, userEmail));
this.UserEmail = userEmail;
this.onChange();
};
CUserMaster.prototype.getUserEmail = function()
{
return this.UserEmail;
};
CUserMaster.prototype.setRole = function(role)
{
if (role === this.Role)
return;
role = null === role ? undefined : role;
AscCommon.History.Add(new AscDFH.CChangesOFormUserMasterRole(this, this.Role, role));
this.Role = role;
this.onChange();
};
CUserMaster.prototype.getRole = function()
{
return this.Role ? this.Role : "";
};
CUserMaster.prototype.isNoRole = function()
{
return (this === AscOForm.getNoRole());
};
CUserMaster.prototype.setColor = function(r, g, b)
{
let newColor = undefined !== r && null !== r ? new AscWord.CDocumentColor(r, g, b) : undefined;
let oldColor = this.Color;
if ((!newColor && !oldColor) || (oldColor && oldColor.IsEqual(newColor)))
return;
AscCommon.History.Add(new AscDFH.CChangesOFormUserMasterColor(this, oldColor, newColor));
this.Color = newColor;
this.onChange();
};
CUserMaster.prototype.getColor = function()
{
return this.Color ? this.Color : null;
};
CUserMaster.prototype.initDefaultUser = function()
{
// TODO: Возможно стоит придумать уникальный id общий для дефолтовой роли
this.setRole("Anyone");
this.setColor(255, 239, 191);
};
CUserMaster.prototype.compare = function(user)
{
let res = AscCommon.CompareStrings(this.Role, user.Role);
if (0 !== res)
return res;
res = AscCommon.CompareStrings(this.UserId, user.UserId);
if (0 !== res)
return res;
if (!this.Color && !user.Color)
return 0;
else if (!this.Color && user.Color)
return -1;
else if (this.Color && !user.Color)
return 1;
if (this.Color.r < user.Color.r)
return -1;
else if (this.Color.r > user.Color.r)
return 1;
else if (this.Color.g < user.Color.g)
return -1;
else if (this.Color.g > user.Color.g)
return 1;
else if (this.Color.b < user.Color.b)
return -1;
else if (this.Color.b > user.Color.b)
return 1;
return 0;
};
CUserMaster.prototype.isEqual = function(user)
{
return (0 === this.compare(user));
};
CUserMaster.prototype.isDefaultUserProps = function()
{
let result = false;
let u = this;
AscCommon.ExecuteNoHistory(function()
{
let defaultUser = new CUserMaster();
defaultUser.initDefaultUser();
result = defaultUser.isEqual(u);
});
return result;
};
CUserMaster.prototype.onChange = function()
{
if (!this.Parent)
return;
this.Parent.onChangeUserMaster(this);
};
CUserMaster.prototype.toXml = function(writer)
{
writer.WriteXmlHeader();
writer.WriteXmlNodeStart("user");
writer.WriteXmlAttributesEnd();
if (this.UserId)
writer.WriteXmlNodeWithText("id", this.UserId);
if (this.UserName)
writer.WriteXmlNodeWithText("name", this.UserName);
if (this.UserEmail)
writer.WriteXmlNodeWithText("email", this.UserEmail);
if (this.Role)
writer.WriteXmlNodeWithText("role", this.Role);
if (this.Color)
{
writer.WriteXmlNodeStart("color");
writer.WriteXmlNullableAttributeStringEncode("val", this.Color.ToHexColor());
writer.WriteXmlAttributesEnd(true);
}
writer.WriteXmlNodeEnd("user");
};
CUserMaster.fromXml = function(reader)
{
if (!reader.ReadNextNode())
return null;
let name = reader.GetNameNoNS();
if ("user" !== reader.GetNameNoNS())
return null;
let um = new CUserMaster();
let depth = reader.GetDepth();
while (reader.ReadNextSiblingNode(depth))
{
name = reader.GetNameNoNS();
switch(reader.GetNameNoNS())
{
case "id":
um.setUserId(reader.GetTextDecodeXml());
break;
case "name":
um.setUserName(reader.GetTextDecodeXml());
break;
case "email":
um.setUserEmail(reader.GetTextDecodeXml());
break;
case "role":
um.setRole(reader.GetTextDecodeXml());
break;
case "color":
while (reader.MoveToNextAttribute())
{
if ("val" === reader.GetNameNoNS())
{
let color = new AscWord.CDocumentColor();
color.SetFromHexColor(reader.GetValueDecodeXml());
um.setColor(color.r, color.g, color.b);
}
}
reader.ReadTillEnd();
break;
}
}
return um;
};
//--------------------------------------------------------export----------------------------------------------------
AscOForm.CUserMaster = CUserMaster;
AscOForm.getNoRole = getNoRole;
})(window);

View File

@ -1,103 +0,0 @@
/*
* (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";
(function(window)
{
/**
* Базовое изменение для работы с каким-либо контейнером, в который по ключу-key (string)
* добавляют/удаляют значение
* @constructor
* @extends {window['AscDFH'].CChangesBase}
*/
function CChangesDictionaryBase(Class, key, isAdd)
{
AscDFH.CChangesBase.call(this, Class);
this.Key = key;
this.Add = isAdd;
}
CChangesDictionaryBase.prototype = Object.create(AscDFH.CChangesBase.prototype);
CChangesDictionaryBase.prototype.constructor = CChangesDictionaryBase;
CChangesDictionaryBase.prototype.Redo = function()
{
if (this.Add)
this.private_AddToDictionary();
else
this.private_RemoveFromDictionary();
};
CChangesDictionaryBase.prototype.Undo = function()
{
if (this.Add)
this.private_RemoveFromDictionary();
else
this.private_AddToDictionary();
};
CChangesDictionaryBase.prototype.WriteToBinary = function(writer)
{
writer.WriteString2(this.Key);
writer.WriteBool(this.Add);
};
CChangesDictionaryBase.prototype.ReadFromBinary = function(reader)
{
this.Key = reader.GetString2();
this.Add = reader.GetBool();
};
CChangesDictionaryBase.prototype.IsNeedRecalculate = function()
{
return false;
};
CChangesDictionaryBase.prototype.CreateReverseChange = function()
{
return new this.constructor(this.Class, this.Key, !this.Add);
};
CChangesDictionaryBase.prototype.private_AddToDictionary = function()
{
};
CChangesDictionaryBase.prototype.private_RemoveFromDictionary = function()
{
};
window['AscDFH'].CChangesDictionaryBase = CChangesDictionaryBase;
function InheritDictionaryChange(changeClass, type, addFunction, removeFunction)
{
window['AscDFH'].changesFactory[type] = changeClass;
changeClass.prototype = Object.create(CChangesDictionaryBase.prototype);
changeClass.prototype.constructor = changeClass;
changeClass.prototype.Type = type;
changeClass.prototype.private_AddToDictionary = addFunction;
changeClass.prototype.private_RemoveFromDictionary = removeFunction;
}
window['AscDFH'].InheritDictionaryChange = InheritDictionaryChange;
})(window);

View File

@ -1,329 +0,0 @@
/*
* (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";
(function(window)
{
window['AscDFH'].historyitem_OForm_Document_Author = window['AscDFH'].historyitem_type_OForm_Document | 1;
window['AscDFH'].historyitem_OForm_Document_Date = window['AscDFH'].historyitem_type_OForm_Document | 2;
window['AscDFH'].historyitem_OForm_Document_Description = window['AscDFH'].historyitem_type_OForm_Document | 3;
window['AscDFH'].historyitem_OForm_Document_Type = window['AscDFH'].historyitem_type_OForm_Document | 4;
window['AscDFH'].historyitem_OForm_Document_Application = window['AscDFH'].historyitem_type_OForm_Document | 5;
window['AscDFH'].historyitem_OForm_Document_DocumentId = window['AscDFH'].historyitem_type_OForm_Document | 6;
window['AscDFH'].historyitem_OForm_Document_FieldGroup = window['AscDFH'].historyitem_type_OForm_Document | 7;
window['AscDFH'].historyitem_OForm_Document_User = window['AscDFH'].historyitem_type_OForm_Document | 8;
window['AscDFH'].historyitem_OForm_Document_UserMaster = window['AscDFH'].historyitem_type_OForm_Document | 9;
window['AscDFH'].historyitem_OForm_Document_FieldMaster = window['AscDFH'].historyitem_type_OForm_Document | 10;
window['AscDFH'].historyitem_OForm_Document_DefaultUser = window['AscDFH'].historyitem_type_OForm_Document | 11;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormDocumentAuthor(Class, oldAuthor, newAuthor)
{
let oldId = oldAuthor ? oldAuthor.GetId() : undefined;
let newId = newAuthor ? newAuthor.GetId() : undefined;
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, oldId, newId);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormDocumentAuthor,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_Document_Author,
function(value)
{
if (undefined === value)
{
this.Class.Author = undefined;
}
else
{
let author = AscCommon.g_oTableId.GetById(value);
if (author)
this.Class.Author = value;
}
},
false
);
window['AscDFH'].CChangesOFormDocumentAuthor = CChangesOFormDocumentAuthor;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormDocumentDate(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormDocumentDate,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_Document_Date,
function(value)
{
this.Class.Date = value;
},
false
);
window['AscDFH'].CChangesOFormDocumentDate = CChangesOFormDocumentDate;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormDocumentDescription(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormDocumentDescription,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_Document_Description,
function(value)
{
this.Class.Description = value;
},
false
);
window['AscDFH'].CChangesOFormDocumentDescription = CChangesOFormDocumentDescription;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormDocumentType(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormDocumentType,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_Document_Type,
function(value)
{
this.Class.Type = value;
},
false
);
window['AscDFH'].CChangesOFormDocumentType = CChangesOFormDocumentType;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormDocumentApplication(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormDocumentApplication,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_Document_Application,
function(value)
{
this.Class.Application = value;
},
false
);
window['AscDFH'].CChangesOFormDocumentApplication = CChangesOFormDocumentApplication;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormDocumentDocumentId(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormDocumentDocumentId,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_Document_DocumentId,
function(value)
{
this.Class.DocumentId = value;
},
false
);
window['AscDFH'].CChangesOFormDocumentDocumentId = CChangesOFormDocumentDocumentId;
/**
* @constructor
* @extends {window['AscDFH'].CChangesDictionaryBase}
*/
function CChangesOFormDocumentFieldGroup(Class, fieldGroupId, isAdd)
{
window['AscDFH'].CChangesDictionaryBase.call(this, Class, fieldGroupId, isAdd);
}
window['AscDFH'].InheritDictionaryChange(
CChangesOFormDocumentFieldGroup,
window['AscDFH'].historyitem_OForm_Document_FieldGroup,
function()
{
let fieldGroup = AscCommon.g_oTableId.GetById(this.Key);
if (-1 === this.Class.FieldGroups.indexOf(fieldGroup))
{
fieldGroup.setParent(this.Class);
this.Class.FieldGroups.push(fieldGroup);
this.Class.onChangeFieldGroups();
}
},
function()
{
let fieldGroup = AscCommon.g_oTableId.GetById(this.Key);
let index = this.Class.FieldGroups.indexOf(fieldGroup);
if (-1 !== index)
{
fieldGroup.setParent(null);
this.Class.FieldGroups.splice(index, 1);
this.Class.onChangeFieldGroups();
}
}
);
window['AscDFH'].CChangesOFormDocumentFieldGroup = CChangesOFormDocumentFieldGroup;
/**
* @constructor
* @extends {window['AscDFH'].CChangesDictionaryBase}
*/
function CChangesOFormDocumentUser(Class, userId, isAdd)
{
window['AscDFH'].CChangesDictionaryBase.call(this, Class, userId, isAdd);
}
window['AscDFH'].InheritDictionaryChange(
CChangesOFormDocumentUser,
window['AscDFH'].historyitem_OForm_Document_User,
function()
{
let user = AscCommon.g_oTableId.GetById(this.Key);
if (-1 === this.Class.Users.indexOf(user))
this.Class.Users.push(user);
},
function()
{
let user = AscCommon.g_oTableId.GetById(this.Key);
let index = this.Class.Users.indexOf(user);
if (-1 !== index)
this.Class.Users.splice(index, 1);
}
);
window['AscDFH'].CChangesOFormDocumentUser = CChangesOFormDocumentUser;
/**
* @constructor
* @extends {window['AscDFH'].CChangesDictionaryBase}
*/
function CChangesOFormDocumentUserMaster(Class, userMasterId, isAdd)
{
window['AscDFH'].CChangesDictionaryBase.call(this, Class, userMasterId, isAdd);
}
window['AscDFH'].InheritDictionaryChange(
CChangesOFormDocumentUserMaster,
window['AscDFH'].historyitem_OForm_Document_UserMaster,
function()
{
let userMaster = AscCommon.g_oTableId.GetById(this.Key);
if (-1 === this.Class.UserMasters.indexOf(userMaster))
{
userMaster.setParent(this.Class);
this.Class.UserMasters.push(userMaster);
}
},
function()
{
let userMaster = AscCommon.g_oTableId.GetById(this.Key);
let index = this.Class.UserMasters.indexOf(userMaster);
if (-1 !== index)
{
userMaster.setParent(null);
this.Class.UserMasters.splice(index, 1);
}
}
);
window['AscDFH'].CChangesOFormDocumentUserMaster = CChangesOFormDocumentUserMaster;
/**
* @constructor
* @extends {window['AscDFH'].CChangesDictionaryBase}
*/
function CChangesOFormDocumentFieldMaster(Class, fieldMasterId, isAdd)
{
window['AscDFH'].CChangesDictionaryBase.call(this, Class, fieldMasterId, isAdd);
}
window['AscDFH'].InheritDictionaryChange(
CChangesOFormDocumentFieldMaster,
window['AscDFH'].historyitem_OForm_Document_FieldMaster,
function()
{
let field = AscCommon.g_oTableId.GetById(this.Key);
if (-1 === this.Class.FieldMasters.indexOf(field))
this.Class.FieldMasters.push(field);
},
function()
{
let field = AscCommon.g_oTableId.GetById(this.Key);
let index = this.Class.FieldMasters.indexOf(field);
if (-1 !== index)
this.Class.FieldMasters.splice(index, 1);
}
);
window['AscDFH'].CChangesOFormDocumentFieldMaster = CChangesOFormDocumentFieldMaster;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormDocumentDefaultUser(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormDocumentDefaultUser,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_Document_DefaultUser,
function(value)
{
let document = this.Class;
let userMaster = AscCommon.g_oTableId.GetById(value);
if (userMaster)
{
userMaster.setParent(document);
document.DefaultUser = userMaster;
}
},
false
);
window['AscDFH'].CChangesOFormDocumentDefaultUser = CChangesOFormDocumentDefaultUser;
})(window);

View File

@ -1,168 +0,0 @@
/*
* (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";
(function(window)
{
window['AscDFH'].historyitem_OForm_FieldGroup_Weight = window['AscDFH'].historyitem_type_OForm_FieldGroup | 1;
window['AscDFH'].historyitem_OForm_FieldGroup_AddRemoveField = window['AscDFH'].historyitem_type_OForm_FieldGroup | 2;
window['AscDFH'].historyitem_OForm_FieldGroup_AddRemoveUser = window['AscDFH'].historyitem_type_OForm_FieldGroup | 3;
window['AscDFH'].historyitem_OForm_FieldGroup_Filled = window['AscDFH'].historyitem_type_OForm_FieldGroup | 4;
window['AscDFH'].historyitem_OForm_FieldGroup_Date = window['AscDFH'].historyitem_type_OForm_FieldGroup | 5;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseLongProperty}
*/
function CChangesOFormFieldGroupWeight(Class, Old, New)
{
window['AscDFH'].CChangesBaseLongProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormFieldGroupWeight,
window['AscDFH'].CChangesBaseLongProperty,
window['AscDFH'].historyitem_OForm_FieldGroup_Weight,
function(value)
{
this.Class.Weight = value;
this.Class.onChange();
},
false
);
window['AscDFH'].CChangesOFormFieldGroupWeight = CChangesOFormFieldGroupWeight;
/**
* @constructor
* @extends {window['AscDFH'].CChangesDictionaryBase}
*/
function CChangesOFormFieldGroupAddRemoveField(Class, fieldId, isAdd)
{
window['AscDFH'].CChangesDictionaryBase.call(this, Class, fieldId, isAdd);
}
window['AscDFH'].InheritDictionaryChange(
CChangesOFormFieldGroupAddRemoveField,
window['AscDFH'].historyitem_OForm_FieldGroup_AddRemoveField,
function()
{
let field = AscCommon.g_oTableId.GetById(this.Key);
if (-1 === this.Class.Fields.indexOf(field))
this.Class.Fields.push(field);
this.Class.onChange();
},
function()
{
let field = AscCommon.g_oTableId.GetById(this.Key);
let index = this.Class.Fields.indexOf(field);
if (-1 !== index)
this.Class.Fields.splice(index, 1);
this.Class.onChange();
}
);
window['AscDFH'].CChangesOFormFieldGroupAddRemoveField = CChangesOFormFieldGroupAddRemoveField;
/**
* @constructor
* @extends {window['AscDFH'].CChangesDictionaryBase}
*/
function CChangesOFormFieldGroupAddRemoveUser(Class, userMasterId, isAdd)
{
window['AscDFH'].CChangesDictionaryBase.call(this, Class, userMasterId, isAdd);
}
window['AscDFH'].InheritDictionaryChange(
CChangesOFormFieldGroupAddRemoveUser,
window['AscDFH'].historyitem_OForm_FieldGroup_AddRemoveUser,
function()
{
let userMaster = AscCommon.g_oTableId.GetById(this.Key);
if (-1 === this.Class.Users.indexOf(userMaster))
this.Class.Users.push(userMaster);
this.Class.onChange();
},
function()
{
let userMaster = AscCommon.g_oTableId.GetById(this.Key);
let index = this.Class.Fields.indexOf(userMaster);
if (-1 !== index)
this.Class.Users.splice(index, 1);
this.Class.onChange();
}
);
window['AscDFH'].CChangesOFormFieldGroupAddRemoveUser = CChangesOFormFieldGroupAddRemoveUser;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseBoolProperty}
*/
function CChangesOFormFieldGroupFilled(Class, Old, New)
{
window['AscDFH'].CChangesBaseBoolProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormFieldGroupFilled,
window['AscDFH'].CChangesBaseBoolProperty,
window['AscDFH'].historyitem_OForm_FieldGroup_Filled,
function(value)
{
this.Class.Filled = value;
this.Class.onChangeFilled();
},
false
);
window['AscDFH'].CChangesOFormFieldGroupFilled = CChangesOFormFieldGroupFilled;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormFieldGroupDate(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormFieldGroupDate,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_FieldGroup_Date,
function(value)
{
let v = parseInt(value);
this.Class.Date = isNaN(v) ? undefined : v;
},
false
);
window['AscDFH'].CChangesOFormFieldGroupDate = CChangesOFormFieldGroupDate;
})(window);

View File

@ -1,115 +0,0 @@
/*
* (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";
(function(window)
{
window['AscDFH'].historyitem_OFormFieldMaster_FieldId = window['AscDFH'].historyitem_type_OForm_FieldMaster | 1;
window['AscDFH'].historyitem_OFormFieldMaster_AddRemoveUser = window['AscDFH'].historyitem_type_OForm_FieldMaster | 2;
window['AscDFH'].historyitem_OFormFieldMaster_AddRemoveSigner = window['AscDFH'].historyitem_type_OForm_FieldMaster | 3;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormFieldMasterFieldId(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormFieldMasterFieldId,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OFormFieldMaster_FieldId,
function(value)
{
this.Class.FieldId = value;
},
false
);
window['AscDFH'].CChangesOFormFieldMasterFieldId = CChangesOFormFieldMasterFieldId;
/**
* @constructor
* @extends {window['AscDFH'].CChangesDictionaryBase}
*/
function CChangesOFormFieldMasterAddRemoveUser(Class, userId, isAdd)
{
window['AscDFH'].CChangesDictionaryBase.call(this, Class, userId, isAdd);
}
window['AscDFH'].InheritDictionaryChange(
CChangesOFormFieldMasterAddRemoveUser,
window['AscDFH'].historyitem_OFormFieldMaster_AddRemoveUser,
function()
{
let user = AscCommon.g_oTableId.GetById(this.Key);
if (-1 === this.Class.Users.indexOf(user))
this.Class.Users.push(user);
},
function()
{
let user = AscCommon.g_oTableId.GetById(this.Key);
let index = this.Class.Users.indexOf(user);
if (-1 !== index)
this.Class.Users.splice(index, 1);
}
);
window['AscDFH'].CChangesOFormFieldMasterAddRemoveUser = CChangesOFormFieldMasterAddRemoveUser;
/**
* @constructor
* @extends {window['AscDFH'].CChangesDictionaryBase}
*/
function CChangesOFormFieldMasterAddRemoveSigner(Class, userId, isAdd)
{
window['AscDFH'].CChangesDictionaryBase.call(this, Class, userId, isAdd);
}
window['AscDFH'].InheritDictionaryChange(
CChangesOFormFieldMasterAddRemoveSigner,
window['AscDFH'].historyitem_OFormFieldMaster_AddSigner,
function()
{
let user = AscCommon.g_oTableId.GetById(this.Key);
if (-1 === this.Class.Signers.indexOf(user))
this.Class.Signers.push(user);
},
function()
{
let user = AscCommon.g_oTableId.GetById(this.Key);
let index = this.Class.Signers.indexOf(user);
if (-1 !== index)
this.Class.Signers.splice(index, 1);
}
);
window['AscDFH'].CChangesOFormFieldMasterAddRemoveSigner = CChangesOFormFieldMasterAddRemoveSigner;
})(window);

View File

@ -1,110 +0,0 @@
/*
* (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";
(function(window)
{
window['AscDFH'].historyitem_OForm_User_UserMaster = window['AscDFH'].historyitem_type_OForm_User | 1;
window['AscDFH'].historyitem_OForm_User_Email = window['AscDFH'].historyitem_type_OForm_User | 2;
window['AscDFH'].historyitem_OForm_User_Telephone = window['AscDFH'].historyitem_type_OForm_User | 3;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormUserUserMaster(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormUserUserMaster,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_User_UserMaster,
function(value)
{
if (!value)
{
this.Class.UserMaster = undefined;
}
else
{
let userMaster = AscCommon.g_oTableId.Get_ById(value);
if (userMaster)
this.Class.UserMaster = userMaster;
}
},
false
);
window['AscDFH'].CChangesOFormUserUserMaster = CChangesOFormUserUserMaster;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormUserEmail(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormUserEmail,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_User_Email,
function(value)
{
this.Class.Email = value;
},
false
);
window['AscDFH'].CChangesOFormUserEmail = CChangesOFormUserEmail;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormUserTelephone(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormUserTelephone,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_User_Telephone,
function(value)
{
this.Class.Telephone = value;
},
false
);
window['AscDFH'].CChangesOFormUserTelephone = CChangesOFormUserTelephone;
})(window);

View File

@ -1,152 +0,0 @@
/*
* (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";
(function(window)
{
window['AscDFH'].historyitem_OForm_UserMaster_UserId = window['AscDFH'].historyitem_type_OForm_UserMaster | 1;
window['AscDFH'].historyitem_OForm_UserMaster_Role = window['AscDFH'].historyitem_type_OForm_UserMaster | 2;
window['AscDFH'].historyitem_OForm_UserMaster_Color = window['AscDFH'].historyitem_type_OForm_UserMaster | 3;
window['AscDFH'].historyitem_OForm_UserMaster_UserName = window['AscDFH'].historyitem_type_OForm_UserMaster | 4;
window['AscDFH'].historyitem_OForm_UserMaster_UserEmail = window['AscDFH'].historyitem_type_OForm_UserMaster | 5;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormUserMasterUserId(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormUserMasterUserId,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_UserMaster_UserId,
function(Value)
{
this.Class.UserId = Value;
this.Class.onChange();
},
false
);
window['AscDFH'].CChangesOFormUserMasterUserId = CChangesOFormUserMasterUserId;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormUserMasterRole(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormUserMasterRole,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_UserMaster_Role,
function(Value)
{
this.Class.Role = Value;
this.Class.onChange();
},
false
);
window['AscDFH'].CChangesOFormUserMasterRole = CChangesOFormUserMasterRole;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseObjectProperty}
*/
function CChangesOFormUserMasterColor(Class, Old, New)
{
window['AscDFH'].CChangesBaseObjectProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormUserMasterColor,
window['AscDFH'].CChangesBaseObjectProperty,
window['AscDFH'].historyitem_OForm_UserMaster_Color,
function(value)
{
this.Class.Color = value;
this.Class.onChange();
},
false
);
CChangesOFormUserMasterColor.prototype.private_CreateObject = function()
{
return new AscWord.CDocumentColor(0, 0, 0);
};
window['AscDFH'].CChangesOFormUserMasterColor = CChangesOFormUserMasterColor;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormUserMasterUserName(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormUserMasterUserName,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_UserMaster_UserName,
function(Value)
{
this.Class.UserName = Value;
this.Class.onChange();
},
false
);
window['AscDFH'].CChangesOFormUserMasterUserName = CChangesOFormUserMasterUserName;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormUserMasterUserEmail(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormUserMasterUserEmail,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_UserMaster_UserEmail,
function(Value)
{
this.Class.UserEmail = Value;
this.Class.onChange();
},
false
);
window['AscDFH'].CChangesOFormUserMasterUserEmail = CChangesOFormUserMasterUserEmail;
})(window);

View File

@ -1,300 +0,0 @@
/*
* (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";
(function(window)
{
const PATH_USERS = "/users/";
const PATH_USER_MASTERS = "/userMasters/";
const PATH_FIELDS = "/fields/";
const PATH_FIELD_MASTERS = "/fieldMasters/";
/**
* Класс для работы с ссылками внутри xml структуры во время чтения
* @constructor
*/
function XmlReaderContext(pkg)
{
this.pkg = pkg;
this.pathToUser = {};
this.pathToUserMaster = {};
this.pathToField = {};
this.pathToFieldMaster = {};
}
XmlReaderContext.prototype.getOformContext = function()
{
return this;
};
XmlReaderContext.prototype.getUser = function(path)
{
let user = this.pathToUser[path];
if (user)
return user;
let reader = this.getXmlReader(path);
if (!reader)
return null;
user = AscOForm.CUser.fromXml(reader);
this.pathToUser[path] = user;
return user;
};
XmlReaderContext.prototype.getUserMaster = function(path)
{
let userMaster = this.pathToUserMaster[path];
if (userMaster)
return userMaster;
let reader = this.getXmlReader(path);
if (!reader)
return null;
userMaster = AscOForm.CUserMaster.fromXml(reader);
this.pathToUserMaster[path] = userMaster;
return userMaster;
};
XmlReaderContext.prototype.getField = function(path)
{
let field = this.pathToField[path];
if (field)
return field;
let reader = this.getXmlReader(path);
if (!reader)
return null;
return null;
// TODO: implement
// field = AscOForm.CField.fromXml(reader);
// this.pathToField[path] = field;
// return field;
};
XmlReaderContext.prototype.getFieldMaster = function(path)
{
let fieldMaster = this.pathToFieldMaster[path];
if (fieldMaster)
return fieldMaster;
let reader = this.getXmlReader(path);
if (!reader)
return null;
fieldMaster = AscOForm.CFieldMaster.fromXml(reader);
this.pathToFieldMaster[path] = fieldMaster;
return fieldMaster;
};
XmlReaderContext.prototype.getAllUsers = function()
{
return this.getAllByMapAndPath(this.pathToUser, PATH_USERS, AscOForm.CUser.fromXml);
};
XmlReaderContext.prototype.getAllUserMasters = function()
{
return this.getAllByMapAndPath(this.pathToUserMaster, PATH_USER_MASTERS, AscOForm.CUserMaster.fromXml);
};
XmlReaderContext.prototype.getAllFields = function()
{
// TODO: Implement
return [];
//return this.getAllByMapAndPath(this.pathToField, PATH_FIELDS, AscOForm.CField.fromXml);
};
XmlReaderContext.prototype.getAllFieldMasters = function()
{
return this.getAllByMapAndPath(this.pathToFieldMaster, PATH_FIELD_MASTERS, AscOForm.CFieldMaster.fromXml);
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Private area
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
XmlReaderContext.prototype.getXmlReader = function(path)
{
let part = this.pkg.getPartByUri(path);
if (!part)
return null;
let partContent = part.getDocumentContent();
if (!partContent)
return null;
let xmlParserContext = new AscCommon.XmlParserContext();
xmlParserContext.setOformContext(this);
return new AscCommon.StaxParser(partContent, part, xmlParserContext);
};
XmlReaderContext.prototype.getAllByMapAndPath = function(map, path, fromXml)
{
let result = [];
for (let key in map)
{
result.push(map[key]);
}
for (let uri in this.pkg.parts)
{
if (uri.startsWith(path)
&& uri.endsWith(".xml")
&& !map[uri])
{
let reader = this.getXmlReader(uri);
if (!reader)
return;
let element = fromXml(reader);
if (element)
{
map[uri] = element;
result.push(element);
}
}
}
return result;
}
//--------------------------------------------------------export----------------------------------------------------
AscOForm.XmlReaderContext = XmlReaderContext;
/**
* Класс для работы с ссылками внутри xml структуры во время записи
* @constructor
*/
function XmlWriterContext(pkg)
{
this.pkg = pkg;
this.userToPart = {};
this.userMasterToPart = {};
this.fieldToPart = {};
this.fieldMasterToPart = {};
this.partToRId = {};
}
XmlWriterContext.prototype.clearCurrentPartDataMaps = function()
{
this.partToRId = {};
};
XmlWriterContext.prototype.getRId = function(part)
{
if (this.partToRId[part.uri])
return this.partToRId[part.uri];
if (!this.part)
return "";
let target = part.uri;
let base = this.part.uri;
if (target.startsWith('/'))
target = target.substring(1);
if (base.startsWith('/'))
base = base.substring(1);
let baseSplit = base.split('/');
let targetSplit = target.split('/');
while (baseSplit.length && targetSplit.length && baseSplit[0] === targetSplit[0])
{
baseSplit.shift();
targetSplit.shift()
}
let relative = "";
for (let index = 0, count = baseSplit.length - 1; index < count; ++index)
{
relative += "../";
}
relative += targetSplit.join('/');
let rId = this.part.addRelationship(null, relative);
this.partToRId[part.uri] = rId;
return rId;
};
XmlWriterContext.prototype.getUserPart = function(user)
{
return this.getPartFromPkg(this.userToPart, user, AscCommon.openXml.Types.oformUser);
};
XmlWriterContext.prototype.haveUserPart = function(user)
{
return !!this.userToPart[user.GetId()];
};
XmlWriterContext.prototype.getUserMasterPart = function(userMaster)
{
return this.getPartFromPkg(this.userMasterToPart, userMaster, AscCommon.openXml.Types.oformUserMaster);
};
XmlWriterContext.prototype.getDefaultUserMasterPart = function(userMaster)
{
return this.getPartFromPkg(this.userMasterToPart, userMaster, AscCommon.openXml.Types.oformDefaultUserMaster);
};
XmlWriterContext.prototype.haveUserMasterPart = function(userMaster)
{
return !!this.userMasterToPart[userMaster.GetId()];
};
XmlWriterContext.prototype.getFieldPart = function(field)
{
return this.getPartFromPkg(this.fieldToPart, field, AscCommon.openXml.Types.oformField);
};
XmlWriterContext.prototype.haveFieldPart = function(field)
{
return !!this.fieldToPart[field.GetId()];
};
XmlWriterContext.prototype.getFieldMasterPart = function(fieldMaster)
{
return this.getPartFromPkg(this.fieldMasterToPart, fieldMaster, AscCommon.openXml.Types.oformFieldMaster);
};
XmlWriterContext.prototype.haveFieldMasterPart = function(fieldMaster)
{
return !!this.fieldMasterToPart[fieldMaster];
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Private area
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
XmlWriterContext.prototype.getPartFromPkg = function(map, object, contentType)
{
let objectId = object.GetId();
if (map[objectId])
return map[objectId];
let part = this.pkg.addPart(contentType).part;
let xmlWriter = new AscCommon.CMemory();
xmlWriter.context = this;
part.setDataXml(object, xmlWriter);
map[objectId] = part;
return part;
};
//--------------------------------------------------------export----------------------------------------------------
AscOForm.XmlWriterContext = XmlWriterContext;
})(window);

File diff suppressed because one or more lines are too long

View File

@ -1,43 +0,0 @@
/*
* (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
*
*/
/**
* Event: onSubmitForm
* @event Plugin#onSubmitForm
* @memberof Plugin
* @typeofeditors ["CDE", "CFE"]
* @alias onSubmitForm
* @description The function called when the user clicks the "Complete & Submit" button.
* @see office-js-api/Examples/Plugins/{Editor}/Plugin/Events/onSubmitForm.js
*/
"use strict";