Compare commits

..

22 Commits

Author SHA1 Message Date
4e93e32ed4 Move InitClass to AscCommon namespace 2025-11-17 13:22:03 +03:00
4c31ee1427 Merge pull request 'Add data for macro writing' (#8) from fix/macro-record into release/v9.2.0 2025-11-01 13:08:00 +00:00
1daac752fa Add data for macro writing 2025-11-01 12:58:45 +03:00
22cbda0f3a [de] Don't return complex form if it is a labeled checkbox 2025-10-29 18:14:30 +03:00
8b80309475 Merge branch release/v9.1.0 into master 2025-10-14 14:42:32 +00:00
72b33b253a For bug #75654
Check required flag when adding the new radio button
2025-10-01 20:17:00 +03:00
7bbcacc622 [form] Export method isFinal 2025-09-30 18:17:27 +03:00
a0bfe66f9c Fix typo 2025-09-30 18:02:28 +03:00
db6cd158d0 [de][form] Add final flag 2025-09-30 17:59:54 +03:00
528997cc88 Fix bug #76932
Reset default role to the first role in oform after deleting it
2025-09-30 16:22:12 +03:00
5e6a7c5867 For bug #77034
Check if the current userMaster is a noRole
2025-09-26 16:45:33 +03:00
8b8364fd48 Fix bug #76932
Update the default role for the form, if it was delete
2025-09-24 18:18:31 +03:00
bdf97bf2f4 Merge branch 'develop' of git.onlyoffice.com:ONLYOFFICE/sdkjs-forms into develop 2025-07-10 17:46:14 +03:00
71dc14ae55 Merge remote-tracking branch 'remotes/origin/hotfix/v9.0.4' into develop 2025-07-10 17:45:49 +03:00
0cc7cdc5af Merge branch hotfix/v9.0.3 into master 2025-07-08 11:41:41 +00:00
b8170a57d7 Merge branch hotfix/v9.0.2 into develop 2025-07-07 14:43:02 +00:00
3fd132911e Merge pull request 'Added plugins events docs file' (#7) from fix/docs into hotfix/v9.0.3
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/sdkjs-forms/pulls/7
2025-07-07 14:13:13 +00:00
9274d360c0 Added plugins events docs file 2025-07-07 21:12:38 +07:00
2d1cac6992 Merge branch release/v9.0.0 into develop 2025-06-27 14:22:46 +00:00
cb5cb83eb2 Merge remote-tracking branch 'remotes/origin/release/v9.0.0' into develop 2025-06-16 11:19:53 +03:00
e1a98f8f4a Merge branch hotfix/v8.3.3 into develop 2025-04-21 09:08:04 +00:00
58060100c9 Merge branch hotfix/v8.3.2 into develop 2025-04-01 08:39:13 +00:00
9 changed files with 167 additions and 19 deletions

24
api.js
View File

@ -80,7 +80,7 @@ window["AscOForm"] = window.AscOForm = AscOForm;
AscFonts.FontPickerByCharacter.getFontBySymbol(nUncheckedSymbol);
}
function private_ApplyPrToCheckBox(oCC)
function private_ApplyPrToCheckBox(oCC, checkBoxPr)
{
if (!oCC)
return;
@ -94,7 +94,7 @@ window["AscOForm"] = window.AscOForm = AscOForm;
else
private_CheckFormKey(oCC, oLogicDocument);
}
if (oCommonPr)
oCC.SetContentControlPr(oCommonPr);
}
@ -122,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);
@ -146,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();
@ -182,7 +182,7 @@ 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);
// 150x32pt for Signature
let w = isSignature ? 150 / 72 * 25.4 : undefined;
@ -309,7 +309,7 @@ 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_AddContentControlList, undefined, undefined, isComboBox);
var oCC;
if (isComboBox)
@ -344,7 +344,7 @@ 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_AddContentControlList, undefined, undefined, true);
let dateTimePr = null;
let formPr = null;
@ -464,8 +464,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)
{
@ -669,6 +671,8 @@ window["AscOForm"] = window.AscOForm = AscOForm;
let formManager = logicDocument.GetFormsManager();
let keyGenerator = formManager.GetKeyGenerator();
form.SetFormRequired(formManager.IsRadioGroupRequired(groupKey));
let formPr = form.GetFormPr().Copy();
if (!formPr)
return;

View File

@ -175,7 +175,6 @@
let fields = fieldGroup.getAllFields();
let delegateIndex = this.getRoleIndex(delegateName);
// На самом деле можно убрать эту проверку, но тогда мы просто удалим группу по умолчнию и заново её добавим
@ -188,14 +187,14 @@
{
if (!this.startAction(AscDFH.historydescription_OForm_RemoveRole))
return false;
defaultUserMaster.initDefaultUser();
this.NeedRedraw = true;
this.endAction();
return true;
}
return false;
}
@ -243,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;
@ -658,6 +689,14 @@
}
return true;
};
OForm.prototype.isFinal = function()
{
return this.Format.isFinal();
};
OForm.prototype.setFinal = function(isFinal)
{
return this.Format.setFinal(isFinal);
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Private area
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -684,6 +723,15 @@
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-----------------------------------------------------

View File

@ -57,6 +57,7 @@
this.Type = null;
this.Application = null;
this.DocumentId = null;
this.Final = false;
this.FieldGroups = [];
// Массивы всех имеющихся пользователей и полей
@ -64,7 +65,7 @@
this.UserMasters = [];
this.FieldMasters = [];
}
AscFormat.InitClass(CDocument, AscOForm.CBaseFormatObject, AscDFH.historyitem_type_OForm_Document);
AscCommon.InitClass(CDocument, AscOForm.CBaseFormatObject, AscDFH.historyitem_type_OForm_Document);
CDocument.prototype.clear = function()
{
// TODO: fields?
@ -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);
@ -625,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;

