mirror of
https://github.com/ONLYOFFICE/sdkjs-forms.git
synced 2026-03-31 10:23:35 +08:00
Compare commits
113 Commits
v7.4.0.173
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
| 3b5eaa7ad6 | |||
| 6a2030ef4a | |||
| a3e6482ff3 | |||
| c27936c5c8 | |||
| 7178e3065c | |||
| 3fb5b65794 | |||
| c9279dcdd8 | |||
| cd54c2bdff | |||
| e53ddb9003 | |||
| 29c2f86cb8 | |||
| d1f67dce0d | |||
| f2901a3dc7 | |||
| 4678111e19 | |||
| 4c31ee1427 | |||
| 1daac752fa | |||
| 22cbda0f3a | |||
| 8b80309475 | |||
| 72b33b253a | |||
| 7bbcacc622 | |||
| a0bfe66f9c | |||
| db6cd158d0 | |||
| 528997cc88 | |||
| 5e6a7c5867 | |||
| 8b8364fd48 | |||
| bdf97bf2f4 | |||
| 71dc14ae55 | |||
| 0cc7cdc5af | |||
| b8170a57d7 | |||
| 3fd132911e | |||
| 9274d360c0 | |||
| e204301e1a | |||
| 0d3b281cc3 | |||
| 4a5b824f72 | |||
| d43cb71066 | |||
| 667a804085 | |||
| 2d1cac6992 | |||
| 031e0bbbbf | |||
| 9bee906735 | |||
| bfe252fee3 | |||
| 70503bde4c | |||
| 9a88f0855a | |||
| ac12e3223c | |||
| cb5cb83eb2 | |||
| 00b3394113 | |||
| 930f507eaf | |||
| f31bb12081 | |||
| 26236c2b6e | |||
| 8e661ab8a9 | |||
| bee4c2702c | |||
| 9446505728 | |||
| d80cc23221 | |||
| a602d9aa36 | |||
| ea7e3c0f02 | |||
| 1da45dde0e | |||
| e1a98f8f4a | |||
| 4ac368daa0 | |||
| 58060100c9 | |||
| b8cbadfde6 | |||
| 4732938f0a | |||
| 7505fadefe | |||
| 439c9b3085 | |||
| f4d5a88be0 | |||
| c8bff88071 | |||
| 4c765147b0 | |||
| 110a52a0b9 | |||
| ec29fcbcbc | |||
| a60477955e | |||
| 097ac2ecbd | |||
| 46d2220494 | |||
| bb4bd422b3 | |||
| 26fd5ac0e1 | |||
| c74119b351 | |||
| 87e1f3d133 | |||
| c7f6274837 | |||
| 7281602fe3 | |||
| c85087988d | |||
| b7c3f2a81e | |||
| e92af5d616 | |||
| d762919e17 | |||
| 1e4faa1c44 | |||
| f1ab48dbf6 | |||
| df86438f34 | |||
| 0ce75cd435 | |||
| 28117047a2 | |||
| 21bc4c4a78 | |||
| d8149446fa | |||
| 4e3a6d5fd0 | |||
| ed08a8154d | |||
| b7159ab013 | |||
| fed8a12cc8 | |||
| e4b1254e7b | |||
| 24fbc65a0f | |||
| 847e9fdb73 | |||
| f5156538c1 | |||
| 456057e3ae | |||
| f28ed90880 | |||
| 4352c15da9 | |||
| 139f675db2 | |||
| d47f414c3d | |||
| aead383937 | |||
| 4ce68a3c8d | |||
| f1fa43375c | |||
| 253d708535 | |||
| d16707c294 | |||
| 14d902e747 | |||
| df76c99f38 | |||
| a84ee00ec4 | |||
| 2b53655564 | |||
| 1970ce1d9b | |||
| e2b34b409b | |||
| b0659c485d | |||
| 959046f872 | |||
| 8a0aa0fdb4 |
146
api.js
146
api.js
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2023
|
||||
* (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)
|
||||
@ -61,6 +61,7 @@ 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;
|
||||
@ -79,7 +80,7 @@ window["AscOForm"] = window.AscOForm = AscOForm;
|
||||
AscFonts.FontPickerByCharacter.getFontBySymbol(nUncheckedSymbol);
|
||||
}
|
||||
|
||||
function private_ApplyPrToCheckBox(oCC)
|
||||
function private_ApplyPrToCheckBox(oCC, checkBoxPr)
|
||||
{
|
||||
if (!oCC)
|
||||
return;
|
||||
@ -87,9 +88,13 @@ window["AscOForm"] = window.AscOForm = AscOForm;
|
||||
if (oFormPr)
|
||||
{
|
||||
private_ApplyFormPr(oCC, oFormPr, oLogicDocument);
|
||||
private_CheckFormKey(oCC, oLogicDocument);
|
||||
|
||||
if (oPr && oPr.GroupKey)
|
||||
private_CheckRadioButtonChoice(oCC, oLogicDocument, oPr.GroupKey);
|
||||
else
|
||||
private_CheckFormKey(oCC, oLogicDocument);
|
||||
}
|
||||
|
||||
|
||||
if (oCommonPr)
|
||||
oCC.SetContentControlPr(oCommonPr);
|
||||
}
|
||||
@ -117,13 +122,13 @@ window["AscOForm"] = window.AscOForm = AscOForm;
|
||||
CheckType : AscCommon.changestype_Paragraph_Content
|
||||
}))
|
||||
{
|
||||
oLogicDocument.StartAction(AscDFH.historydescription_Document_AddContentControlCheckBox);
|
||||
oLogicDocument.StartAction(AscDFH.historydescription_Document_AddContentControlCheckBox, undefined, undefined, true);
|
||||
oLogicDocument.RemoveSelection();
|
||||
|
||||
for (let nIndex = 0, nCount = arrSelectedParagraphs.length; nIndex < nCount; ++nIndex)
|
||||
{
|
||||
let oCC = arrSelectedParagraphs[nIndex].AddCheckBoxToStartPos(oPr);
|
||||
private_ApplyPrToCheckBox(oCC);
|
||||
private_ApplyPrToCheckBox(oCC, oPr);
|
||||
}
|
||||
|
||||
oLogicDocument.LoadDocumentState(oState);
|
||||
@ -141,10 +146,10 @@ window["AscOForm"] = window.AscOForm = AscOForm;
|
||||
oLogicDocument.RemoveTextSelection();
|
||||
if (!oLogicDocument.IsSelectionLocked(AscCommon.changestype_Paragraph_Content))
|
||||
{
|
||||
oLogicDocument.StartAction(AscDFH.historydescription_Document_AddContentControlCheckBox);
|
||||
oLogicDocument.StartAction(AscDFH.historydescription_Document_AddContentControlCheckBox, undefined, undefined, true);
|
||||
|
||||
var oCC = oLogicDocument.AddContentControlCheckBox(oPr);
|
||||
private_ApplyPrToCheckBox(oCC);
|
||||
private_ApplyPrToCheckBox(oCC, oPr);
|
||||
|
||||
oLogicDocument.UpdateInterface();
|
||||
oLogicDocument.Recalculate();
|
||||
@ -166,7 +171,7 @@ 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)
|
||||
window['Asc']['asc_docs_api'].prototype['asc_AddContentControlPicture'] = window['Asc']['asc_docs_api'].prototype.asc_AddContentControlPicture = function(oFormPr, oCommonPr, isSignature)
|
||||
{
|
||||
var oLogicDocument = this.private_GetLogicDocument();
|
||||
if (!oLogicDocument)
|
||||
@ -177,18 +182,44 @@ window["AscOForm"] = window.AscOForm = AscOForm;
|
||||
oLogicDocument.RemoveTextSelection();
|
||||
if (!oLogicDocument.IsSelectionLocked(AscCommon.changestype_Paragraph_Content))
|
||||
{
|
||||
oLogicDocument.StartAction(AscDFH.historydescription_Document_AddContentControlPicture);
|
||||
oLogicDocument.StartAction(AscDFH.historydescription_Document_AddContentControlPicture, undefined, undefined, true);
|
||||
|
||||
var oCC = oLogicDocument.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();
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
@ -240,6 +271,11 @@ window["AscOForm"] = window.AscOForm = AscOForm;
|
||||
oLogicDocument.Recalculate(true);
|
||||
oCC.UpdatePictureFormLayout();
|
||||
}
|
||||
else
|
||||
{
|
||||
oCC.ReplaceContentWithPlaceHolder();
|
||||
oCC.ApplyPicturePr(true, w, h);
|
||||
}
|
||||
}
|
||||
|
||||
if (oCC && oCommonPr)
|
||||
@ -258,6 +294,10 @@ 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();
|
||||
@ -287,6 +327,7 @@ window["AscOForm"] = window.AscOForm = AscOForm;
|
||||
if (oCC && oCommonPr)
|
||||
oCC.SetContentControlPr(oCommonPr);
|
||||
|
||||
oLogicDocument.AddMacroData(AscDFH.historydescription_Document_AddContentControlList, {isComboBox : isComboBox});
|
||||
oLogicDocument.Recalculate();
|
||||
oLogicDocument.UpdateInterface();
|
||||
oLogicDocument.UpdateSelection();
|
||||
@ -304,14 +345,14 @@ window["AscOForm"] = window.AscOForm = AscOForm;
|
||||
oLogicDocument.RemoveTextSelection();
|
||||
if (!oLogicDocument.IsSelectionLocked(AscCommon.changestype_Paragraph_Content))
|
||||
{
|
||||
oLogicDocument.StartAction(AscDFH.historydescription_Document_AddContentControlList);
|
||||
oLogicDocument.StartAction(AscDFH.historydescription_Document_AddContentControlDatePicker, undefined, undefined, true);
|
||||
|
||||
let dateTimePr = null;
|
||||
let formPr = null;
|
||||
let ccPr = null;
|
||||
|
||||
// Пока для совместимости со старым форматом оставляем, чтобы настройки могли приходить по старому (oPr, oCommonPr)
|
||||
// но в будущем надо перейти на новый вариант contentPr (AscCommon.CContentControlPr)
|
||||
// For now, keeping compatibility with the old format so settings can come in the old way (oPr, oCommonPr)
|
||||
// but in the future we need to switch to the new contentPr variant (AscCommon.CContentControlPr)
|
||||
if (oPr && (oPr instanceof AscCommon.CContentControlPr))
|
||||
{
|
||||
dateTimePr = oPr.DateTimePr;
|
||||
@ -424,8 +465,10 @@ window["AscOForm"] = window.AscOForm = AscOForm;
|
||||
return null;
|
||||
|
||||
let mainForm = form.GetMainForm();
|
||||
if (!mainForm || !mainForm.IsComplexForm() || mainForm.IsLabeledCheckBox())
|
||||
return null;
|
||||
|
||||
return (mainForm.IsComplexForm() ? mainForm : null);
|
||||
return mainForm;
|
||||
};
|
||||
window['Asc']['asc_docs_api'].prototype['asc_ConvertFormToJson'] = window['Asc']['asc_docs_api'].prototype.asc_ConvertFormToJson = function(form)
|
||||
{
|
||||
@ -451,7 +494,17 @@ window["AscOForm"] = window.AscOForm = AscOForm;
|
||||
if (!form || !form.IsForm())
|
||||
return;
|
||||
|
||||
return this.private_SetFormValue(form.GetId(), value);
|
||||
if (typeof(value) === "string")
|
||||
{
|
||||
let _t = this;
|
||||
AscFonts.FontPickerByCharacter.checkText(value, this, function() {
|
||||
_t.private_SetFormValue(form.GetId(), value);
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
this.private_SetFormValue(form.GetId(), value);
|
||||
}
|
||||
};
|
||||
window['Asc']['asc_docs_api'].prototype['asc_GetFormValue'] = window['Asc']['asc_docs_api'].prototype.asc_GetFormValue = function(formId)
|
||||
{
|
||||
@ -488,8 +541,8 @@ window["AscOForm"] = window.AscOForm = AscOForm;
|
||||
|| !oForm.IsForm())
|
||||
return;
|
||||
|
||||
// При проверке лока внутри параграфа мы ориентируемся на выделение внутри этого параграфа
|
||||
// поэтому нужно выделить форму
|
||||
// When checking lock inside a paragraph, we rely on the selection within that paragraph
|
||||
// so we need to select the form
|
||||
let state = oLogicDocument.SaveDocumentState();
|
||||
oForm.SelectContentControl();
|
||||
|
||||
@ -581,7 +634,7 @@ window["AscOForm"] = window.AscOForm = AscOForm;
|
||||
else
|
||||
oForm.SetInnerText(sValue);
|
||||
|
||||
// TODO: Надо FullDate попытаться выставить по заданному значение. Сейчас мы всегда сбрасываем на текущую дату
|
||||
// TODO: Need to try setting FullDate to the given value. Currently we always reset to the current date
|
||||
let datePickerPr = oForm.GetDatePickerPr().Copy();
|
||||
datePickerPr.SetFullDate(null);
|
||||
oForm.SetDatePickerPr(datePickerPr);
|
||||
@ -617,6 +670,28 @@ 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();
|
||||
|
||||
form.SetFormRequired(formManager.IsRadioGroupRequired(groupKey));
|
||||
|
||||
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)
|
||||
@ -624,6 +699,9 @@ window["AscOForm"] = window.AscOForm = AscOForm;
|
||||
|
||||
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()
|
||||
@ -652,29 +730,7 @@ window["AscOForm"] = window.AscOForm = AscOForm;
|
||||
logicDocument.Recalculate(true);
|
||||
let drawing = form.ConvertFormToFixed();
|
||||
if (drawing)
|
||||
{
|
||||
logicDocument.Recalculate(true);
|
||||
let x = drawing.Internal_Position.Calculate_X_Value(Asc.c_oAscRelativeFromH.Page);
|
||||
let y = drawing.Internal_Position.Calculate_Y_Value(Asc.c_oAscRelativeFromV.Page);
|
||||
|
||||
let drawingPr = new Asc.asc_CImgProperty();
|
||||
drawingPr.asc_putWrappingStyle(Asc.c_oAscWrapStyle2.Square);
|
||||
|
||||
let positionH = new Asc.CImagePositionH();
|
||||
drawingPr.asc_putPositionH(positionH);
|
||||
positionH.put_UseAlign(false);
|
||||
positionH.put_RelativeFrom(Asc.c_oAscRelativeFromH.Page);
|
||||
positionH.put_Value(x);
|
||||
|
||||
let positionV = new Asc.CImagePositionV();
|
||||
drawingPr.asc_putPositionV(positionV);
|
||||
positionV.put_UseAlign(false);
|
||||
positionV.put_RelativeFrom(Asc.c_oAscRelativeFromV.Page);
|
||||
positionV.put_Value(y);
|
||||
|
||||
drawing.Set_Props(drawingPr);
|
||||
drawing.SelectAsDrawing();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -682,6 +738,10 @@ window["AscOForm"] = window.AscOForm = AscOForm;
|
||||
{
|
||||
let form = logicDocument.GetContentControl();
|
||||
|
||||
let mainForm = form ? form.GetMainForm() : null;
|
||||
if (mainForm && mainForm.IsLabeledCheckBox())
|
||||
return mainForm.MoveCursorOutsideForm(false);
|
||||
|
||||
if (!form || !form.IsForm() || (form.IsComplexForm() && !isComplex))
|
||||
return;
|
||||
|
||||
|
||||
760
apiBuilder.js
760
apiBuilder.js
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2023
|
||||
* (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)
|
||||
@ -38,11 +38,13 @@
|
||||
// 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 ApiDocument = AscBuilder.ApiDocument;
|
||||
const GetStringParameter = AscBuilder.GetStringParameter;
|
||||
const GetBoolParameter = AscBuilder.GetBoolParameter;
|
||||
const GetNumberParameter = AscBuilder.GetNumberParameter;
|
||||
const GetArrayParameter = AscBuilder.GetArrayParameter;
|
||||
const executeNoFormLockCheck = AscBuilder.executeNoFormLockCheck;
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
@ -51,15 +53,18 @@
|
||||
* @class
|
||||
* @name Api
|
||||
*/
|
||||
var Api = window["Asc"]["asc_docs_api"] || window["Asc"]["spreadsheet_api"];
|
||||
var Api = AscBuilder.Word.Api;
|
||||
|
||||
/**
|
||||
* Common form properties.
|
||||
* @typedef {Object} FormPrBase
|
||||
* @property {string} key - Form key.
|
||||
* @property {string} tip - Form tip text.
|
||||
* @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 {boolean} required - Specifies if the form is required or not.
|
||||
* @property {string} placeholder - Form placeholder text.
|
||||
* @property {string} placeholder - The form placeholder text.
|
||||
* @see office-js-api/Examples/Enumerations/FormPrBase.js
|
||||
*/
|
||||
|
||||
/**
|
||||
@ -70,11 +75,13 @@
|
||||
* @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
|
||||
*/
|
||||
|
||||
/**
|
||||
* Text field properties.
|
||||
* @typedef {FormPrBase | TextFormPrBase} TextFormPr
|
||||
* @see office-js-api/Examples/Enumerations/TextFormPr.js
|
||||
*/
|
||||
|
||||
/**
|
||||
@ -82,11 +89,13 @@
|
||||
* @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
|
||||
*/
|
||||
|
||||
|
||||
@ -94,11 +103,13 @@
|
||||
* Specific checkbox / radio button 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.
|
||||
* @typedef {FormPrBase | CheckBoxFormPrBase} CheckBoxFormPr
|
||||
* @see office-js-api/Examples/Enumerations/CheckBoxFormPr.js
|
||||
*/
|
||||
|
||||
/**
|
||||
@ -111,21 +122,25 @@
|
||||
* 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.
|
||||
* @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
|
||||
*/
|
||||
|
||||
/**
|
||||
@ -135,251 +150,552 @@
|
||||
* @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.
|
||||
* <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
|
||||
*/
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* @memberof Api
|
||||
* @param {TextFormPr} oFormPr - Text field properties.
|
||||
* @typeofeditors ["CDE", "CFE"]
|
||||
* @param {TextFormPr} formPr - Text field properties.
|
||||
* @returns {ApiTextForm}
|
||||
* @see office-js-api/Examples/Forms/Api/Methods/CreateTextForm.js
|
||||
*/
|
||||
Api.prototype.CreateTextForm = function(oFormPr)
|
||||
Api.CreateTextForm = function(formPr)
|
||||
{
|
||||
if (!oFormPr)
|
||||
oFormPr = {};
|
||||
|
||||
let form = CreateCommonForm(oFormPr);
|
||||
ApplyTextFormPr(form, oFormPr);
|
||||
CheckFormKey(form);
|
||||
return new AscBuilder.ApiTextForm(form);
|
||||
return executeNoFormLockCheck(function()
|
||||
{
|
||||
if (!formPr)
|
||||
formPr = {};
|
||||
|
||||
let form = CreateCommonForm(formPr);
|
||||
ApplyTextFormPr(form, formPr);
|
||||
CheckForm(form);
|
||||
return new AscBuilder.ApiTextForm(form);
|
||||
}, this);
|
||||
};
|
||||
/**
|
||||
* Creates a checkbox / radio button with the specified checkbox / radio button properties.
|
||||
* @memberof Api
|
||||
* @param {CheckBoxFormPr} oFormPr - Checkbox / radio button properties.
|
||||
* @typeofeditors ["CDE", "CFE"]
|
||||
* @param {CheckBoxFormPr} formPr - Checkbox / radio button properties.
|
||||
* @returns {ApiCheckBoxForm}
|
||||
* @see office-js-api/Examples/Forms/Api/Methods/CreateCheckBoxForm.js
|
||||
*/
|
||||
Api.prototype.CreateCheckBoxForm = function(oFormPr)
|
||||
Api.CreateCheckBoxForm = function(formPr)
|
||||
{
|
||||
if (!oFormPr)
|
||||
oFormPr = {};
|
||||
|
||||
oFormPr["placeholder"] = undefined;
|
||||
|
||||
var oCC;
|
||||
var oCheckboxPr = new AscCommon.CSdtCheckBoxPr();
|
||||
if (GetBoolParameter(oFormPr["radio"], false))
|
||||
return executeNoFormLockCheck(function()
|
||||
{
|
||||
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);
|
||||
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);
|
||||
};
|
||||
/**
|
||||
* Creates a combo box / dropdown list with the specified combo box / dropdown list properties.
|
||||
* @memberof Api
|
||||
* @param {ComboBoxFormPr} oFormPr - Combo box / dropdown list properties.
|
||||
* @typeofeditors ["CDE", "CFE"]
|
||||
* @param {ComboBoxFormPr} formPr - Combo box / dropdown list properties.
|
||||
* @returns {ApiComboBoxForm}
|
||||
* @see office-js-api/Examples/Forms/Api/Methods/CreateComboBoxForm.js
|
||||
*/
|
||||
Api.prototype.CreateComboBoxForm = function(oFormPr)
|
||||
Api.CreateComboBoxForm = function(formPr)
|
||||
{
|
||||
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)
|
||||
return executeNoFormLockCheck(function()
|
||||
{
|
||||
let oItem = arrList[nIndex];
|
||||
|
||||
if (GetStringParameter(oItem, null))
|
||||
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)
|
||||
{
|
||||
oPr.AddItem(oItem, oItem);
|
||||
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);
|
||||
}
|
||||
}
|
||||
else if (GetArrayParameter(oItem, null))
|
||||
oPr.SetAutoFit(GetBoolParameter(formPr["autoFit"], false));
|
||||
|
||||
if (!GetBoolParameter(formPr["editable"], false))
|
||||
{
|
||||
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);
|
||||
if (sPlaceholder)
|
||||
{
|
||||
oCC.ApplyDropDownListPr(oPr);
|
||||
}
|
||||
else
|
||||
{
|
||||
oCC.SetDropDownListPr(oPr);
|
||||
oCC.SelectListItem();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
oCC.SetDropDownListPr(oPr);
|
||||
oCC.SelectListItem();
|
||||
if (sPlaceholder)
|
||||
{
|
||||
oCC.ApplyComboBoxPr(oPr);
|
||||
}
|
||||
else
|
||||
{
|
||||
oCC.SetComboBoxPr(oPr);
|
||||
oCC.SelectListItem();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sPlaceholder)
|
||||
{
|
||||
oCC.ApplyComboBoxPr(oPr);
|
||||
}
|
||||
else
|
||||
{
|
||||
oCC.SetComboBoxPr(oPr);
|
||||
oCC.SelectListItem();
|
||||
}
|
||||
}
|
||||
|
||||
CheckFormKey(oCC);
|
||||
return new AscBuilder.ApiComboBoxForm(oCC);
|
||||
|
||||
CheckForm(oCC);
|
||||
return new AscBuilder.ApiComboBoxForm(oCC);
|
||||
}, this);
|
||||
};
|
||||
/**
|
||||
* Creates a picture form with the specified picture form properties.
|
||||
* @memberof Api
|
||||
* @param {PictureFormPr} oFormPr - Picture form properties.
|
||||
* @typeofeditors ["CDE", "CFE"]
|
||||
* @param {PictureFormPr} formPr - Picture form properties.
|
||||
* @returns {ApiPictureForm}
|
||||
* @see office-js-api/Examples/Forms/Api/Methods/CreatePictureForm.js
|
||||
*/
|
||||
Api.prototype.CreatePictureForm = function(oFormPr)
|
||||
Api.CreatePictureForm = function(formPr)
|
||||
{
|
||||
if (!oFormPr)
|
||||
oFormPr = {};
|
||||
|
||||
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)
|
||||
return executeNoFormLockCheck(function()
|
||||
{
|
||||
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;
|
||||
}
|
||||
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.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.CreateComplexForm = function(formPr)
|
||||
{
|
||||
return executeNoFormLockCheck(function()
|
||||
{
|
||||
if (!formPr)
|
||||
formPr = {};
|
||||
|
||||
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);
|
||||
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
|
||||
* @param {TextFormInsertPr} oFormPr - Properties for inserting a text field.
|
||||
* @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(oFormPr)
|
||||
ApiDocument.prototype.InsertTextForm = function(formPr)
|
||||
{
|
||||
if (!oFormPr)
|
||||
oFormPr = {};
|
||||
return executeNoFormLockCheck(function()
|
||||
{
|
||||
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 logicDocument = this.Document;
|
||||
let placeholder = GetStringParameter(oFormPr["placeholder"], undefined);
|
||||
if (GetBoolParameter(oFormPr["placeholderFromSelection"], false))
|
||||
placeholder = logicDocument.GetSelectedText();
|
||||
let rgba = ParseRoleColor(props && props["color"] ? props["color"] : null);
|
||||
|
||||
if (!GetBoolParameter(oFormPr["keepSelectedTextInForm"], true))
|
||||
logicDocument.RemoveBeforePaste();
|
||||
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;
|
||||
|
||||
let contentControl = logicDocument.AddContentControl(c_oAscSdtLevelType.Inline);
|
||||
if (!contentControl)
|
||||
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());
|
||||
}
|
||||
return result;
|
||||
};
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
ApiFormRoles.prototype.HaveRole = function(name)
|
||||
{
|
||||
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;
|
||||
|
||||
ApplyCommonFormPr(contentControl, oFormPr);
|
||||
SetFormPlaceholder(contentControl, placeholder);
|
||||
ApplyTextFormPr(contentControl, oFormPr, true);
|
||||
CheckFormKey(contentControl);
|
||||
return new AscBuilder.ApiTextForm(contentControl);
|
||||
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);
|
||||
};
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Private area
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
function CreateCommonForm(oFormPr)
|
||||
function CreateCommonForm(formPr)
|
||||
{
|
||||
let contentControl = new AscCommonWord.CInlineLevelSdt();
|
||||
|
||||
ApplyCommonFormPr(contentControl, oFormPr);
|
||||
ApplyCommonFormPr(contentControl, formPr);
|
||||
|
||||
let placeholder = oFormPr ? GetStringParameter(oFormPr["placeholder"], undefined) : undefined;
|
||||
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;
|
||||
@ -400,6 +716,7 @@
|
||||
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)
|
||||
@ -412,6 +729,29 @@
|
||||
textFormPr.SetWidth((GetNumberParameter(formPr["cellWidth"], 0) * 72 * 20 / 25.4) | 0);
|
||||
form.ApplyTextFormPr(textFormPr, keepContent);
|
||||
}
|
||||
function ApplyDateFormPr(form, formPr)
|
||||
{
|
||||
let datePickerPr = new AscCommon.CSdtDatePickerPr();
|
||||
|
||||
var nLcid = Asc.g_oLcidNameToIdMap[formPr["lang"]];
|
||||
if (undefined == nLcid)
|
||||
nLcid = 1033;
|
||||
|
||||
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);
|
||||
}
|
||||
function CheckFormKey(form)
|
||||
{
|
||||
let logicDocument = editor && editor.WordControl && editor.WordControl.m_oLogicDocument;
|
||||
@ -433,14 +773,52 @@
|
||||
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["CreateCheckBoxForm"] = Api.prototype.CreateCheckBoxForm;
|
||||
Api.prototype["CreateComboBoxForm"] = Api.prototype.CreateComboBoxForm;
|
||||
Api["CreateTextForm"] = Api.CreateTextForm;
|
||||
Api["CreatePictureForm"] = Api.CreatePictureForm;
|
||||
Api["CreateDateForm"] = Api.CreateDateForm;
|
||||
Api["CreateCheckBoxForm"] = Api.CreateCheckBoxForm;
|
||||
Api["CreateComboBoxForm"] = Api.CreateComboBoxForm;
|
||||
Api["CreateComplexForm"] = Api.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;
|
||||
|
||||
}(window, null));
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2023
|
||||
* (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)
|
||||
@ -34,6 +34,8 @@
|
||||
|
||||
(function(window)
|
||||
{
|
||||
let Api = window["asc_docs_api"];
|
||||
|
||||
/**
|
||||
* @typedef {Object} ContentControl
|
||||
* Content control object.
|
||||
@ -41,16 +43,18 @@
|
||||
* @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
|
||||
*/
|
||||
* **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.
|
||||
@ -58,10 +62,9 @@
|
||||
* @typeofeditors ["CDE"]
|
||||
* @alias GetAllForms
|
||||
* @returns {ContentControl[]} - An array with all the forms from the document.
|
||||
* @example
|
||||
* window.Asc.plugin.executeMethod("GetAllForms");
|
||||
* @see office-js-api/Examples/Plugins/Forms/Api/Methods/GetAllForms.js
|
||||
*/
|
||||
window["asc_docs_api"].prototype["pluginMethod_GetAllForms"] = function()
|
||||
Api.prototype["pluginMethod_GetAllForms"] = function()
|
||||
{
|
||||
let oFormsManager = this.private_GetFormsManager();
|
||||
if (!oFormsManager)
|
||||
@ -82,10 +85,9 @@
|
||||
* @alias GetFormsByTag
|
||||
* @param {string} tag - The form tag.
|
||||
* @returns {ContentControl[]} - An array with all the forms from the document with the specified tag.
|
||||
* @example
|
||||
* window.Asc.plugin.executeMethod("GetFormsByTag");
|
||||
* @see office-js-api/Examples/Plugins/Forms/Api/Methods/GetFormsByTag.js
|
||||
*/
|
||||
window["asc_docs_api"].prototype["pluginMethod_GetFormsByTag"] = function(tag)
|
||||
Api.prototype["pluginMethod_GetFormsByTag"] = function(tag)
|
||||
{
|
||||
let oFormsManager = this.private_GetFormsManager();
|
||||
if (!oFormsManager)
|
||||
@ -109,10 +111,9 @@
|
||||
* @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.
|
||||
* @example
|
||||
* window.Asc.plugin.executeMethod("SetFormValue");
|
||||
* @see office-js-api/Examples/Plugins/Forms/Api/Methods/SetFormValue.js
|
||||
*/
|
||||
window["asc_docs_api"].prototype["pluginMethod_SetFormValue"] = function(internalId, value)
|
||||
Api.prototype["pluginMethod_SetFormValue"] = function(internalId, value)
|
||||
{
|
||||
this.private_SetFormValue(internalId, value);
|
||||
};
|
||||
@ -123,11 +124,9 @@
|
||||
* @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.
|
||||
* @example
|
||||
* window.Asc.plugin.executeMethod("GetFormValue");
|
||||
*
|
||||
* @see office-js-api/Examples/Plugins/Forms/Api/Methods/GetFormValue.js
|
||||
*/
|
||||
window["asc_docs_api"].prototype["pluginMethod_GetFormValue"] = function(internalId)
|
||||
Api.prototype["pluginMethod_GetFormValue"] = function(internalId)
|
||||
{
|
||||
if (!AscCommon.g_oTableId)
|
||||
return "";
|
||||
@ -169,5 +168,29 @@
|
||||
|
||||
return "";
|
||||
};
|
||||
/**
|
||||
* Checks whether the specified form has been digitally signed.
|
||||
* @memberof Api
|
||||
* @typeofeditors ["CDE"]
|
||||
* @alias IsFormSigned
|
||||
* @returns {boolean} Returns true if the form is signed, false otherwise.
|
||||
* @since 9.3.0
|
||||
* @see office-js-api/Examples/Plugins/Forms/Api/Methods/IsFormSigned.js
|
||||
*/
|
||||
Api.prototype["pluginMethod_IsFormSigned"] = function()
|
||||
{
|
||||
let signatures = this.signatures;
|
||||
if (!signatures || !Array.isArray(signatures))
|
||||
return false;
|
||||
|
||||
for (let i = 0; i < signatures.length; ++i)
|
||||
{
|
||||
if (signatures[i].isForm)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
})(window);
|
||||
|
||||
|
||||
174
oform/OForm.js
174
oform/OForm.js
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2023
|
||||
* (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)
|
||||
@ -35,7 +35,7 @@
|
||||
(function(window)
|
||||
{
|
||||
/**
|
||||
* Основной класс для работы с форматом oform
|
||||
* Main class for working with the oform format
|
||||
* @param document {AscWord.CDocument}
|
||||
* @constructor
|
||||
*/
|
||||
@ -45,7 +45,7 @@
|
||||
this.Document = document;
|
||||
this.CurrentUser = null;
|
||||
|
||||
// Сейчас у нас роль - это ровно один userMaster и ровно одна группа полей
|
||||
// Currently, a role is exactly one userMaster and exactly one field group
|
||||
this.Roles = [];
|
||||
this.NeedUpdateRoles = true;
|
||||
this.NeedRedraw = true;
|
||||
@ -78,7 +78,7 @@
|
||||
writer.context = xmlPkg.getContext();
|
||||
this.Format.toPkg(xmlPkg, opt_fieldMastersPartMap);
|
||||
|
||||
// Наш XmlPackage работает в общей папке, а нам нужно запихнуть в zip подпапку oform
|
||||
// Our XmlPackage works in the shared folder, but we need to put the oform subfolder into zip
|
||||
zip.getPaths().forEach(function(path)
|
||||
{
|
||||
let fileData = zip.getFile(path);
|
||||
@ -96,10 +96,22 @@
|
||||
|
||||
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;
|
||||
@ -163,10 +175,9 @@
|
||||
|
||||
let fields = fieldGroup.getAllFields();
|
||||
|
||||
|
||||
let delegateIndex = this.getRoleIndex(delegateName);
|
||||
|
||||
// На самом деле можно убрать эту проверку, но тогда мы просто удалим группу по умолчнию и заново её добавим
|
||||
// Actually, we can remove this check, but then we would just delete the default group and add it again
|
||||
if (this.Roles.length <= 1
|
||||
&& this.Roles[roleIndex].getUserMaster() === this.Format.getDefaultUserMaster()
|
||||
&& -1 === delegateIndex)
|
||||
@ -176,14 +187,14 @@
|
||||
{
|
||||
if (!this.startAction(AscDFH.historydescription_OForm_RemoveRole))
|
||||
return false;
|
||||
|
||||
|
||||
defaultUserMaster.initDefaultUser();
|
||||
|
||||
|
||||
this.NeedRedraw = true;
|
||||
this.endAction();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -231,6 +242,38 @@
|
||||
|
||||
delegateFieldGroup.addUser(delegateUserMaster);
|
||||
this.Format.addFieldGroup(delegateFieldGroup);
|
||||
|
||||
if (!this.getDefaultRole() && delegateUserMaster)
|
||||
this.Format.setDefaultUser(delegateUserMaster);
|
||||
}
|
||||
|
||||
if (!this.getDefaultRole())
|
||||
{
|
||||
let delegateUserMaster;
|
||||
if (-1 === delegateIndex || delegateIndex === roleIndex)
|
||||
{
|
||||
this.updateRoles();
|
||||
if (this.Roles.length <= 0)
|
||||
{
|
||||
let defaultGroup = new AscOForm.CFieldGroup();
|
||||
defaultGroup.setWeight(this.Format.getMaxWeight() + 1);
|
||||
this.Format.addFieldGroup(defaultGroup);
|
||||
defaultGroup.addUser(this.Format.getDefaultUserMaster());
|
||||
delegateUserMaster = this.Format.getDefaultUserMaster();
|
||||
delegateUserMaster.initDefaultUser();
|
||||
}
|
||||
else
|
||||
{
|
||||
delegateUserMaster = this.Roles[0].getUserMaster();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
delegateUserMaster = this.Roles[delegateIndex].getUserMaster();
|
||||
}
|
||||
|
||||
if (delegateUserMaster)
|
||||
this.Format.setDefaultUser(delegateUserMaster);
|
||||
}
|
||||
|
||||
this.NeedRedraw = true;
|
||||
@ -444,6 +487,21 @@
|
||||
{
|
||||
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;
|
||||
@ -470,7 +528,7 @@
|
||||
let user = fieldGroup.getFirstUser();
|
||||
if (!user)
|
||||
{
|
||||
// TODO: Разобраться с такими группами
|
||||
// TODO: Handle such groups
|
||||
}
|
||||
|
||||
let haveRole = false;
|
||||
@ -485,7 +543,7 @@
|
||||
|
||||
if (haveRole)
|
||||
{
|
||||
// TODO: Разобраться с такими ситуациями
|
||||
// TODO: Handle such situations
|
||||
}
|
||||
|
||||
let weight = fieldGroup.getWeight();
|
||||
@ -511,7 +569,7 @@
|
||||
};
|
||||
OForm.prototype.correctFieldGroups = function()
|
||||
{
|
||||
// Проверяем есть ли хоть одна группа с заданной ролью (где указан userMaster)
|
||||
// Check if there is at least one group with a specified role (where userMaster is set)
|
||||
for (let fgIndex = 0, fgCount = this.Format.getFieldGroupsCount(); fgIndex < fgCount; ++fgIndex)
|
||||
{
|
||||
let fieldGroup = this.Format.getFieldGroup(fgIndex);
|
||||
@ -522,7 +580,7 @@
|
||||
return;
|
||||
}
|
||||
|
||||
// Нельзя, чтобы групп не было вообще
|
||||
// There must be at least one group
|
||||
let defaultGroup = new AscOForm.CFieldGroup();
|
||||
defaultGroup.setWeight(this.Format.getMaxWeight() + 1);
|
||||
this.Format.addFieldGroup(defaultGroup);
|
||||
@ -561,6 +619,84 @@
|
||||
{
|
||||
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;
|
||||
};
|
||||
OForm.prototype.isFinal = function()
|
||||
{
|
||||
return this.Format.isFinal();
|
||||
};
|
||||
OForm.prototype.setFinal = function(isFinal)
|
||||
{
|
||||
return this.Format.setFinal(isFinal);
|
||||
};
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Private area
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -582,11 +718,18 @@
|
||||
if (!logicDocument)
|
||||
return;
|
||||
|
||||
this.onEndAction();
|
||||
|
||||
logicDocument.UpdateInterface();
|
||||
logicDocument.FinalizeAction();
|
||||
};
|
||||
OForm.prototype.sendEvent = function()
|
||||
{
|
||||
let logicDocument = this.getDocument();
|
||||
let api;
|
||||
if (!logicDocument || !(api = logicDocument.GetApi()))
|
||||
return;
|
||||
|
||||
api.sendEvent.apply(api, arguments);
|
||||
};
|
||||
//--------------------------------------------------------export----------------------------------------------------
|
||||
AscOForm.OForm = OForm;
|
||||
//---------------------------------------------interface export-----------------------------------------------------
|
||||
@ -598,5 +741,6 @@
|
||||
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);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2023
|
||||
* (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)
|
||||
@ -35,8 +35,8 @@
|
||||
(function(window)
|
||||
{
|
||||
/**
|
||||
* Класс представляющий роль при заполнении формы. В данный момент роль - это ровно один userMaster
|
||||
* и группа полей связанные с данным userMaster
|
||||
* Class representing a role when filling out a form. Currently, a role is exactly one userMaster
|
||||
* and a field group associated with this userMaster
|
||||
* @param fieldGroup
|
||||
* @param userMaster
|
||||
* @constructor
|
||||
@ -78,13 +78,36 @@
|
||||
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;
|
||||
};
|
||||
|
||||
/**
|
||||
* Класс для задания настроек роли из интерфейса
|
||||
* Class for setting role configuration from the interface
|
||||
* @constructor
|
||||
*/
|
||||
function CRoleSettings()
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2023
|
||||
* (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)
|
||||
@ -37,7 +37,7 @@
|
||||
|
||||
|
||||
/**
|
||||
* Базовый класс для всех форматных классов в oform
|
||||
* Base class for all format classes in oform
|
||||
* @constructor
|
||||
*/
|
||||
function CBaseFormatObject()
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2023
|
||||
* (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)
|
||||
@ -35,7 +35,7 @@
|
||||
(function(window)
|
||||
{
|
||||
/**
|
||||
* Основной класс для работы с форматом oform
|
||||
* Main class for working with the oform format
|
||||
* @param oform {AscOForm.OForm}
|
||||
* @constructor
|
||||
* @extends AscOForm.CBaseFormatObject
|
||||
@ -50,16 +50,17 @@
|
||||
this.DefaultUser.initDefaultUser();
|
||||
this.DefaultUser.setParent(this);
|
||||
|
||||
// Форматная часть
|
||||
// Format properties
|
||||
this.Author = null;
|
||||
this.Date = null;
|
||||
this.Description = null;
|
||||
this.Type = null;
|
||||
this.Application = null;
|
||||
this.DocumentId = null;
|
||||
this.Final = false;
|
||||
this.FieldGroups = [];
|
||||
|
||||
// Массивы всех имеющихся пользователей и полей
|
||||
// Arrays of all existing users and fields
|
||||
this.Users = [];
|
||||
this.UserMasters = [];
|
||||
this.FieldMasters = [];
|
||||
@ -153,6 +154,19 @@
|
||||
{
|
||||
return this.DocumentId;
|
||||
};
|
||||
CDocument.prototype.setFinal = function(isFinal)
|
||||
{
|
||||
if (this.Final === isFinal)
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentFinal(this, this.Final, isFinal));
|
||||
this.Final = isFinal;
|
||||
this.onChangeFinal();
|
||||
};
|
||||
CDocument.prototype.isFinal = function()
|
||||
{
|
||||
return this.Final;
|
||||
};
|
||||
CDocument.prototype.addFieldGroup = function(fieldGroup)
|
||||
{
|
||||
if (-1 !== this.FieldGroups.indexOf(fieldGroup))
|
||||
@ -303,6 +317,9 @@
|
||||
case "description":
|
||||
this.setDescription(reader.GetTextDecodeXml());
|
||||
break;
|
||||
case "final":
|
||||
this.setFinal(reader.GetTextBool());
|
||||
break
|
||||
case "type":
|
||||
this.setType(reader.GetTextDecodeXml());
|
||||
break;
|
||||
@ -357,6 +374,9 @@
|
||||
if (application)
|
||||
writer.WriteXmlNodeWithText("application", application);
|
||||
|
||||
if (this.isFinal())
|
||||
writer.WriteXmlNodeWithText("final", "1");
|
||||
|
||||
let documentId = this.getDocumentId();
|
||||
if (documentId)
|
||||
writer.WriteXmlNodeWithText("id", documentId);
|
||||
@ -568,6 +588,13 @@
|
||||
|
||||
this.OForm.onChangeRoles();
|
||||
};
|
||||
CDocument.prototype.onChangeFieldGroupFilled = function(fieldGroup)
|
||||
{
|
||||
if (!this.OForm)
|
||||
return;
|
||||
|
||||
this.OForm.onChangeFieldGroupFilled(fieldGroup);
|
||||
};
|
||||
CDocument.prototype.onChangeUserMaster = function(userMaster)
|
||||
{
|
||||
if (!this.OForm)
|
||||
@ -590,8 +617,8 @@
|
||||
let fieldMaster = form.GetFieldMaster();
|
||||
if (!fieldMaster)
|
||||
{
|
||||
// TODO: Мы не можем здесь генерировать id, т.к. данная функция вызывается на открытии
|
||||
// и тогда у разных клиентов будут разные id. Поэтому, пока лучше вообще такие поля будут без id
|
||||
// TODO: We cannot generate id here because this function is called on document open
|
||||
// and then different clients would have different ids. So for now, it's better to leave such fields without id
|
||||
fieldMaster = new AscOForm.CFieldMaster(false);
|
||||
this.addFieldMaster(fieldMaster);
|
||||
fieldMaster.addUser(this.getDefaultUserMaster());
|
||||
@ -618,6 +645,13 @@
|
||||
this.removeFieldMasterByIndex(fieldIndex);
|
||||
}
|
||||
};
|
||||
CDocument.prototype.onChangeFinal = function()
|
||||
{
|
||||
if (!this.OForm)
|
||||
return;
|
||||
|
||||
this.OForm.sendEvent("asc_onOFormChangeFinal", this.isFinal());
|
||||
};
|
||||
|
||||
//--------------------------------------------------------export----------------------------------------------------
|
||||
AscOForm.CDocument = CDocument;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2023
|
||||
* (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)
|
||||
@ -42,6 +42,8 @@
|
||||
{
|
||||
AscOForm.CBaseFormatObject.call(this);
|
||||
|
||||
this.Filled = false;
|
||||
this.Date = undefined;
|
||||
this.Weight = null;
|
||||
this.Fields = [];
|
||||
this.Users = [];
|
||||
@ -57,6 +59,19 @@
|
||||
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)
|
||||
@ -70,6 +85,18 @@
|
||||
{
|
||||
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))
|
||||
@ -149,6 +176,13 @@
|
||||
|
||||
this.Parent.onChangeFieldGroup(this);
|
||||
};
|
||||
CFieldGroup.prototype.onChangeFilled = function()
|
||||
{
|
||||
if (!this.Parent)
|
||||
return;
|
||||
|
||||
this.Parent.onChangeFieldGroupFilled(this);
|
||||
};
|
||||
CFieldGroup.prototype.getAllFields = function()
|
||||
{
|
||||
let fields = [];
|
||||
@ -207,6 +241,15 @@
|
||||
|
||||
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)
|
||||
@ -239,8 +282,17 @@
|
||||
|
||||
while (reader.MoveToNextAttribute())
|
||||
{
|
||||
if ("weight" === reader.GetNameNoNS())
|
||||
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();
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2023
|
||||
* (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)
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2023
|
||||
* (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)
|
||||
@ -97,9 +97,28 @@
|
||||
};
|
||||
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;
|
||||
};
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2023
|
||||
* (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)
|
||||
@ -34,6 +34,23 @@
|
||||
|
||||
(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
|
||||
@ -42,10 +59,12 @@
|
||||
function CUserMaster(generateId)
|
||||
{
|
||||
AscOForm.CBaseFormatObject.call(this);
|
||||
|
||||
this.UserId = undefined;
|
||||
this.Role = undefined;
|
||||
this.Color = undefined;
|
||||
|
||||
this.UserId = undefined;
|
||||
this.UserName = undefined;
|
||||
this.UserEmail = undefined;
|
||||
this.Role = undefined;
|
||||
this.Color = undefined;
|
||||
|
||||
if (true === generateId)
|
||||
this.setUserId(AscCommon.CreateGUID());
|
||||
@ -74,6 +93,32 @@
|
||||
{
|
||||
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)
|
||||
@ -89,6 +134,10 @@
|
||||
{
|
||||
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;
|
||||
@ -106,8 +155,8 @@
|
||||
};
|
||||
CUserMaster.prototype.initDefaultUser = function()
|
||||
{
|
||||
// TODO: Возможно стоит придумать уникальный id общий для дефолтовой роли
|
||||
this.setRole(AscCommon.translateManager.getValue("Anyone"));
|
||||
// TODO: Consider creating a unique id common for the default role
|
||||
this.setRole("Anyone");
|
||||
this.setColor(255, 239, 191);
|
||||
};
|
||||
CUserMaster.prototype.compare = function(user)
|
||||
@ -175,6 +224,12 @@
|
||||
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);
|
||||
|
||||
@ -206,6 +261,12 @@
|
||||
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;
|
||||
@ -228,5 +289,7 @@
|
||||
};
|
||||
//--------------------------------------------------------export----------------------------------------------------
|
||||
AscOForm.CUserMaster = CUserMaster;
|
||||
AscOForm.getNoRole = getNoRole;
|
||||
|
||||
|
||||
})(window);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2023
|
||||
* (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)
|
||||
@ -35,8 +35,7 @@
|
||||
(function(window)
|
||||
{
|
||||
/**
|
||||
* Базовое изменение для работы с каким-либо контейнером, в который по ключу-key (string)
|
||||
* добавляют/удаляют значение
|
||||
* Base change for working with a container where values are added/removed by string key
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesBase}
|
||||
*/
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2023
|
||||
* (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)
|
||||
@ -45,6 +45,7 @@
|
||||
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;
|
||||
window['AscDFH'].historyitem_OForm_Document_Final = window['AscDFH'].historyitem_type_OForm_Document | 12;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
@ -325,5 +326,26 @@
|
||||
false
|
||||
);
|
||||
window['AscDFH'].CChangesOFormDocumentDefaultUser = CChangesOFormDocumentDefaultUser;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesBaseBoolProperty}
|
||||
*/
|
||||
function CChangesOFormDocumentFinal(Class, Old, New)
|
||||
{
|
||||
window['AscDFH'].CChangesBaseBoolProperty.call(this, Class, Old, New);
|
||||
}
|
||||
window['AscDFH'].InheritPropertyChange(
|
||||
CChangesOFormDocumentFinal,
|
||||
window['AscDFH'].CChangesBaseBoolProperty,
|
||||
window['AscDFH'].historyitem_OForm_Document_Final,
|
||||
function(value)
|
||||
{
|
||||
this.Class.Final = value;
|
||||
this.Class.onChangeFinal();
|
||||
},
|
||||
false
|
||||
);
|
||||
window['AscDFH'].CChangesOFormDocumentFinal = CChangesOFormDocumentFinal;
|
||||
|
||||
})(window);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2023
|
||||
* (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)
|
||||
@ -37,6 +37,8 @@
|
||||
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
|
||||
@ -120,5 +122,47 @@
|
||||
}
|
||||
);
|
||||
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);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2023
|
||||
* (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)
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2023
|
||||
* (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)
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2023
|
||||
* (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)
|
||||
@ -34,9 +34,11 @@
|
||||
|
||||
(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_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
|
||||
@ -104,5 +106,47 @@
|
||||
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);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2023
|
||||
* (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)
|
||||
@ -40,7 +40,7 @@
|
||||
const PATH_FIELD_MASTERS = "/fieldMasters/";
|
||||
|
||||
/**
|
||||
* Класс для работы с ссылками внутри xml структуры во время чтения
|
||||
* Class for working with references inside xml structure during reading
|
||||
* @constructor
|
||||
*/
|
||||
function XmlReaderContext(pkg)
|
||||
@ -184,7 +184,7 @@
|
||||
|
||||
|
||||
/**
|
||||
* Класс для работы с ссылками внутри xml структуры во время записи
|
||||
* Class for working with references inside xml structure during writing
|
||||
* @constructor
|
||||
*/
|
||||
function XmlWriterContext(pkg)
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2023
|
||||
* (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)
|
||||
@ -35,7 +35,7 @@
|
||||
(function(window)
|
||||
{
|
||||
/**
|
||||
* Класс для работы с форматом oform в xml
|
||||
* Class for working with the oform format in xml
|
||||
* @constructor
|
||||
* @extends {AscCommon.openXml.OpenXmlPackage}
|
||||
*/
|
||||
|
||||
43
plugin-events.js
Normal file
43
plugin-events.js
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* (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";
|
||||
Reference in New Issue
Block a user