Compare commits

...

31 Commits

Author SHA1 Message Date
3b5eaa7ad6 standardize comments in English 2026-03-30 05:04:04 +00:00
6a2030ef4a Merge branch hotfix/v9.3.1 into develop 2026-03-12 15:26:15 +00:00
a3e6482ff3 Merge branch release/v9.3.0 into develop 2026-02-25 15:15:38 +00:00
c27936c5c8 Merge branch release/v9.3.0 into master 2026-02-24 14:13:10 +00:00
7178e3065c [forms][js-api] Rework main class Api to the new scheme 2026-02-17 19:24:48 +03:00
3fb5b65794 [form] Add method to check if the form is signed 2026-02-02 18:52:59 +03:00
c9279dcdd8 Merge branch hotfix/v9.2.1 into release/v9.3.0 2025-12-17 15:33:39 +00:00
cd54c2bdff Merge branch hotfix/v9.2.1 into develop 2025-12-17 15:33:38 +00:00
e53ddb9003 Fix bug #78104 2025-12-05 15:28:14 +03:00
29c2f86cb8 Merge branch release/v9.2.0 into master 2025-12-01 07:30:49 +00:00
d1f67dce0d [de] Remove unnecessary onEndAction 2025-11-27 15:10:26 +03:00
f2901a3dc7 Fix bug #77996
Don't allow to insert other forms inside a fixed labeled checkbox
2025-11-25 21:51:40 +03:00
4678111e19 For bug #78163
Check symbols before specifying the default form value
2025-11-18 12:16:31 +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
b8170a57d7 Merge branch hotfix/v9.0.2 into develop 2025-07-07 14:43:02 +00: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
12 changed files with 197 additions and 57 deletions

49
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;
@ -327,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();
@ -344,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;
@ -464,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)
{
@ -491,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)
{
@ -528,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();
@ -621,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);
@ -669,6 +682,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;
@ -723,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;

View File

@ -53,7 +53,7 @@
* @class
* @name Api
*/
var Api = window["Asc"]["asc_docs_api"] || window["Asc"]["spreadsheet_api"];
var Api = AscBuilder.Word.Api;
/**
* Common form properties.
@ -189,7 +189,7 @@
* @returns {ApiTextForm}
* @see office-js-api/Examples/Forms/Api/Methods/CreateTextForm.js
*/
Api.prototype.CreateTextForm = function(formPr)
Api.CreateTextForm = function(formPr)
{
return executeNoFormLockCheck(function()
{
@ -210,7 +210,7 @@
* @returns {ApiCheckBoxForm}
* @see office-js-api/Examples/Forms/Api/Methods/CreateCheckBoxForm.js
*/
Api.prototype.CreateCheckBoxForm = function(formPr)
Api.CreateCheckBoxForm = function(formPr)
{
return executeNoFormLockCheck(function()
{
@ -285,7 +285,7 @@
* @returns {ApiComboBoxForm}
* @see office-js-api/Examples/Forms/Api/Methods/CreateComboBoxForm.js
*/
Api.prototype.CreateComboBoxForm = function(formPr)
Api.CreateComboBoxForm = function(formPr)
{
return executeNoFormLockCheck(function()
{
@ -355,7 +355,7 @@
* @returns {ApiPictureForm}
* @see office-js-api/Examples/Forms/Api/Methods/CreatePictureForm.js
*/
Api.prototype.CreatePictureForm = function(formPr)
Api.CreatePictureForm = function(formPr)
{
return executeNoFormLockCheck(function()
{
@ -407,7 +407,7 @@
* @returns {ApiDateForm}
* @see office-js-api/Examples/Forms/Api/Methods/CreateDateForm.js
*/
Api.prototype.CreateDateForm = function(formPr)
Api.CreateDateForm = function(formPr)
{
return executeNoFormLockCheck(function()
{
@ -428,7 +428,7 @@
* @returns {ApiComplexForm}
* @see office-js-api/Examples/Forms/Api/Methods/CreateComplexForm.js
*/
Api.prototype.CreateComplexForm = function(formPr)
Api.CreateComplexForm = function(formPr)
{
return executeNoFormLockCheck(function()
{
@ -800,12 +800,12 @@
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 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["CreateComboBoxForm"] = Api.prototype.CreateComboBoxForm;
Api.prototype["CreateComplexForm"] = Api.prototype.CreateComplexForm;
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;

View File

@ -168,6 +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);

View File

@ -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);
@ -175,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)
@ -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;
@ -497,7 +528,7 @@
let user = fieldGroup.getFirstUser();
if (!user)
{
// TODO: Разобраться с такими группами
// TODO: Handle such groups
}
let haveRole = false;
@ -512,7 +543,7 @@
if (haveRole)
{
// TODO: Разобраться с такими ситуациями
// TODO: Handle such situations
}
let weight = fieldGroup.getWeight();
@ -538,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);
@ -549,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);
@ -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
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -679,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-----------------------------------------------------

View File

@ -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
@ -107,7 +107,7 @@
};
/**
* Класс для задания настроек роли из интерфейса
* Class for setting role configuration from the interface
* @constructor
*/
function CRoleSettings()

View File

@ -37,7 +37,7 @@
/**
* Базовый класс для всех форматных классов в oform
* Base class for all format classes in oform
* @constructor
*/
function CBaseFormatObject()

View File

@ -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);
@ -597,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());
@ -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

@ -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;
@ -151,7 +155,7 @@
};
CUserMaster.prototype.initDefaultUser = function()
{
// TODO: Возможно стоит придумать уникальный id общий для дефолтовой роли
// TODO: Consider creating a unique id common for the default role
this.setRole("Anyone");
this.setColor(255, 239, 191);
};

View File

@ -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}
*/

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

View File

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

View File

@ -35,7 +35,7 @@
(function(window)
{
/**
* Класс для работы с форматом oform в xml
* Class for working with the oform format in xml
* @constructor
* @extends {AscCommon.openXml.OpenXmlPackage}
*/