View File

@ -50,7 +50,7 @@
this.Parent = null;
}
AscFormat.InitClass(CFieldGroup, AscOForm.CBaseFormatObject, AscDFH.historyitem_type_OForm_FieldGroup);
AscCommon.InitClass(CFieldGroup, AscOForm.CBaseFormatObject, AscDFH.historyitem_type_OForm_FieldGroup);
CFieldGroup.prototype.setParent = function(parent)
{
if (this.Parent === parent)

View File

@ -51,7 +51,7 @@
if (true === generateId)
this.setFieldId(AscCommon.CreateGUID());
}
AscFormat.InitClass(CFieldMaster, AscOForm.CBaseFormatObject, AscDFH.historyitem_type_OForm_FieldMaster);
AscCommon.InitClass(CFieldMaster, AscOForm.CBaseFormatObject, AscDFH.historyitem_type_OForm_FieldMaster);
CFieldMaster.prototype.setLogicField = function(logicField)
{
this.Field = logicField;

View File

@ -50,7 +50,7 @@
if (userMaster)
this.setUserMaster(userMaster);
}
AscFormat.InitClass(CUser, AscOForm.CBaseFormatObject, AscDFH.historyitem_type_OForm_User);
AscCommon.InitClass(CUser, AscOForm.CBaseFormatObject, AscDFH.historyitem_type_OForm_User);
CUser.prototype.setUserMaster = function(userMaster)
{
if (this.UserMaster === userMaster)

View File

@ -71,7 +71,7 @@
this.Parent = null;
}
AscFormat.InitClass(CUserMaster, AscOForm.CBaseFormatObject, AscDFH.historyitem_type_OForm_UserMaster);
AscCommon.InitClass(CUserMaster, AscOForm.CBaseFormatObject, AscDFH.historyitem_type_OForm_UserMaster);
CUserMaster.prototype.setParent = function(parent)
{
if (this.Parent === parent)
@ -134,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;

View File

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

43
plugin-events.js Normal file
View 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";