Compare commits

...

13 Commits

Author SHA1 Message Date
1970ce1d9b Merge branch release/v7.4.0 into master 2023-06-13 11:23:34 +00:00
5fa0d5013e Merge remote-tracking branch 'remotes/origin/hotfix/v7.3.3' into release/v7.4.0 2023-05-17 19:55:04 +05:00
93f3d5c0c9 Fix bug #62455
Fix issue with minimization
2023-05-04 13:56:34 +03:00
390d472b51 Fix bug #62375
Fix positioning of the added fixed form
2023-05-02 16:30:03 +03:00
e8037d127e Merge pull request #37 from ONLYOFFICE/feature/spi-docs
Api documentation
2023-04-28 18:48:27 +05:00
25754f8445 updated api docs 2023-04-28 16:42:25 +03:00
03adca5bad [de] Fix specifying a default value for date time picker 2023-04-24 15:10:07 +05:00
6879b71ab1 Fix bug #62162
Select fixed form as the shape when adding it to the document
2023-04-19 16:26:53 +05:00
46411f2cb4 For bug #62024
Forbid to add fixed forms inside a shape
2023-04-19 02:52:49 +05:00
a6cb05bdf2 [de][bu] Fix export 2023-04-13 15:16:42 +05:00
e4d122a18e [bu][de] Implement a method for inserting form overt text 2023-04-12 16:05:53 +03:00
8a0aa0fdb4 Merge branch hotfix/v7.3.3 into master 2023-03-15 10:51:27 +00:00
b4073edd9a [oform] Fix problem with lock check when setting form value 2023-02-08 23:52:26 +05:00
2 changed files with 128 additions and 37 deletions

47
api.js
View File

@ -488,6 +488,11 @@ window["AscOForm"] = window.AscOForm = AscOForm;
|| !oForm.IsForm())
return;
// При проверке лока внутри параграфа мы ориентируемся на выделение внутри этого параграфа
// поэтому нужно выделить форму
let state = oLogicDocument.SaveDocumentState();
oForm.SelectContentControl();
let oParagraph = oForm.GetParagraph();
oForm.SkipFillingFormModeCheck(true);
@ -499,10 +504,12 @@ window["AscOForm"] = window.AscOForm = AscOForm;
CheckType : AscCommon.changestype_Paragraph_Content
}, true, oLogicDocument.IsFillingFormMode()))
{
oLogicDocument.LoadDocumentState(state);
oForm.SkipFillingFormModeCheck(false);
oForm.SkipSpecialContentControlLock(false);
return;
}
oLogicDocument.LoadDocumentState(state);
oForm.SkipFillingFormModeCheck(false);
oForm.SkipSpecialContentControlLock(false);
@ -513,10 +520,10 @@ window["AscOForm"] = window.AscOForm = AscOForm;
{
isClear = true;
}
else if (oForm.IsTextForm() || oForm.IsComboBox() || oForm.IsDatePicker())
else if (oForm.IsTextForm() || oForm.IsComboBox())
{
let sValue = AscBuilder.GetStringParameter(value, "");
if (!value)
if (!sValue)
isClear = true;
else
oForm.SetInnerText(sValue);
@ -566,6 +573,19 @@ window["AscOForm"] = window.AscOForm = AscOForm;
isClear = true;
}
}
else if (oForm.IsDatePicker())
{
let sValue = AscBuilder.GetStringParameter(value, "");
if (!sValue)
isClear = true;
else
oForm.SetInnerText(sValue);
// TODO: Надо FullDate попытаться выставить по заданному значение. Сейчас мы всегда сбрасываем на текущую дату
let datePickerPr = oForm.GetDatePickerPr().Copy();
datePickerPr.SetFullDate(null);
oForm.SetDatePickerPr(datePickerPr);
}
if (isClear)
oForm.ClearContentControlExt();
@ -626,17 +646,34 @@ window["AscOForm"] = window.AscOForm = AscOForm;
form.private_FillPlaceholderContent();
}
if (form.IsMainForm() && formPr.GetFixed())
let paragraph = form.GetParagraph();
if (form.IsMainForm() && formPr.GetFixed() && (!paragraph || !paragraph.GetParentShape()))
{
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);
drawing.Set_Props(drawingPr);
form.MoveCursorToContentControl(false);
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();
}
}
}

View File

