mirror of
https://github.com/ONLYOFFICE/sdkjs-forms.git
synced 2026-03-31 10:23:35 +08:00
Compare commits
34 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 031e0bbbbf | |||
| 9bee906735 | |||
| bfe252fee3 | |||
| 70503bde4c | |||
| 9a88f0855a | |||
| ac12e3223c | |||
| 00b3394113 | |||
| 930f507eaf | |||
| f31bb12081 | |||
| 26236c2b6e | |||
| 8e661ab8a9 | |||
| bee4c2702c | |||
| 9446505728 | |||
| d80cc23221 | |||
| a602d9aa36 | |||
| ea7e3c0f02 | |||
| 1da45dde0e | |||
| 4ac368daa0 | |||
| b8cbadfde6 | |||
| 4732938f0a | |||
| 7505fadefe | |||
| 439c9b3085 | |||
| f4d5a88be0 | |||
| c8bff88071 | |||
| 4c765147b0 | |||
| 110a52a0b9 | |||
| ec29fcbcbc | |||
| a60477955e | |||
| 097ac2ecbd | |||
| 46d2220494 | |||
| bb4bd422b3 | |||
| 26fd5ac0e1 | |||
| c74119b351 | |||
| 87e1f3d133 |
16
api.js
16
api.js
@ -189,6 +189,17 @@ window["AscOForm"] = window.AscOForm = AscOForm;
|
||||
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)
|
||||
{
|
||||
@ -263,7 +274,7 @@ window["AscOForm"] = window.AscOForm = AscOForm;
|
||||
else
|
||||
{
|
||||
oCC.ReplaceContentWithPlaceHolder();
|
||||
oCC.ApplyPicturePr(true);
|
||||
oCC.ApplyPicturePr(true, w, h);
|
||||
}
|
||||
}
|
||||
|
||||
@ -673,6 +684,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()
|
||||
|
||||
402
apiBuilder.js
402
apiBuilder.js
@ -58,11 +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
|
||||
*/
|
||||
|
||||
@ -184,20 +185,20 @@
|
||||
* 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);
|
||||
CheckFormKey(form);
|
||||
let form = CreateCommonForm(formPr);
|
||||
ApplyTextFormPr(form, formPr);
|
||||
CheckForm(form);
|
||||
return new AscBuilder.ApiTextForm(form);
|
||||
}, this);
|
||||
};
|
||||
@ -205,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
|
||||
{
|
||||
@ -255,7 +256,7 @@
|
||||
|
||||
function private_PerformAddCheckBox()
|
||||
{
|
||||
oCC = CreateCommonForm(oFormPr);
|
||||
oCC = CreateCommonForm(formPr);
|
||||
oCC.ApplyCheckBoxPr(oCheckboxPr);
|
||||
}
|
||||
|
||||
@ -272,7 +273,7 @@
|
||||
private_PerformAddCheckBox();
|
||||
}
|
||||
|
||||
CheckFormKey(oCC);
|
||||
CheckForm(oCC);
|
||||
return new AscBuilder.ApiCheckBoxForm(oCC);
|
||||
}, this);
|
||||
};
|
||||
@ -280,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];
|
||||
@ -315,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)
|
||||
{
|
||||
@ -342,7 +343,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
CheckFormKey(oCC);
|
||||
CheckForm(oCC);
|
||||
return new AscBuilder.ApiComboBoxForm(oCC);
|
||||
}, this);
|
||||
};
|
||||
@ -350,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":
|
||||
@ -387,14 +388,14 @@
|
||||
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);
|
||||
|
||||
CheckFormKey(oCC);
|
||||
CheckForm(oCC);
|
||||
return new AscBuilder.ApiPictureForm(oCC);
|
||||
}, this);
|
||||
};
|
||||
@ -402,70 +403,296 @@
|
||||
* 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);
|
||||
CheckFormKey(form);
|
||||
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);
|
||||
CheckFormKey(contentControl);
|
||||
ApplyTextFormPr(contentControl, formPr, true);
|
||||
CheckForm(contentControl);
|
||||
return new AscBuilder.ApiTextForm(contentControl);
|
||||
}, this);
|
||||
};
|
||||
|
||||
/**
|
||||
* Class representing a collection of form roles.
|
||||
* @constructor
|
||||
* @since 9.0.0
|
||||
* @typeofeditors ["CDE", "CFE"]
|
||||
*/
|
||||
function ApiFormRoles(oform)
|
||||
{
|
||||
this.oform = oform;
|
||||
}
|
||||
|
||||
/**
|
||||
* The date form properties.
|
||||
* @typedef {FormPrBase | DateFormPrBase} DateFormPr
|
||||
* @see office-js-api/Examples/Enumerations/DateFormPr.js
|
||||
*/
|
||||
|
||||
/**
|
||||
* The role properties.
|
||||
* @typedef {Object} RoleProperties
|
||||
* @property {string} color - The role color.
|
||||
* @see office-js-api/Examples/Enumerations/RoleProperties.js
|
||||
*/
|
||||
|
||||
/**
|
||||
* Returns a collection of form roles.
|
||||
* @since 9.0.0
|
||||
* @typeofeditors ["CDE", "CFE"]
|
||||
* @returns {ApiFormRoles}
|
||||
* @see office-js-api/Examples/Forms/ApiDocument/Methods/GetFormRoles.js
|
||||
*/
|
||||
ApiDocument.prototype.GetFormRoles = function()
|
||||
{
|
||||
return new ApiFormRoles(this.Document.GetOFormDocument());
|
||||
};
|
||||
|
||||
/**
|
||||
* Adds a new form role.
|
||||
* @memberof ApiFormRoles
|
||||
* @since 9.0.0
|
||||
* @typeofeditors ["CDE", "CFE"]
|
||||
* @param {string} name - The name of role being added.
|
||||
* @param {RoleProperties} props - The role properties.
|
||||
* @returns {boolean}
|
||||
* @see office-js-api/Examples/Forms/ApiFormRoles/Methods/Add.js
|
||||
*/
|
||||
ApiFormRoles.prototype.Add = function(name, props)
|
||||
{
|
||||
if (!this.oform || !name || this.oform.getRole(name))
|
||||
return false;
|
||||
|
||||
let rgba = ParseRoleColor(props && props["color"] ? props["color"] : null);
|
||||
|
||||
let rolePr = new AscOForm.CRoleSettings();
|
||||
rolePr.Name = name;
|
||||
rolePr.Color = AscCommon.CreateAscColorCustom(rgba.R, rgba.G, rgba.B);
|
||||
this.oform.addRole(rolePr);
|
||||
return true;
|
||||
};
|
||||
/**
|
||||
* Removes a role with the specified name.
|
||||
* @memberof ApiFormRoles
|
||||
* @since 9.0.0
|
||||
* @typeofeditors ["CDE", "CFE"]
|
||||
* @param {string} name - The name of role to be removed.
|
||||
* @param {string} [delegateRole] - The name of the role to which all forms bound to this role will be delegated.
|
||||
* @returns {boolean}
|
||||
* @see office-js-api/Examples/Forms/ApiFormRoles/Methods/Remove.js
|
||||
*/
|
||||
ApiFormRoles.prototype.Remove = function(name, delegateRole)
|
||||
{
|
||||
if (!this.oform)
|
||||
return false;
|
||||
|
||||
return this.oform.removeRole(name, delegateRole);
|
||||
};
|
||||
/**
|
||||
* Returns a number of form roles.
|
||||
* @memberof ApiFormRoles
|
||||
* @since 9.0.0
|
||||
* @typeofeditors ["CDE", "CFE"]
|
||||
* @returns {number}
|
||||
* @see office-js-api/Examples/Forms/ApiFormRoles/Methods/GetCount.js
|
||||
*/
|
||||
ApiFormRoles.prototype.GetCount = function()
|
||||
{
|
||||
if (!this.oform)
|
||||
return 0;
|
||||
|
||||
return this.oform.getAllRoles().length;
|
||||
};
|
||||
/**
|
||||
* Lists all available roles.
|
||||
* @memberof ApiFormRoles
|
||||
* @since 9.0.0
|
||||
* @typeofeditors ["CDE", "CFE"]
|
||||
* @returns {string[]}
|
||||
* @see office-js-api/Examples/Forms/ApiFormRoles/Methods/GetAllRoles.js
|
||||
*/
|
||||
ApiFormRoles.prototype.GetAllRoles = function()
|
||||
{
|
||||
if (!this.oform)
|
||||
return [];
|
||||
|
||||
let roles = this.oform.getAllRoles();
|
||||
let result = [];
|
||||
for (let i = 0; i < roles.length; ++i)
|
||||
{
|
||||
result.push(roles[i].getRole());
|
||||
}
|
||||
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;
|
||||
|
||||
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 = oFormPr ? GetStringParameter(oFormPr["tag"], undefined) : undefined;
|
||||
let tag = formPr ? GetStringParameter(formPr["tag"], undefined) : undefined;
|
||||
if (tag)
|
||||
contentControl.SetTag(tag);
|
||||
|
||||
@ -489,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)
|
||||
@ -514,6 +742,16 @@
|
||||
|
||||
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;
|
||||
@ -535,16 +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["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;
|
||||
|
||||
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));
|
||||
|
||||
|
||||
@ -34,6 +34,8 @@
|
||||
|
||||
(function(window)
|
||||
{
|
||||
let Api = window["asc_docs_api"];
|
||||
|
||||
/**
|
||||
* @typedef {Object} ContentControl
|
||||
* Content control object.
|
||||
@ -62,7 +64,7 @@
|
||||
* @returns {ContentControl[]} - An array with all the forms from the document.
|
||||
* @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)
|
||||
@ -85,7 +87,7 @@
|
||||
* @returns {ContentControl[]} - An array with all the forms from the document with the specified tag.
|
||||
* @see office-js-api/Examples/Plugins/Forms/Api/Methods/GetFormsByTag.js
|
||||
*/
|
||||
window["asc_docs_api"].prototype["pluginMethod_GetFormsByTag"] = function(tag)
|
||||
Api.prototype["pluginMethod_GetFormsByTag"] = function(tag)
|
||||
{
|
||||
let oFormsManager = this.private_GetFormsManager();
|
||||
if (!oFormsManager)
|
||||
@ -111,7 +113,7 @@
|
||||
* @param {string | boolean} value - Form value to be set. Its type depends on the form type.
|
||||
* @see office-js-api/Examples/Plugins/Forms/Api/Methods/SetFormValue.js
|
||||
*/
|
||||
window["asc_docs_api"].prototype["pluginMethod_SetFormValue"] = function(internalId, value)
|
||||
Api.prototype["pluginMethod_SetFormValue"] = function(internalId, value)
|
||||
{
|
||||
this.private_SetFormValue(internalId, value);
|
||||
};
|
||||
@ -124,7 +126,7 @@
|
||||
* @returns {null | string | boolean} The form value in the string or boolean format depending on the form type. The null value means that the form is filled with a placeholder.
|
||||
* @see office-js-api/Examples/Plugins/Forms/Api/Methods/GetFormValue.js
|
||||
*/
|
||||
window["asc_docs_api"].prototype["pluginMethod_GetFormValue"] = function(internalId)
|
||||
Api.prototype["pluginMethod_GetFormValue"] = function(internalId)
|
||||
{
|
||||
if (!AscCommon.g_oTableId)
|
||||
return "";
|
||||
|
||||
@ -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;
|
||||
@ -444,6 +456,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;
|
||||
@ -561,6 +588,39 @@
|
||||
{
|
||||
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);
|
||||
}
|
||||
};
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Private area
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -598,5 +658,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);
|
||||
|
||||
@ -78,6 +78,15 @@
|
||||
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)
|
||||
this.FieldGroup.setFilled(isFilled);
|
||||
};
|
||||
CRole.prototype.getFieldGroup = function()
|
||||
{
|
||||
return this.FieldGroup;
|
||||
|
||||
@ -568,6 +568,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)
|
||||
|
||||
@ -42,6 +42,7 @@
|
||||
{
|
||||
AscOForm.CBaseFormatObject.call(this);
|
||||
|
||||
this.Filled = false;
|
||||
this.Weight = null;
|
||||
this.Fields = [];
|
||||
this.Users = [];
|
||||
@ -57,6 +58,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)
|
||||
@ -149,6 +163,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 +228,8 @@
|
||||
|
||||
writer.WriteXmlNodeStart("fieldGroup");
|
||||
writer.WriteXmlNullableAttributeInt("weight", this.getWeight());
|
||||
if (this.isFilled())
|
||||
writer.WriteXmlNullableAttributeBool("filled", true);
|
||||
writer.WriteXmlAttributesEnd();
|
||||
|
||||
for (let userIndex = 0, userCount = this.Users.length; userIndex < userCount; ++userIndex)
|
||||
@ -239,8 +262,11 @@
|
||||
|
||||
while (reader.MoveToNextAttribute())
|
||||
{
|
||||
if ("weight" === reader.GetNameNoNS())
|
||||
let attrName = reader.GetNameNoNS();
|
||||
if ("weight" === attrName)
|
||||
fG.setWeight(reader.GetValueInt());
|
||||
if ("filled" === attrName)
|
||||
fG.setFilled(reader.GetValueBool());
|
||||
}
|
||||
|
||||
let xmlReaderContext = reader.GetOformContext();
|
||||
|
||||
@ -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
|
||||
@ -107,7 +124,7 @@
|
||||
CUserMaster.prototype.initDefaultUser = function()
|
||||
{
|
||||
// TODO: Возможно стоит придумать уникальный id общий для дефолтовой роли
|
||||
this.setRole(AscCommon.translateManager.getValue("Anyone"));
|
||||
this.setRole("Anyone");
|
||||
this.setColor(255, 239, 191);
|
||||
};
|
||||
CUserMaster.prototype.compare = function(user)
|
||||
@ -228,5 +245,7 @@
|
||||
};
|
||||
//--------------------------------------------------------export----------------------------------------------------
|
||||
AscOForm.CUserMaster = CUserMaster;
|
||||
AscOForm.getNoRole = getNoRole;
|
||||
|
||||
|
||||
})(window);
|
||||
|
||||
@ -37,6 +37,7 @@
|
||||
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;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
@ -120,5 +121,26 @@
|
||||
}
|
||||
);
|
||||
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;
|
||||
|
||||
})(window);
|
||||
|
||||
Reference in New Issue
Block a user