Compare commits

...

25 Commits

Author SHA1 Message Date
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
e204301e1a [form] Add a method to mark all roles as filled at once 2025-07-03 01:20:33 +03:00
0d3b281cc3 [form] Clear user info when set the role unfilled 2025-07-01 16:49:10 +03:00
4a5b824f72 [form] Write date when the role was filled 2025-07-01 15:33:04 +03:00
d43cb71066 [form] Add userName/userEmail fields to a UserMaster 2025-07-01 10:51:50 +03:00
667a804085 [form] Add check if all roles were filled 2025-06-30 16:35:49 +03:00
2d1cac6992 Merge branch release/v9.0.0 into develop 2025-06-27 14:22:46 +00:00
031e0bbbbf Merge pull request '[forms][bu] Fix methods description' (#6) from release/v9.0.0 into master 2025-06-19 11:35:44 +00:00
9bee906735 [forms][bu] Fix methods description 2025-06-19 14:29:07 +03:00
bfe252fee3 Merge branch release/v9.0.0 into master 2025-06-18 09:27:10 +00:00
70503bde4c Merge pull request 'Api docs 9.0.0' (#5) from feature/api-docs-9.0.0 into release/v9.0.0
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/sdkjs-forms/pulls/5
2025-06-17 12:49:39 +00:00
9a88f0855a Merge branch 'release/v9.0.0' of git.onlyoffice.com:ONLYOFFICE/sdkjs-forms into feature/api-docs-9.0.0 2025-06-17 12:53:51 +03:00
ac12e3223c updated api docs 2025-06-17 12:53:41 +03:00
cb5cb83eb2 Merge remote-tracking branch 'remotes/origin/release/v9.0.0' into develop 2025-06-16 11:19:53 +03:00
00b3394113 Merge pull request 'fix/complex-form' (#4) from fix/complex-form into release/v9.0.0 2025-06-11 13:06:04 +00:00
930f507eaf [forms] Refactor 2025-06-11 16:04:22 +03:00
f31bb12081 Fix description CreateComplexForm 2025-06-07 07:37:50 +03:00
26236c2b6e Add CreateComplexForm 2025-06-07 07:33:12 +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 376 additions and 105 deletions

View File

@ -58,12 +58,12 @@
/**
* Common form properties.
* @typedef {Object} FormPrBase
* @property {string} key - Form key.
* @property {string} tip - Form tip text.
* @property {string} tag - Form tag.
* @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
*/
@ -185,19 +185,19 @@
* Creates a text field with the specified text field properties.
* @memberof Api
* @typeofeditors ["CDE", "CFE"]
* @param {TextFormPr} oFormPr - Text field properties.
* @param {TextFormPr} formPr - Text field properties.
* @returns {ApiTextForm}
* @see office-js-api/Examples/Forms/Api/Methods/CreateTextForm.js
*/
Api.prototype.CreateTextForm = function(oFormPr)
Api.prototype.CreateTextForm = function(formPr)
{
return executeNoFormLockCheck(function()
{
if (!oFormPr)
oFormPr = {};
if (!formPr)
formPr = {};
let form = CreateCommonForm(oFormPr);
ApplyTextFormPr(form, oFormPr);
let form = CreateCommonForm(formPr);
ApplyTextFormPr(form, formPr);
CheckForm(form);
return new AscBuilder.ApiTextForm(form);
}, this);
@ -206,26 +206,26 @@
* Creates a checkbox / radio button with the specified checkbox / radio button properties.
* @memberof Api
* @typeofeditors ["CDE", "CFE"]
* @param {CheckBoxFormPr} oFormPr - Checkbox / radio button properties.
* @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.prototype.CreateCheckBoxForm = function(formPr)
{
return executeNoFormLockCheck(function()
{
if (!oFormPr)
oFormPr = {};
if (!formPr)
formPr = {};
oFormPr["placeholder"] = undefined;
formPr["placeholder"] = undefined;
var oCC;
var oCheckboxPr = new AscCommon.CSdtCheckBoxPr();
if (GetBoolParameter(oFormPr["radio"], false))
if (GetBoolParameter(formPr["radio"], false))
{
oCheckboxPr.CheckedSymbol = 0x25C9;
oCheckboxPr.UncheckedSymbol = 0x25CB;
oCheckboxPr.GroupKey = GetStringParameter(oFormPr["key"], "Group1");
oCheckboxPr.GroupKey = GetStringParameter(formPr["key"], "Group1");
}
else
{
@ -256,7 +256,7 @@
function private_PerformAddCheckBox()
{
oCC = CreateCommonForm(oFormPr);
oCC = CreateCommonForm(formPr);
oCC.ApplyCheckBoxPr(oCheckboxPr);
}
@ -281,25 +281,25 @@
* Creates a combo box / dropdown list with the specified combo box / dropdown list properties.
* @memberof Api
* @typeofeditors ["CDE", "CFE"]
* @param {ComboBoxFormPr} oFormPr - Combo box / dropdown list properties.
* @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.prototype.CreateComboBoxForm = function(formPr)
{
return executeNoFormLockCheck(function()
{
if (!oFormPr)
oFormPr = {};
if (!formPr)
formPr = {};
var oPr = new AscCommon.CSdtComboBoxPr();
oPr.AddItem(AscCommon.translateManager.getValue("Choose an item"), "");
var oCC = CreateCommonForm(oFormPr);
var oCC = CreateCommonForm(formPr);
let sPlaceholder = GetStringParameter(oFormPr["placeholder"], undefined);
let sPlaceholder = GetStringParameter(formPr["placeholder"], undefined);
let arrList = GetArrayParameter(oFormPr["items"], []);
let arrList = GetArrayParameter(formPr["items"], []);
for (let nIndex = 0, nCount = arrList.length; nIndex < nCount; ++nIndex)
{
let oItem = arrList[nIndex];
@ -316,9 +316,9 @@
oPr.AddItem(sDisplay, sValue);
}
}
oPr.SetAutoFit(GetBoolParameter(oFormPr["autoFit"], false));
oPr.SetAutoFit(GetBoolParameter(formPr["autoFit"], false));
if (!GetBoolParameter(oFormPr["editable"], false))
if (!GetBoolParameter(formPr["editable"], false))
{
if (sPlaceholder)
{
@ -351,27 +351,27 @@
* Creates a picture form with the specified picture form properties.
* @memberof Api
* @typeofeditors ["CDE", "CFE"]
* @param {PictureFormPr} oFormPr - Picture form properties.
* @param {PictureFormPr} formPr - Picture form properties.
* @returns {ApiPictureForm}
* @see office-js-api/Examples/Forms/Api/Methods/CreatePictureForm.js
*/
Api.prototype.CreatePictureForm = function(oFormPr)
Api.prototype.CreatePictureForm = function(formPr)
{
return executeNoFormLockCheck(function()
{
if (!oFormPr)
oFormPr = {};
if (!formPr)
formPr = {};
if (GetStringParameter("placeholder", null))
oFormPr["placeholder"] = AscCommon.translateManager.getValue("Click to load image");
formPr["placeholder"] = AscCommon.translateManager.getValue("Click to load image");
var oCC = CreateCommonForm(oFormPr);
var oCC = CreateCommonForm(formPr);
oCC.ApplyPicturePr(true);
oCC.ConvertFormToFixed();
let oPr = new AscCommon.CSdtPictureFormPr();
let sScale = GetStringParameter(oFormPr["scaleFlag"], undefined);
let sScale = GetStringParameter(formPr["scaleFlag"], undefined);
switch (sScale)
{
case "always":
@ -388,10 +388,10 @@
break;
}
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);
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);
@ -403,53 +403,74 @@
* Creates a date form with the specified date form properties.
* @memberof Api
* @typeofeditors ["CDE", "CFE"]
* @param {DateFormPr} oFormPr - Date form properties.
* @param {DateFormPr} formPr - Date form properties.
* @returns {ApiDateForm}
* @see office-js-api/Examples/Forms/Api/Methods/CreateDateForm.js
*/
Api.prototype.CreateDateForm = function(oFormPr)
Api.prototype.CreateDateForm = function(formPr)
{
return executeNoFormLockCheck(function()
{
if (!oFormPr)
oFormPr = {};
if (!formPr)
formPr = {};
let form = CreateCommonForm(oFormPr);
ApplyDateFormPr(form, oFormPr);
let form = CreateCommonForm(formPr);
ApplyDateFormPr(form, formPr);
CheckForm(form);
return new AscBuilder.ApiDateForm(form);
}, this);
};
/**
* Creates a complex form with the specified complex form properties.
* @memberof Api
* @typeofeditors ["CDE", "CFE"]
* @param {FormPrBase} formPr - Complex form properties.
* @returns {ApiComplexForm}
* @see office-js-api/Examples/Forms/Api/Methods/CreateComplexForm.js
*/
Api.prototype.CreateComplexForm = function(formPr)
{
return executeNoFormLockCheck(function()
{
if (!formPr)
formPr = {};
let form = CreateCommonForm(formPr);
ApplyComplexFormPr(form);
CheckForm(form);
return new AscBuilder.ApiComplexForm(form);
}, this);
};
/**
* Inserts a text box with the specified text box properties over the selected text.
* @memberof ApiDocument
* @typeofeditors ["CDE", "CFE"]
* @param {TextFormInsertPr} oFormPr - Properties for inserting a text field.
* @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)
{
return executeNoFormLockCheck(function()
{
if (!oFormPr)
oFormPr = {};
if (!formPr)
formPr = {};
let logicDocument = this.Document;
let placeholder = GetStringParameter(oFormPr["placeholder"], undefined);
if (GetBoolParameter(oFormPr["placeholderFromSelection"], false))
let placeholder = GetStringParameter(formPr["placeholder"], undefined);
if (GetBoolParameter(formPr["placeholderFromSelection"], false))
placeholder = logicDocument.GetSelectedText();
if (!GetBoolParameter(oFormPr["keepSelectedTextInForm"], true))
if (!GetBoolParameter(formPr["keepSelectedTextInForm"], true))
logicDocument.RemoveBeforePaste();
let contentControl = logicDocument.AddContentControl(c_oAscSdtLevelType.Inline);
if (!contentControl)
return null;
ApplyCommonFormPr(contentControl, oFormPr);
ApplyCommonFormPr(contentControl, formPr);
SetFormPlaceholder(contentControl, placeholder);
ApplyTextFormPr(contentControl, oFormPr, true);
ApplyTextFormPr(contentControl, formPr, true);
CheckForm(contentControl);
return new AscBuilder.ApiTextForm(contentControl);
}, this);
@ -459,7 +480,7 @@
* Class representing a collection of form roles.
* @constructor
* @since 9.0.0
* @typeofeditors ["CFE"]
* @typeofeditors ["CDE", "CFE"]
*/
function ApiFormRoles(oform)
{
@ -467,23 +488,22 @@
}
/**
* Role properties.
* The date form properties.
* @typedef {FormPrBase | DateFormPrBase} DateFormPr
* @see office-js-api/Examples/Enumerations/DateFormPr.js
*/
/**
* Role properties.
* The role properties.
* @typedef {Object} RoleProperties
* @property {string} color
* @see office-js-api/Examples/Enumerations/RolePr.js
* @property {string} color - The role color.
* @see office-js-api/Examples/Enumerations/RoleProperties.js
*/
/**
* Get the collection of form roles.
*
* Returns a collection of form roles.
* @since 9.0.0
* @typeofeditors ["CFE"]
* @typeofeditors ["CDE", "CFE"]
* @returns {ApiFormRoles}
* @see office-js-api/Examples/Forms/ApiDocument/Methods/GetFormRoles.js
*/
@ -493,12 +513,12 @@
};
/**
* Add new role.
* Adds a new form role.
* @memberof ApiFormRoles
* @since 9.0.0
* @typeofeditors ["CFE"]
* @typeofeditors ["CDE", "CFE"]
* @param {string} name - The name of role being added.
* @param {RoleProperties} props - Properties for the new role.
* @param {RoleProperties} props - The role properties.
* @returns {boolean}
* @see office-js-api/Examples/Forms/ApiFormRoles/Methods/Add.js
*/
@ -516,12 +536,12 @@
return true;
};
/**
* Remove role.
* Removes a role with the specified name.
* @memberof ApiFormRoles
* @since 9.0.0
* @typeofeditors ["CFE"]
* @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 binded to this role will be delegated.
* @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
*/
@ -533,10 +553,10 @@
return this.oform.removeRole(name, delegateRole);
};
/**
* Get the number of roles.
* Returns a number of form roles.
* @memberof ApiFormRoles
* @since 9.0.0
* @typeofeditors ["CFE"]
* @typeofeditors ["CDE", "CFE"]
* @returns {number}
* @see office-js-api/Examples/Forms/ApiFormRoles/Methods/GetCount.js
*/
@ -548,10 +568,10 @@
return this.oform.getAllRoles().length;
};
/**
* List all roles.
* Lists all available roles.
* @memberof ApiFormRoles
* @since 9.0.0
* @typeofeditors ["CFE"]
* @typeofeditors ["CDE", "CFE"]
* @returns {string[]}
* @see office-js-api/Examples/Forms/ApiFormRoles/Methods/GetAllRoles.js
*/
@ -569,11 +589,11 @@
return result;
};
/**
* Check if a role with the specified name exists.
* Checks if a role with the specified name exists.
* @memberof ApiFormRoles
* @since 9.0.0
* @typeofeditors ["CFE"]
* @param {string} name - The name of role.
* @typeofeditors ["CDE", "CFE"]
* @param {string} name - The role name.
* @returns {boolean}
* @see office-js-api/Examples/Forms/ApiFormRoles/Methods/HaveRole.js
*/
@ -582,11 +602,11 @@
return this.oform && this.oform.haveRole(name);
};
/**
* Get the color of the specified role
* Returns the RGB color of the specified role.
* @memberof ApiFormRoles
* @since 9.0.0
* @typeofeditors ["CFE"]
* @param {string} name - The name of role.
* @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
*/
@ -606,12 +626,12 @@
};
};
/**
* Set the color of the specified role
* Sets the color for the specified role.
* @memberof ApiFormRoles
* @since 9.0.0
* @typeofeditors ["CFE"]
* @param {string} name - The name of role.
* @param {string} color - The specified color.
* @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
*/
@ -629,11 +649,11 @@
return true;
};
/**
* Move role up in filling order.
* Moves a role up in filling order.
* @memberof ApiFormRoles
* @since 9.0.0
* @typeofeditors ["CFE"]
* @param {string} name - The name of role.
* @typeofeditors ["CDE", "CFE"]
* @param {string} name - The role name.
* @returns {boolean}
* @see office-js-api/Examples/Forms/ApiFormRoles/Methods/MoveUp.js
*/
@ -645,13 +665,13 @@
return this.oform.moveUpRole(name);
};
/**
* Move role down in filling order.
* Moves a role down in filling order.
* @memberof ApiFormRoles
* @since 9.0.0
* @typeofeditors ["CFE"]
* @param {string} name - The name of role.
* @typeofeditors ["CDE", "CFE"]
* @param {string} name - The role name.
* @returns {boolean}
* @see office-js-api/Examples/Forms/ApiFormRoles/Methods/MoveUp.js
* @see office-js-api/Examples/Forms/ApiFormRoles/Methods/MoveDown.js
*/
ApiFormRoles.prototype.MoveDown = function(name)
{
@ -663,16 +683,16 @@
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 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 = oFormPr ? GetStringParameter(oFormPr["tag"], undefined) : undefined;
let tag = formPr ? GetStringParameter(formPr["tag"], undefined) : undefined;
if (tag)
contentControl.SetTag(tag);
@ -722,6 +742,11 @@
form.ApplyDatePickerPr(datePickerPr);
}
function ApplyComplexFormPr(form)
{
let complexFormPr = new AscWord.CSdtComplexFormPr();
form.SetComplexFormPr(complexFormPr);
}
function CheckForm(form)
{
CheckFormKey(form);
@ -778,8 +803,9 @@
Api.prototype["CreateTextForm"] = Api.prototype.CreateTextForm;
Api.prototype["CreatePictureForm"] = Api.prototype.CreatePictureForm;
Api.prototype["CreateDateForm"] = Api.prototype.CreateDateForm;
Api.prototype["CreateCheckBoxForm"] = Api.prototype.CreateCheckBoxForm;
Api.prototype["CreateCheckBoxForm"] = Api.prototype.CreateCheckBoxForm;
Api.prototype["CreateComboBoxForm"] = Api.prototype.CreateComboBoxForm;
Api.prototype["CreateComplexForm"] = Api.prototype.CreateComplexForm;
ApiDocument.prototype["InsertTextForm"] = ApiDocument.prototype.InsertTextForm;
ApiDocument.prototype["GetFormRoles"] = ApiDocument.prototype.GetFormRoles;

View File

@ -621,6 +621,43 @@
this.Roles[roleIndex].setFilled(false);
}
};
OForm.prototype.setAllRolesFilled = function(userPr)
{
let name = userPr ? userPr.name : null;
let id = userPr ? userPr.id : null;
let email = userPr ? userPr.email : null;
for (let roleIndex = 0, roleCount = this.Roles.length; roleIndex < roleCount; ++roleIndex)
{
let role = this.Roles[roleIndex];
if (role.isFilled())
continue;
role.setFilled(true);
let userMaster = role.getUserMaster();
if (!userMaster)
continue;
if (name)
userMaster.setUserName(name);
if (id)
userMaster.setUserId(id);
if (email)
userMaster.setEmail(email);
}
};
OForm.prototype.isAllRolesFilled = function()
{
for (let roleIndex = 0, roleCount = this.Roles.length; roleIndex < roleCount; ++roleIndex)
{
if (!this.Roles[roleIndex].isFilled())
return false;
}
return true;
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Private area
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -84,8 +84,22 @@
};
CRole.prototype.setFilled = function(isFilled)
{
if (this.FieldGroup)
this.FieldGroup.setFilled(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()
{

View File

@ -43,6 +43,7 @@
AscOForm.CBaseFormatObject.call(this);
this.Filled = false;
this.Date = undefined;
this.Weight = null;
this.Fields = [];
this.Users = [];
@ -84,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))
@ -230,6 +243,13 @@
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)
@ -265,8 +285,14 @@
let attrName = reader.GetNameNoNS();
if ("weight" === attrName)
fG.setWeight(reader.GetValueInt());
if ("filled" === attrName)
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();

View File

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

View File

@ -59,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());
@ -91,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)
@ -192,6 +220,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);
@ -223,6 +257,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;

View File

@ -38,6 +38,7 @@
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
@ -143,4 +144,25 @@
);
window['AscDFH'].CChangesOFormFieldGroupFilled = CChangesOFormFieldGroupFilled;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormFieldGroupDate(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormFieldGroupDate,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_FieldGroup_Date,
function(value)
{
let v = parseInt(value);
this.Class.Date = isNaN(v) ? undefined : v;
},
false
);
window['AscDFH'].CChangesOFormFieldGroupDate = CChangesOFormFieldGroupDate;
})(window);

View File

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

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";