@ -38,6 +38,7 @@
// Import
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const AscBuilder = window["AscBuilder"];
const ApiDocument = AscBuilder.ApiDocument;
const GetStringParameter = AscBuilder.GetStringParameter;
const GetBoolParameter = AscBuilder.GetBoolParameter;
const GetNumberParameter = AscBuilder.GetNumberParameter;
@ -75,6 +76,19 @@
* Text field properties.
* @typedef {FormPrBase | TextFormPrBase} TextFormPr
*/
/**
* Form insertion specific properties.
* @typedef {Object} FormInsertPr
* @property {boolean} [placeholderFromSelection=false] - Specifies if the currently selected text should be saved as a placeholder of the inserted form.
* @property {boolean} [keepSelectedTextInForm=true] - Specifies if the currently selected text should be saved as the content of the inserted form.
*/
/**
* Properties for inserting a text field.
* @typedef {FormPrBase | TextFormPrBase | FormInsertPr} TextFormInsertPr
*/
/**
* Specific checkbox / radio button properties.
@ -146,18 +160,10 @@
if (!oFormPr)
oFormPr = {};
let oCC = CreateCommonForm(oFormPr);
let oPr = new AscCommon.CSdtTextFormPr();
oPr.SetComb(GetBoolParameter(oFormPr["comb"], false));
oPr.SetMaxCharacters(GetNumberParameter(oFormPr["maxCharacters"], -1));
oPr.SetMultiLine(GetBoolParameter(oFormPr["multiLine"], false));
oPr.SetAutoFit(GetBoolParameter(oFormPr["autoFit"], false));
oPr.SetWidth((GetNumberParameter(oFormPr["cellWidth"], 0) * 72 * 20 / 25.4) | 0);
oCC.ApplyTextFormPr(oPr);
CheckFormKey(oCC);
return new AscBuilder.ApiTextForm(oCC);
let form = CreateCommonForm(oFormPr);
ApplyTextFormPr(form, oFormPr);
CheckFormKey(form);
return new AscBuilder.ApiTextForm(form);
};
/**
* Creates a checkbox / radio button with the specified checkbox / radio button properties.
@ -333,32 +339,78 @@
CheckFormKey(oCC);
return new AscBuilder.ApiPictureForm(oCC);
};
/**
* 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.
* @returns {ApiTextForm}
*/
ApiDocument.prototype.InsertTextForm = function(oFormPr)
{
if (!oFormPr)
oFormPr = {};
let logicDocument = this.Document;
let placeholder = GetStringParameter(oFormPr["placeholder"], undefined);
if (GetBoolParameter(oFormPr["placeholderFromSelection"], false))
placeholder = logicDocument.GetSelectedText();
if (!GetBoolParameter(oFormPr["keepSelectedTextInForm"], true))
logicDocument.RemoveBeforePaste();
let contentControl = logicDocument.AddContentControl(c_oAscSdtLevelType.Inline);
if (!contentControl)
return null;
ApplyCommonFormPr(contentControl, oFormPr);
SetFormPlaceholder(contentControl, placeholder);
ApplyTextFormPr(contentControl, oFormPr, true);
CheckFormKey(contentControl);
return new AscBuilder.ApiTextForm(contentControl);
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Private area
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function CreateCommonForm(oFormPr)
{
if (!oFormPr)
oFormPr = {};
let contentControl = new AscCommonWord.CInlineLevelSdt();
var oTempFormPr = new AscCommon.CSdtFormPr();
oTempFormPr.SetHelpText(GetStringParameter(oFormPr["tip"], undefined));
oTempFormPr.SetRequired(GetBoolParameter(oFormPr["required"], false));
oTempFormPr.SetKey(GetStringParameter(oFormPr["key"], undefined));
var oCC = new AscCommonWord.CInlineLevelSdt();
let sPlaceHolder = GetStringParameter(oFormPr["placeholder"], undefined);
if (sPlaceHolder)
oCC.SetPlaceholderText(sPlaceHolder);
ApplyCommonFormPr(contentControl, oFormPr);
let placeholder = oFormPr ? GetStringParameter(oFormPr["placeholder"], undefined) : undefined;
SetFormPlaceholder(contentControl, placeholder);
contentControl.ReplaceContentWithPlaceHolder(false);
contentControl.UpdatePlaceHolderTextPrForForm();
return contentControl;
}
function SetFormPlaceholder(form, text)
{
if (text)
form.SetPlaceholderText(text);
else
oCC.SetPlaceholder(c_oAscDefaultPlaceholderName.Text);
oCC.ReplaceContentWithPlaceHolder(false);
oCC.SetFormPr(oTempFormPr);
oCC.UpdatePlaceHolderTextPrForForm();
return oCC;
form.SetPlaceholder(c_oAscDefaultPlaceholderName.Text);
}
function ApplyCommonFormPr(form, formPr)
{
if (!formPr)
formPr = {};
let sdtFormPr = new AscCommon.CSdtFormPr();
sdtFormPr.SetHelpText(GetStringParameter(formPr["tip"], undefined));
sdtFormPr.SetRequired(GetBoolParameter(formPr["required"], false));
sdtFormPr.SetKey(GetStringParameter(formPr["key"], undefined));
form.SetFormPr(sdtFormPr);
}
function ApplyTextFormPr(form, formPr, keepContent)
{
let textFormPr = new AscCommon.CSdtTextFormPr();
textFormPr.SetComb(GetBoolParameter(formPr["comb"], false));
textFormPr.SetMaxCharacters(GetNumberParameter(formPr["maxCharacters"], -1));
textFormPr.SetMultiLine(GetBoolParameter(formPr["multiLine"], false));
textFormPr.SetAutoFit(GetBoolParameter(formPr["autoFit"], false));
textFormPr.SetWidth((GetNumberParameter(formPr["cellWidth"], 0) * 72 * 20 / 25.4) | 0);
form.ApplyTextFormPr(textFormPr, keepContent);
}
function CheckFormKey(form)
{
@ -387,6 +439,8 @@
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.prototype["CreateComboBoxForm"] = Api.prototype.CreateComboBoxForm;
ApiDocument.prototype["InsertTextForm"] = ApiDocument.prototype.InsertTextForm;
}(window, null));