mirror of
https://github.com/ONLYOFFICE/sdkjs-forms.git
synced 2026-03-31 10:23:35 +08:00
Compare commits
182 Commits
feature/co
...
v8.3.2.29
| Author | SHA1 | Date | |
|---|---|---|---|
| 7505fadefe | |||
| 439c9b3085 | |||
| 4c765147b0 | |||
| 110a52a0b9 | |||
| ec29fcbcbc | |||
| a60477955e | |||
| 097ac2ecbd | |||
| 46d2220494 | |||
| bb4bd422b3 | |||
| 26fd5ac0e1 | |||
| c74119b351 | |||
| 87e1f3d133 | |||
| c7f6274837 | |||
| 7281602fe3 | |||
| c85087988d | |||
| b7c3f2a81e | |||
| e92af5d616 | |||
| d762919e17 | |||
| 1e4faa1c44 | |||
| f1ab48dbf6 | |||
| df86438f34 | |||
| 0ce75cd435 | |||
| 28117047a2 | |||
| 21bc4c4a78 | |||
| d8149446fa | |||
| 4e3a6d5fd0 | |||
| ed08a8154d | |||
| b7159ab013 | |||
| fed8a12cc8 | |||
| e4b1254e7b | |||
| 24fbc65a0f | |||
| 847e9fdb73 | |||
| f5156538c1 | |||
| 456057e3ae | |||
| f28ed90880 | |||
| 4352c15da9 | |||
| 139f675db2 | |||
| d47f414c3d | |||
| aead383937 | |||
| 4ce68a3c8d | |||
| f1fa43375c | |||
| 253d708535 | |||
| d16707c294 | |||
| 14d902e747 | |||
| df76c99f38 | |||
| a84ee00ec4 | |||
| 2b53655564 | |||
| 1970ce1d9b | |||
| e2b34b409b | |||
| 5fa0d5013e | |||
| b0659c485d | |||
| 959046f872 | |||
| 93f3d5c0c9 | |||
| 390d472b51 | |||
| e8037d127e | |||
| 25754f8445 | |||
| 03adca5bad | |||
| 6879b71ab1 | |||
| 46411f2cb4 | |||
| a6cb05bdf2 | |||
| e4d122a18e | |||
| 48362b45df | |||
| 0c2566bd79 | |||
| 0b9b27b808 | |||
| 7a75794385 | |||
| 070bccf724 | |||
| d6ee4c9c7f | |||
| 363d027d8e | |||
| 9855c96dd0 | |||
| 60865166aa | |||
| 7c0311808c | |||
| 7f2797afac | |||
| 8a0aa0fdb4 | |||
| 6fec31b93c | |||
| a7a1412e69 | |||
| 8cc0eba409 | |||
| b4073edd9a | |||
| c1c4959eb0 | |||
| 9180d8d1e6 | |||
| b49b8e56f0 | |||
| b205db2720 | |||
| 1c7cd19c47 | |||
| da20bb573a | |||
| d8628c74c6 | |||
| 0ae117891d | |||
| 77cad58384 | |||
| a908a16e95 | |||
| 72139c5780 | |||
| 366f847ba3 | |||
| 6171e936a3 | |||
| 13dd617208 | |||
| c1d9ee4b63 | |||
| 3d5237c5ed | |||
| f7e84e5912 | |||
| 61d936dcbb | |||
| 31fb7a7fa6 | |||
| 11aca8000d | |||
| 1c2bd5bd6e | |||
| 22b94b07f8 | |||
| 0384213a2d | |||
| dbd10ccedc | |||
| b782a77389 | |||
| ef13bff264 | |||
| d223836a85 | |||
| 902e1f2373 | |||
| 0f7358f40d | |||
| 2f4100e62d | |||
| 50952a7b75 | |||
| 923eed266f | |||
| e412f3095d | |||
| 0720f6cce0 | |||
| 245697c157 | |||
| c8b1fe0448 | |||
| 87b2dc1d07 | |||
| 01c1afc35e | |||
| ac50783d02 | |||
| ea7ea90201 | |||
| 8008816b09 | |||
| 5cc816dc6c | |||
| a4d2fbf6f7 | |||
| 597d63d4ce | |||
| e1e6f6fba2 | |||
| c86bc764d4 | |||
| 8dd0a66829 | |||
| 2f951ed20a | |||
| 9c11211893 | |||
| 82cd96f57e | |||
| 791e840bec | |||
| c82887316b | |||
| abde4ac3f9 | |||
| f0ea4cfe24 | |||
| 0be878b888 | |||
| c903b45178 | |||
| 2994a431a1 | |||
| e73020600e | |||
| def429f8b4 | |||
| fcb0d9ba55 | |||
| f6c07aa139 | |||
| b2c1f43e3b | |||
| f88a486b13 | |||
| 89e2cb15f9 | |||
| 6cfc7ab50f | |||
| 81c7af9ee7 | |||
| 614ae67fb6 | |||
| 14bb7c4042 | |||
| a75c5124c0 | |||
| 59b19a200f | |||
| 5a9821cc95 | |||
| bee49e0d83 | |||
| 6d21c5ab0b | |||
| 8633fc8826 | |||
| 24c7a4364c | |||
| 80589a5077 | |||
| c6e87d17d5 | |||
| f602a1303d | |||
| 619204041e | |||
| 212e00fa1a | |||
| dae1b6f619 | |||
| b62c32f513 | |||
| f34ccbe982 | |||
| 0141064554 | |||
| a188b1b65d | |||
| 43a57dec6d | |||
| e10929d4ff | |||
| ea98b4eecb | |||
| c54c7e5d2d | |||
| 522b6c599c | |||
| 4458d155aa | |||
| dfce2a8eb4 | |||
| 8a24199ebb | |||
| a8dd2d819c | |||
| a0d4242dd5 | |||
| 314bfc08f7 | |||
| 7fa69ca7a1 | |||
| 164ef8153e | |||
| 4e24e0cd73 | |||
| a7a38e5910 | |||
| c3a09d65fc | |||
| c2f4cc8a47 | |||
| 7b1dfa675d | |||
| 3ee8a16410 | |||
| a526f92f65 |
321
api.js
321
api.js
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2019
|
||||
* (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)
|
||||
@ -12,7 +12,7 @@
|
||||
* 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-12 Ernesta Birznieka-Upisha
|
||||
* 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
|
||||
@ -30,6 +30,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
var AscOForm = {};
|
||||
window["AscOForm"] = window.AscOForm = AscOForm;
|
||||
|
||||
(function(window, document) {
|
||||
window['Asc']['Addons'] = window['Asc']['Addons'] || {};
|
||||
@ -40,6 +42,8 @@
|
||||
if (!oLogicDocument)
|
||||
return;
|
||||
|
||||
CheckCurrentSelection(oLogicDocument);
|
||||
|
||||
if (oPr && oFormPr)
|
||||
{
|
||||
if (oPr.GroupKey)
|
||||
@ -57,6 +61,7 @@
|
||||
oPr.UncheckedFont = "Segoe UI Symbol";
|
||||
}
|
||||
|
||||
|
||||
var nCheckedSymbol = oPr && oPr.CheckedSymbol ? oPr.CheckedSymbol : Asc.c_oAscSdtCheckBoxDefaults.CheckedSymbol;
|
||||
var nUncheckedSymbol = oPr && oPr.UncheckedSymbol ? oPr.UncheckedSymbol : Asc.c_oAscSdtCheckBoxDefaults.UncheckedSymbol;
|
||||
var sCheckedFont = oPr && oPr.CheckedFont ? oPr.CheckedFont : Asc.c_oAscSdtCheckBoxDefaults.CheckedFont;
|
||||
@ -82,9 +87,12 @@
|
||||
|
||||
if (oFormPr)
|
||||
{
|
||||
oCC.SetFormPr(oFormPr);
|
||||
oCC.UpdatePlaceHolderTextPrForForm();
|
||||
private_CheckFormKey(oCC, oLogicDocument);
|
||||
private_ApplyFormPr(oCC, oFormPr, oLogicDocument);
|
||||
|
||||
if (oPr && oPr.GroupKey)
|
||||
private_CheckRadioButtonChoice(oCC, oLogicDocument, oPr.GroupKey);
|
||||
else
|
||||
private_CheckFormKey(oCC, oLogicDocument);
|
||||
}
|
||||
|
||||
if (oCommonPr)
|
||||
@ -163,27 +171,44 @@
|
||||
private_PerformAddCheckBox();
|
||||
}
|
||||
};
|
||||
window['Asc']['asc_docs_api'].prototype['asc_AddContentControlPicture'] = window['Asc']['asc_docs_api'].prototype.asc_AddContentControlPicture = function(oFormPr, oCommonPr)
|
||||
window['Asc']['asc_docs_api'].prototype['asc_AddContentControlPicture'] = window['Asc']['asc_docs_api'].prototype.asc_AddContentControlPicture = function(oFormPr, oCommonPr, isSignature)
|
||||
{
|
||||
var oLogicDocument = this.private_GetLogicDocument();
|
||||
if (!oLogicDocument)
|
||||
return;
|
||||
|
||||
CheckCurrentSelection(oLogicDocument);
|
||||
|
||||
oLogicDocument.RemoveTextSelection();
|
||||
if (!oLogicDocument.IsSelectionLocked(AscCommon.changestype_Paragraph_Content))
|
||||
{
|
||||
oLogicDocument.StartAction(AscDFH.historydescription_Document_AddContentControlPicture);
|
||||
|
||||
var oCC = oLogicDocument.AddContentControlPicture();
|
||||
// 150x32pt for Signature
|
||||
let w = isSignature ? 150 / 72 * 25.4 : undefined;
|
||||
let h = isSignature ? 32 / 72 * 25.4 : undefined;
|
||||
|
||||
var oCC = oLogicDocument.AddContentControlPicture(w, h);
|
||||
let oFormParaDrawing = null;
|
||||
if (oCC && oFormPr)
|
||||
{
|
||||
oCC.SetFormPr(oFormPr);
|
||||
oCC.UpdatePlaceHolderTextPrForForm();
|
||||
let pictPr = new AscCommon.CSdtPictureFormPr();
|
||||
if (isSignature)
|
||||
{
|
||||
pictPr.SetSignature(true);
|
||||
let glossary = oLogicDocument.GetGlossaryDocument();
|
||||
if (glossary)
|
||||
oCC.SetPlaceholder(glossary.GetDefaultPlaceholderSignatureOformDocPartId());
|
||||
}
|
||||
|
||||
oCC.SetPictureFormPr(pictPr);
|
||||
|
||||
private_CheckFormKey(oCC, oLogicDocument);
|
||||
|
||||
oLogicDocument.Recalculate(true);
|
||||
oFormParaDrawing = oCC.ConvertFormToFixed();
|
||||
oCC.SetPictureFormPr(new AscCommon.CSdtPictureFormPr());
|
||||
|
||||
var aDrawings = oCC.GetAllDrawingObjects();
|
||||
for(var nDrawing = 0; nDrawing < aDrawings.length; ++nDrawing)
|
||||
{
|
||||
@ -235,6 +260,11 @@
|
||||
oLogicDocument.Recalculate(true);
|
||||
oCC.UpdatePictureFormLayout();
|
||||
}
|
||||
else
|
||||
{
|
||||
oCC.ReplaceContentWithPlaceHolder();
|
||||
oCC.ApplyPicturePr(true);
|
||||
}
|
||||
}
|
||||
|
||||
if (oCC && oCommonPr)
|
||||
@ -253,11 +283,17 @@
|
||||
oLogicDocument.FinalizeAction();
|
||||
}
|
||||
};
|
||||
window['Asc']['asc_docs_api'].prototype['asc_AddContentControlSignature'] = window['Asc']['asc_docs_api'].prototype.asc_AddContentControlSignature = function(oFormPr, oCommonPr)
|
||||
{
|
||||
return this.asc_AddContentControlPicture(oFormPr, oCommonPr, true);
|
||||
};
|
||||
window['Asc']['asc_docs_api'].prototype['asc_AddContentControlList'] = window['Asc']['asc_docs_api'].prototype.asc_AddContentControlList = function(isComboBox, oPr, oFormPr, oCommonPr)
|
||||
{
|
||||
var oLogicDocument = this.private_GetLogicDocument();
|
||||
if (!oLogicDocument)
|
||||
return;
|
||||
|
||||
CheckCurrentSelection(oLogicDocument);
|
||||
|
||||
oLogicDocument.RemoveTextSelection();
|
||||
if (!oLogicDocument.IsSelectionLocked(AscCommon.changestype_Paragraph_Content))
|
||||
@ -272,7 +308,7 @@
|
||||
|
||||
if (oCC && oFormPr)
|
||||
{
|
||||
oCC.SetFormPr(oFormPr);
|
||||
private_ApplyFormPr(oCC, oFormPr, oLogicDocument);
|
||||
oCC.UpdatePlaceHolderTextPrForForm();
|
||||
private_CheckFormKey(oCC, oLogicDocument);
|
||||
}
|
||||
@ -291,15 +327,42 @@
|
||||
var oLogicDocument = this.private_GetLogicDocument();
|
||||
if (!oLogicDocument)
|
||||
return;
|
||||
|
||||
CheckCurrentSelection(oLogicDocument);
|
||||
|
||||
oLogicDocument.RemoveTextSelection();
|
||||
if (!oLogicDocument.IsSelectionLocked(AscCommon.changestype_Paragraph_Content))
|
||||
{
|
||||
oLogicDocument.StartAction(AscDFH.historydescription_Document_AddContentControlList);
|
||||
var oCC = oLogicDocument.AddContentControlDatePicker(oPr, oCommonPr);
|
||||
|
||||
let dateTimePr = null;
|
||||
let formPr = null;
|
||||
let ccPr = null;
|
||||
|
||||
// Пока для совместимости со старым форматом оставляем, чтобы настройки могли приходить по старому (oPr, oCommonPr)
|
||||
// но в будущем надо перейти на новый вариант contentPr (AscCommon.CContentControlPr)
|
||||
if (oPr && (oPr instanceof AscCommon.CContentControlPr))
|
||||
{
|
||||
dateTimePr = oPr.DateTimePr;
|
||||
ccPr = oPr;
|
||||
formPr = oPr.FormPr;
|
||||
}
|
||||
else if (oPr && (oPr instanceof AscWord.CSdtDatePickerPr))
|
||||
{
|
||||
dateTimePr = oPr;
|
||||
ccPr = oCommonPr ? oCommonPr : null;
|
||||
}
|
||||
|
||||
var oCC = oLogicDocument.AddContentControlDatePicker(dateTimePr);
|
||||
|
||||
if (oCC && oCommonPr)
|
||||
oCC.SetContentControlPr(oCommonPr);
|
||||
if (oCC && ccPr)
|
||||
oCC.SetContentControlPr(ccPr);
|
||||
|
||||
if (oCC && formPr)
|
||||
{
|
||||
private_ApplyFormPr(oCC, formPr, oLogicDocument);
|
||||
private_CheckFormKey(oCC, oLogicDocument);
|
||||
}
|
||||
|
||||
oLogicDocument.Recalculate();
|
||||
oLogicDocument.UpdateInterface();
|
||||
@ -312,6 +375,8 @@
|
||||
var oLogicDocument = this.private_GetLogicDocument();
|
||||
if (!oLogicDocument)
|
||||
return;
|
||||
|
||||
CheckCurrentSelection(oLogicDocument);
|
||||
|
||||
let textFormPr = contentControlPr ? contentControlPr.TextFormPr : null;
|
||||
let formPr = contentControlPr ? contentControlPr.FormPr : null;
|
||||
@ -329,7 +394,7 @@
|
||||
|
||||
if (formPr)
|
||||
{
|
||||
oCC.SetFormPr(formPr);
|
||||
private_ApplyFormPr(oCC, formPr, oLogicDocument);
|
||||
oCC.UpdatePlaceHolderTextPrForForm();
|
||||
private_CheckFormKey(oCC, oLogicDocument);
|
||||
}
|
||||
@ -345,6 +410,8 @@
|
||||
let logicDocument = this.private_GetLogicDocument();
|
||||
if (!logicDocument)
|
||||
return;
|
||||
|
||||
CheckCurrentSelection(logicDocument, true);
|
||||
|
||||
function AddComplexForm()
|
||||
{
|
||||
@ -403,6 +470,161 @@
|
||||
|
||||
return AscWord.FormToJson(form);
|
||||
};
|
||||
window['Asc']['asc_docs_api'].prototype['asc_SetFormValue'] = window['Asc']['asc_docs_api'].prototype.asc_SetFormValue = function(value, formId)
|
||||
{
|
||||
let logicDocument = this.private_GetLogicDocument();
|
||||
if (!logicDocument)
|
||||
return;
|
||||
|
||||
let form = logicDocument.GetContentControl(formId);
|
||||
if (!form || !form.IsForm())
|
||||
return;
|
||||
|
||||
return this.private_SetFormValue(form.GetId(), value);
|
||||
};
|
||||
window['Asc']['asc_docs_api'].prototype['asc_GetFormValue'] = window['Asc']['asc_docs_api'].prototype.asc_GetFormValue = function(formId)
|
||||
{
|
||||
let logicDocument = this.private_GetLogicDocument();
|
||||
if (!logicDocument)
|
||||
return "";
|
||||
|
||||
let form = logicDocument.GetContentControl(formId);
|
||||
if (!form || !form.IsForm())
|
||||
return "";
|
||||
|
||||
if (form.IsPictureForm())
|
||||
return "";
|
||||
else if (form.IsCheckBox())
|
||||
return form.IsCheckBoxChecked();
|
||||
else if (form.IsPlaceHolder())
|
||||
return "";
|
||||
|
||||
return form.GetInnerText();
|
||||
};
|
||||
window['Asc']['asc_docs_api'].prototype.private_SetFormValue = function(internalId, value)
|
||||
{
|
||||
let oLogicDocument = this.private_GetLogicDocument();
|
||||
|
||||
if (!AscCommon.g_oTableId
|
||||
|| !oLogicDocument
|
||||
|| !oLogicDocument.IsDocumentEditor())
|
||||
return;
|
||||
|
||||
let oForm = AscCommon.g_oTableId.GetClass(internalId);
|
||||
|
||||
if (!oForm
|
||||
|| !(oForm instanceof AscWord.CInlineLevelSdt)
|
||||
|| !oForm.IsForm())
|
||||
return;
|
||||
|
||||
// При проверке лока внутри параграфа мы ориентируемся на выделение внутри этого параграфа
|
||||
// поэтому нужно выделить форму
|
||||
let state = oLogicDocument.SaveDocumentState();
|
||||
oForm.SelectContentControl();
|
||||
|
||||
let oParagraph = oForm.GetParagraph();
|
||||
|
||||
oForm.SkipFillingFormModeCheck(true);
|
||||
oForm.SkipSpecialContentControlLock(true);
|
||||
if (!oParagraph
|
||||
|| oLogicDocument.IsSelectionLocked(AscCommon.changestype_None, {
|
||||
Type : AscCommon.changestype_2_ElementsArray_and_Type,
|
||||
Elements : [oParagraph],
|
||||
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);
|
||||
|
||||
oLogicDocument.StartAction(AscDFH.historydescription_Document_FillFormInPlugin);
|
||||
|
||||
let isClear = false;
|
||||
if (null === value)
|
||||
{
|
||||
isClear = true;
|
||||
}
|
||||
else if (oForm.IsTextForm() || oForm.IsComboBox())
|
||||
{
|
||||
let sValue = AscBuilder.GetStringParameter(value, "");
|
||||
if (!sValue)
|
||||
isClear = true;
|
||||
else
|
||||
oForm.SetInnerText(sValue);
|
||||
}
|
||||
else if (oForm.IsDropDownList())
|
||||
{
|
||||
let sValue = AscBuilder.GetStringParameter(value, "");
|
||||
let oPr = oForm.GetDropDownListPr();
|
||||
let nIndex = oPr.FindByText(sValue);
|
||||
if (-1 !== nIndex)
|
||||
oForm.SelectListItem(oPr.GetItemValue(nIndex));
|
||||
else
|
||||
isClear = true;
|
||||
}
|
||||
else if (oForm.IsCheckBox())
|
||||
{
|
||||
let isChecked = value === "true" ? true : value === "false" ? false : AscBuilder.GetBoolParameter(value, null);
|
||||
if (null !== isChecked)
|
||||
oForm.SetCheckBoxChecked(isChecked);
|
||||
else
|
||||
isClear = true;
|
||||
}
|
||||
else if (oForm.IsPictureForm())
|
||||
{
|
||||
let sValue = AscBuilder.GetStringParameter(value, "");
|
||||
if (!sValue)
|
||||
return;
|
||||
|
||||
let oImg;
|
||||
let allDrawings = oForm.GetAllDrawingObjects();
|
||||
for (let nDrawing = 0; nDrawing < allDrawings.length; ++nDrawing)
|
||||
{
|
||||
if (allDrawings[nDrawing].IsPicture())
|
||||
{
|
||||
oImg = allDrawings[nDrawing].GraphicObj;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (oImg)
|
||||
{
|
||||
oForm.SetShowingPlcHdr(false);
|
||||
oImg.setBlipFill(AscFormat.CreateBlipFillRasterImageId(sValue));
|
||||
}
|
||||
else
|
||||
{
|
||||
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();
|
||||
|
||||
oLogicDocument.OnChangeForm(oForm);
|
||||
oLogicDocument.Recalculate();
|
||||
oLogicDocument.UpdateTracks();
|
||||
oLogicDocument.UpdateInterface();
|
||||
oLogicDocument.FinalizeAction();
|
||||
};
|
||||
|
||||
function private_CheckFormKey(form, logicDocument)
|
||||
{
|
||||
@ -424,5 +646,76 @@
|
||||
formPr.SetKey(key);
|
||||
form.SetFormPr(formPr);
|
||||
}
|
||||
function private_CheckRadioButtonChoice(form, logicDocument, groupKey)
|
||||
{
|
||||
if (!form || !form.IsForm() || !logicDocument)
|
||||
return;
|
||||
|
||||
let choice = form.GetFormKey();
|
||||
if (choice && "" !== choice.trim())
|
||||
return;
|
||||
|
||||
let formManager = logicDocument.GetFormsManager();
|
||||
let keyGenerator = formManager.GetKeyGenerator();
|
||||
|
||||
let formPr = form.GetFormPr().Copy();
|
||||
if (!formPr)
|
||||
return;
|
||||
|
||||
choice = keyGenerator.GetNewChoiceByGroupKey(groupKey);
|
||||
formPr.SetKey(choice);
|
||||
form.SetFormPr(formPr);
|
||||
}
|
||||
function private_ApplyFormPr(form, formPr, logicDocument)
|
||||
{
|
||||
if (!form || !formPr)
|
||||
return;
|
||||
|
||||
form.SetFormPr(formPr.Copy());
|
||||
|
||||
let docPartId = form.GetPlaceholder();
|
||||
let glossary = logicDocument.GetGlossaryDocument();
|
||||
if ((form.IsTextForm()
|
||||
|| form.IsDropDownList()
|
||||
|| form.IsComboBox()
|
||||
|| form.IsDatePicker())
|
||||
&&
|
||||
(docPartId === glossary.GetDefaultPlaceholderTextDocPartId()
|
||||
|| docPartId === glossary.GetDefaultPlaceholderListDocPartId()
|
||||
|| docPartId === glossary.GetDefaultPlaceholderDateTimeDocPartId()))
|
||||
{
|
||||
if (docPartId === glossary.GetDefaultPlaceholderTextDocPartId())
|
||||
form.SetPlaceholder(glossary.GetDefaultPlaceholderTextOformDocPartId());
|
||||
else if (docPartId === glossary.GetDefaultPlaceholderListDocPartId())
|
||||
form.SetPlaceholder(glossary.GetDefaultPlaceholderListOformDocPartId());
|
||||
else if (docPartId === glossary.GetDefaultPlaceholderDateTimeDocPartId())
|
||||
form.SetPlaceholder(glossary.GetDefaultPlaceholderDateTimeOformDocPartId());
|
||||
|
||||
if (form.IsPlaceHolder())
|
||||
form.private_FillPlaceholderContent();
|
||||
}
|
||||
|
||||
let paragraph = form.GetParagraph();
|
||||
if (form.IsMainForm() && formPr.GetFixed() && (!paragraph || !paragraph.GetParentShape()))
|
||||
{
|
||||
logicDocument.Recalculate(true);
|
||||
let drawing = form.ConvertFormToFixed();
|
||||
if (drawing)
|
||||
drawing.SelectAsDrawing();
|
||||
}
|
||||
}
|
||||
|
||||
function CheckCurrentSelection(logicDocument, isComplex)
|
||||
{
|
||||
let form = logicDocument.GetContentControl();
|
||||
|
||||
if (!form || !form.IsForm() || (form.IsComplexForm() && !isComplex))
|
||||
return;
|
||||
|
||||
if (isComplex)
|
||||
form = form.GetMainForm();
|
||||
|
||||
form.MoveCursorOutsideForm(false);
|
||||
}
|
||||
|
||||
})(window, window.document);
|
||||
|
||||
554
apiBuilder.js
554
apiBuilder.js
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2019
|
||||
* (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)
|
||||
@ -12,7 +12,7 @@
|
||||
* 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-12 Ernesta Birznieka-Upisha
|
||||
* 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
|
||||
@ -38,10 +38,13 @@
|
||||
// Import
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
const AscBuilder = window["AscBuilder"];
|
||||
const GetStringParameter = AscBuilder.GetStringParameter;
|
||||
const GetBoolParameter = AscBuilder.GetBoolParameter;
|
||||
const GetNumberParameter = AscBuilder.GetNumberParameter;
|
||||
const GetArrayParameter = AscBuilder.GetArrayParameter;
|
||||
|
||||
const ApiDocument = AscBuilder.ApiDocument;
|
||||
const GetStringParameter = AscBuilder.GetStringParameter;
|
||||
const GetBoolParameter = AscBuilder.GetBoolParameter;
|
||||
const GetNumberParameter = AscBuilder.GetNumberParameter;
|
||||
const GetArrayParameter = AscBuilder.GetArrayParameter;
|
||||
const executeNoFormLockCheck = AscBuilder.executeNoFormLockCheck;
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
@ -57,38 +60,59 @@
|
||||
* @typedef {Object} FormPrBase
|
||||
* @property {string} key - Form key.
|
||||
* @property {string} tip - Form tip text.
|
||||
* @property {string} tag - Form tag.
|
||||
* @property {boolean} required - Specifies if the form is required or not.
|
||||
* @property {string} placeholder - Form placeholder text.
|
||||
* @see office-js-api/Examples/Enumerations/FormPrBase.js
|
||||
*/
|
||||
|
||||
/**
|
||||
* Specific text form properties.
|
||||
* Specific text field properties.
|
||||
* @typedef {Object} TextFormPrBase
|
||||
* @property {boolean} comb - Specifies if the text form should be a comb of characters with the same cell width. The maximum number of characters must be set to a positive value.
|
||||
* @property {number} maxCharacters - The maximum number of characters in the text form.
|
||||
* @property {boolean} comb - Specifies if the text field should be a comb of characters with the same cell width. The maximum number of characters must be set to a positive value.
|
||||
* @property {number} maxCharacters - The maximum number of characters in the text field.
|
||||
* @property {number} cellWidth - The cell width for each character measured in millimeters. If this parameter is not specified or equal to 0 or less, then the width will be set automatically.
|
||||
* @property {boolean} multiLine - Specifies if the current fixed size text form is multiline or not.
|
||||
* @property {boolean} autoFit - Specifies if the text form content should be autofit, i.e. whether the font size adjusts to the size of the fixed size form.
|
||||
* @property {boolean} multiLine - Specifies if the current fixed size text field is multiline or not.
|
||||
* @property {boolean} autoFit - Specifies if the text field content should be autofit, i.e. whether the font size adjusts to the size of the fixed size form.
|
||||
* @see office-js-api/Examples/Enumerations/TextFormPrBase.js
|
||||
*/
|
||||
|
||||
/**
|
||||
* Text form properties.
|
||||
* Text field properties.
|
||||
* @typedef {FormPrBase | TextFormPrBase} TextFormPr
|
||||
* @see office-js-api/Examples/Enumerations/TextFormPr.js
|
||||
*/
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* @see office-js-api/Examples/Enumerations/FormInsertPr.js
|
||||
*/
|
||||
|
||||
/**
|
||||
* Properties for inserting a text field.
|
||||
* @typedef {FormPrBase | TextFormPrBase | FormInsertPr} TextFormInsertPr
|
||||
* @see office-js-api/Examples/Enumerations/TextFormInsertPr.js
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Specific checkbox properties.
|
||||
* Specific checkbox / radio button properties.
|
||||
* @typedef {Object} CheckBoxFormPrBase
|
||||
* @property {boolean} radio - Specifies if the current checkbox is a radio button. In this case, the key parameter is considered as an identifier for the group of radio buttons.
|
||||
* @see office-js-api/Examples/Enumerations/CheckBoxFormPrBase.js
|
||||
*/
|
||||
|
||||
/**
|
||||
* Checkbox form properties.
|
||||
* Checkbox / radio button properties.
|
||||
* @typedef {FormPrBase | CheckBoxFormPrBase} CheckBoxFormPr
|
||||
* @see office-js-api/Examples/Enumerations/CheckBoxFormPr.js
|
||||
*/
|
||||
|
||||
/**
|
||||
* Specific combo box properties.
|
||||
* Specific combo box / dropdown list properties.
|
||||
* @typedef {Object} ComboBoxFormPrBase
|
||||
* @property {boolean} editable - Specifies if the combo box text can be edited.
|
||||
* @property {boolean} autoFit - Specifies if the combo box form content should be autofit, i.e. whether the font size adjusts to the size of the fixed size form.
|
||||
@ -97,21 +121,25 @@
|
||||
* If the array consists of single strings, then the displayed value and its meaning are the same.
|
||||
* Example: ["First", ["Second", "2"], ["Third", "3"], "Fourth"].
|
||||
|
||||
* @see office-js-api/Examples/Enumerations/ComboBoxFormPrBase.js
|
||||
*/
|
||||
|
||||
/**
|
||||
* Combo box form properties.
|
||||
* Combo box / dropdown list properties.
|
||||
* @typedef {FormPrBase | ComboBoxFormPrBase} ComboBoxFormPr
|
||||
* @see office-js-api/Examples/Enumerations/ComboBoxFormPr.js
|
||||
*/
|
||||
|
||||
/**
|
||||
* The condition to scale an image in the picture form.
|
||||
* @typedef {"always" | "never" | "tooBig" | "tooSmall"} ScaleFlag
|
||||
* @see office-js-api/Examples/Enumerations/ScaleFlag.js
|
||||
*/
|
||||
|
||||
/**
|
||||
* Value from 0 to 100.
|
||||
* @typedef {number} percentage
|
||||
* @see office-js-api/Examples/Enumerations/percentage.js
|
||||
*/
|
||||
|
||||
/**
|
||||
@ -121,244 +149,370 @@
|
||||
* @property {boolean} lockAspectRatio - Specifies if the aspect ratio of the picture form is locked or not.
|
||||
* @property {boolean} respectBorders - Specifies if the form border width is respected or not when scaling the image.
|
||||
* @property {percentage} shiftX - Horizontal picture position inside the picture form measured in percent:
|
||||
* * <b>0</b> - the picture is placed on the left;
|
||||
* * <b>50</b> - the picture is placed in the center;
|
||||
* * <b>100</b> - the picture is placed on the right.
|
||||
* <b>0</b> - the picture is placed on the left;
|
||||
* <b>50</b> - the picture is placed in the center;
|
||||
* <b>100</b> - the picture is placed on the right.
|
||||
* @property {percentage} shiftY - Vertical picture position inside the picture form measured in percent:
|
||||
* * <b>0</b> - the picture is placed on top;
|
||||
* * <b>50</b> - the picture is placed in the center;
|
||||
* * <b>100</b> - the picture is placed on the bottom.
|
||||
* <b>0</b> - the picture is placed on top;
|
||||
* <b>50</b> - the picture is placed in the center;
|
||||
* <b>100</b> - the picture is placed on the bottom.
|
||||
* @see office-js-api/Examples/Enumerations/PictureFormPrBase.js
|
||||
*/
|
||||
|
||||
/**
|
||||
* Picture form properties.
|
||||
* @typedef {FormPrBase | PictureFormPrBase} PictureFormPr
|
||||
* @see office-js-api/Examples/Enumerations/PictureFormPr.js
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a text form with the specified text form properties.
|
||||
* Specific date form properties.
|
||||
* @typedef {Object} DateFormPrBase
|
||||
* @property {string} format - The date format, ex: mm.dd.yyyy
|
||||
* @property {string} lang - The date language. Possible value for this parameter is a language identifier as defined by
|
||||
* RFC 4646/BCP 47. Example: "en-CA".
|
||||
* @see office-js-api/Examples/Enumerations/DateFormPrBase.js
|
||||
*/
|
||||
|
||||
/**
|
||||
* Date form properties.
|
||||
* @typedef {FormPrBase | DateFormPrBase} DateFormPr
|
||||
* @see office-js-api/Examples/Enumerations/DateFormPr.js
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a text field with the specified text field properties.
|
||||
* @memberof Api
|
||||
* @param {TextFormPr} oFormPr - Text form properties.
|
||||
* @typeofeditors ["CDE", "CFE"]
|
||||
* @param {TextFormPr} oFormPr - Text field properties.
|
||||
* @returns {ApiTextForm}
|
||||
* @see office-js-api/Examples/Forms/Api/Methods/CreateTextForm.js
|
||||
*/
|
||||
Api.prototype.CreateTextForm = function(oFormPr)
|
||||
{
|
||||
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);
|
||||
return executeNoFormLockCheck(function()
|
||||
{
|
||||
if (!oFormPr)
|
||||
oFormPr = {};
|
||||
|
||||
let form = CreateCommonForm(oFormPr);
|
||||
ApplyTextFormPr(form, oFormPr);
|
||||
CheckFormKey(form);
|
||||
return new AscBuilder.ApiTextForm(form);
|
||||
}, this);
|
||||
};
|
||||
/**
|
||||
* Creates a checkbox/radio button form with the specified checkbox/radio button form properties.
|
||||
* Creates a checkbox / radio button with the specified checkbox / radio button properties.
|
||||
* @memberof Api
|
||||
* @param {CheckBoxFormPr} oFormPr - Checkbox/radio button form properties.
|
||||
* @typeofeditors ["CDE", "CFE"]
|
||||
* @param {CheckBoxFormPr} oFormPr - Checkbox / radio button properties.
|
||||
* @returns {ApiCheckBoxForm}
|
||||
* @see office-js-api/Examples/Forms/Api/Methods/CreateCheckBoxForm.js
|
||||
*/
|
||||
Api.prototype.CreateCheckBoxForm = function(oFormPr)
|
||||
{
|
||||
if (!oFormPr)
|
||||
oFormPr = {};
|
||||
|
||||
oFormPr["placeholder"] = undefined;
|
||||
|
||||
var oCC;
|
||||
var oCheckboxPr = new AscCommon.CSdtCheckBoxPr();
|
||||
if (GetBoolParameter(oFormPr["radio"], false))
|
||||
return executeNoFormLockCheck(function()
|
||||
{
|
||||
oCheckboxPr.CheckedSymbol = 0x25C9;
|
||||
oCheckboxPr.UncheckedSymbol = 0x25CB;
|
||||
oCheckboxPr.GroupKey = GetStringParameter(oFormPr["key"], "Group1");
|
||||
}
|
||||
else
|
||||
{
|
||||
oCheckboxPr.CheckedSymbol = 0x2611;
|
||||
oCheckboxPr.UncheckedSymbol = 0x2610;
|
||||
}
|
||||
|
||||
oCheckboxPr.CheckedFont = "Segoe UI Symbol";
|
||||
oCheckboxPr.UncheckedFont = "Segoe UI Symbol";
|
||||
|
||||
var nCheckedSymbol = oCheckboxPr && oCheckboxPr.CheckedSymbol ? oCheckboxPr.CheckedSymbol : Asc.c_oAscSdtCheckBoxDefaults.CheckedSymbol;
|
||||
var nUncheckedSymbol = oCheckboxPr && oCheckboxPr.UncheckedSymbol ? oCheckboxPr.UncheckedSymbol : Asc.c_oAscSdtCheckBoxDefaults.UncheckedSymbol;
|
||||
var sCheckedFont = oCheckboxPr && oCheckboxPr.CheckedFont ? oCheckboxPr.CheckedFont : Asc.c_oAscSdtCheckBoxDefaults.CheckedFont;
|
||||
var sUncheckedFont = oCheckboxPr && oCheckboxPr.UncheckedFont ? oCheckboxPr && oCheckboxPr.UncheckedFont : Asc.c_oAscSdtCheckBoxDefaults.UncheckedFont;
|
||||
|
||||
var isLoadFonts = false;
|
||||
if (!AscCommon.IsAscFontSupport(sCheckedFont, nCheckedSymbol))
|
||||
{
|
||||
isLoadFonts = true;
|
||||
AscFonts.FontPickerByCharacter.getFontBySymbol(nCheckedSymbol);
|
||||
}
|
||||
|
||||
if (!AscCommon.IsAscFontSupport(sUncheckedFont, nUncheckedSymbol))
|
||||
{
|
||||
isLoadFonts = true;
|
||||
AscFonts.FontPickerByCharacter.getFontBySymbol(nUncheckedSymbol);
|
||||
}
|
||||
|
||||
function private_PerformAddCheckBox()
|
||||
{
|
||||
oCC = CreateCommonForm(oFormPr);
|
||||
oCC.ApplyCheckBoxPr(oCheckboxPr);
|
||||
}
|
||||
|
||||
if (isLoadFonts)
|
||||
{
|
||||
var oFonts = {};
|
||||
oFonts[sCheckedFont] = true;
|
||||
oFonts[sUncheckedFont] = true;
|
||||
|
||||
AscCommon.Check_LoadingDataBeforePrepaste(this, oFonts, {}, private_PerformAddCheckBox);
|
||||
}
|
||||
else
|
||||
{
|
||||
private_PerformAddCheckBox();
|
||||
}
|
||||
|
||||
CheckFormKey(oCC);
|
||||
return new AscBuilder.ApiCheckBoxForm(oCC);
|
||||
if (!oFormPr)
|
||||
oFormPr = {};
|
||||
|
||||
oFormPr["placeholder"] = undefined;
|
||||
|
||||
var oCC;
|
||||
var oCheckboxPr = new AscCommon.CSdtCheckBoxPr();
|
||||
if (GetBoolParameter(oFormPr["radio"], false))
|
||||
{
|
||||
oCheckboxPr.CheckedSymbol = 0x25C9;
|
||||
oCheckboxPr.UncheckedSymbol = 0x25CB;
|
||||
oCheckboxPr.GroupKey = GetStringParameter(oFormPr["key"], "Group1");
|
||||
}
|
||||
else
|
||||
{
|
||||
oCheckboxPr.CheckedSymbol = 0x2611;
|
||||
oCheckboxPr.UncheckedSymbol = 0x2610;
|
||||
}
|
||||
|
||||
oCheckboxPr.CheckedFont = "Segoe UI Symbol";
|
||||
oCheckboxPr.UncheckedFont = "Segoe UI Symbol";
|
||||
|
||||
var nCheckedSymbol = oCheckboxPr && oCheckboxPr.CheckedSymbol ? oCheckboxPr.CheckedSymbol : Asc.c_oAscSdtCheckBoxDefaults.CheckedSymbol;
|
||||
var nUncheckedSymbol = oCheckboxPr && oCheckboxPr.UncheckedSymbol ? oCheckboxPr.UncheckedSymbol : Asc.c_oAscSdtCheckBoxDefaults.UncheckedSymbol;
|
||||
var sCheckedFont = oCheckboxPr && oCheckboxPr.CheckedFont ? oCheckboxPr.CheckedFont : Asc.c_oAscSdtCheckBoxDefaults.CheckedFont;
|
||||
var sUncheckedFont = oCheckboxPr && oCheckboxPr.UncheckedFont ? oCheckboxPr && oCheckboxPr.UncheckedFont : Asc.c_oAscSdtCheckBoxDefaults.UncheckedFont;
|
||||
|
||||
var isLoadFonts = false;
|
||||
if (!AscCommon.IsAscFontSupport(sCheckedFont, nCheckedSymbol))
|
||||
{
|
||||
isLoadFonts = true;
|
||||
AscFonts.FontPickerByCharacter.getFontBySymbol(nCheckedSymbol);
|
||||
}
|
||||
|
||||
if (!AscCommon.IsAscFontSupport(sUncheckedFont, nUncheckedSymbol))
|
||||
{
|
||||
isLoadFonts = true;
|
||||
AscFonts.FontPickerByCharacter.getFontBySymbol(nUncheckedSymbol);
|
||||
}
|
||||
|
||||
function private_PerformAddCheckBox()
|
||||
{
|
||||
oCC = CreateCommonForm(oFormPr);
|
||||
oCC.ApplyCheckBoxPr(oCheckboxPr);
|
||||
}
|
||||
|
||||
if (isLoadFonts)
|
||||
{
|
||||
var oFonts = {};
|
||||
oFonts[sCheckedFont] = true;
|
||||
oFonts[sUncheckedFont] = true;
|
||||
|
||||
AscCommon.Check_LoadingDataBeforePrepaste(this, oFonts, {}, private_PerformAddCheckBox);
|
||||
}
|
||||
else
|
||||
{
|
||||
private_PerformAddCheckBox();
|
||||
}
|
||||
|
||||
CheckFormKey(oCC);
|
||||
return new AscBuilder.ApiCheckBoxForm(oCC);
|
||||
}, this);
|
||||
};
|
||||
/**
|
||||
* Creates a combo box/dropdown form with the specified combo box/dropdown form properties.
|
||||
* Creates a combo box / dropdown list with the specified combo box / dropdown list properties.
|
||||
* @memberof Api
|
||||
* @param {ComboBoxFormPr} oFormPr - Combo box/dropdown form properties.
|
||||
* @typeofeditors ["CDE", "CFE"]
|
||||
* @param {ComboBoxFormPr} oFormPr - Combo box / dropdown list properties.
|
||||
* @returns {ApiComboBoxForm}
|
||||
* @see office-js-api/Examples/Forms/Api/Methods/CreateComboBoxForm.js
|
||||
*/
|
||||
Api.prototype.CreateComboBoxForm = function(oFormPr)
|
||||
{
|
||||
if (!oFormPr)
|
||||
oFormPr = {};
|
||||
|
||||
var oPr = new AscCommon.CSdtComboBoxPr();
|
||||
oPr.AddItem(AscCommon.translateManager.getValue("Choose an item"), "");
|
||||
|
||||
var oCC = CreateCommonForm(oFormPr);
|
||||
|
||||
let sPlaceholder = GetStringParameter(oFormPr["placeholder"], undefined);
|
||||
|
||||
let arrList = GetArrayParameter(oFormPr["items"], []);
|
||||
for (let nIndex = 0, nCount = arrList.length; nIndex < nCount; ++nIndex)
|
||||
return executeNoFormLockCheck(function()
|
||||
{
|
||||
let oItem = arrList[nIndex];
|
||||
|
||||
if (GetStringParameter(oItem, null))
|
||||
if (!oFormPr)
|
||||
oFormPr = {};
|
||||
|
||||
var oPr = new AscCommon.CSdtComboBoxPr();
|
||||
oPr.AddItem(AscCommon.translateManager.getValue("Choose an item"), "");
|
||||
|
||||
var oCC = CreateCommonForm(oFormPr);
|
||||
|
||||
let sPlaceholder = GetStringParameter(oFormPr["placeholder"], undefined);
|
||||
|
||||
let arrList = GetArrayParameter(oFormPr["items"], []);
|
||||
for (let nIndex = 0, nCount = arrList.length; nIndex < nCount; ++nIndex)
|
||||
{
|
||||
oPr.AddItem(oItem, oItem);
|
||||
let oItem = arrList[nIndex];
|
||||
|
||||
if (GetStringParameter(oItem, null))
|
||||
{
|
||||
oPr.AddItem(oItem, oItem);
|
||||
}
|
||||
else if (GetArrayParameter(oItem, null))
|
||||
{
|
||||
let sDisplay = GetStringParameter(oItem[0], null);
|
||||
let sValue = GetStringParameter(oItem[1], null);
|
||||
if (null !== sDisplay && null !== sValue)
|
||||
oPr.AddItem(sDisplay, sValue);
|
||||
}
|
||||
}
|
||||
else if (GetArrayParameter(oItem, null))
|
||||
oPr.SetAutoFit(GetBoolParameter(oFormPr["autoFit"], false));
|
||||
|
||||
if (!GetBoolParameter(oFormPr["editable"], false))
|
||||
{
|
||||
let sDisplay = GetStringParameter(oItem[0], null);
|
||||
let sValue = GetStringParameter(oItem[1], null);
|
||||
if (null !== sDisplay && null !== sValue)
|
||||
oPr.AddItem(sDisplay, sValue);
|
||||
}
|
||||
}
|
||||
oPr.SetAutoFit(GetBoolParameter(oFormPr["autoFit"], false));
|
||||
|
||||
if (!GetBoolParameter(oFormPr["editable"], false))
|
||||
{
|
||||
if (sPlaceholder)
|
||||
{
|
||||
oCC.ApplyDropDownListPr(oPr);
|
||||
if (sPlaceholder)
|
||||
{
|
||||
oCC.ApplyDropDownListPr(oPr);
|
||||
}
|
||||
else
|
||||
{
|
||||
oCC.SetDropDownListPr(oPr);
|
||||
oCC.SelectListItem();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
oCC.SetDropDownListPr(oPr);
|
||||
oCC.SelectListItem();
|
||||
if (sPlaceholder)
|
||||
{
|
||||
oCC.ApplyComboBoxPr(oPr);
|
||||
}
|
||||
else
|
||||
{
|
||||
oCC.SetComboBoxPr(oPr);
|
||||
oCC.SelectListItem();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sPlaceholder)
|
||||
{
|
||||
oCC.ApplyComboBoxPr(oPr);
|
||||
}
|
||||
else
|
||||
{
|
||||
oCC.SetComboBoxPr(oPr);
|
||||
oCC.SelectListItem();
|
||||
}
|
||||
}
|
||||
|
||||
CheckFormKey(oCC);
|
||||
return new AscBuilder.ApiComboBoxForm(oCC);
|
||||
|
||||
CheckFormKey(oCC);
|
||||
return new AscBuilder.ApiComboBoxForm(oCC);
|
||||
}, this);
|
||||
};
|
||||
/**
|
||||
* Creates a picture form with the specified picture form properties.
|
||||
* @memberof Api
|
||||
* @typeofeditors ["CDE", "CFE"]
|
||||
* @param {PictureFormPr} oFormPr - Picture form properties.
|
||||
* @returns {ApiPictureForm}
|
||||
* @see office-js-api/Examples/Forms/Api/Methods/CreatePictureForm.js
|
||||
*/
|
||||
Api.prototype.CreatePictureForm = function(oFormPr)
|
||||
{
|
||||
if (!oFormPr)
|
||||
oFormPr = {};
|
||||
|
||||
if (GetStringParameter("placeholder", null))
|
||||
oFormPr["placeholder"] = AscCommon.translateManager.getValue("Click to load image");
|
||||
|
||||
var oCC = CreateCommonForm(oFormPr);
|
||||
oCC.ApplyPicturePr(true);
|
||||
oCC.ConvertFormToFixed();
|
||||
|
||||
let oPr = new AscCommon.CSdtPictureFormPr();
|
||||
|
||||
let sScale = GetStringParameter(oFormPr["scaleFlag"], undefined);
|
||||
switch (sScale)
|
||||
return executeNoFormLockCheck(function()
|
||||
{
|
||||
case "always": oPr.SetScaleFlag(Asc.c_oAscPictureFormScaleFlag.Always); break;
|
||||
case "never": oPr.SetScaleFlag(Asc.c_oAscPictureFormScaleFlag.Never); break;
|
||||
case "tooBig": oPr.SetScaleFlag(Asc.c_oAscPictureFormScaleFlag.Bigger); break;
|
||||
case "tooSmall": oPr.SetScaleFlag(Asc.c_oAscPictureFormScaleFlag.Smaller); 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);
|
||||
|
||||
oCC.SetPictureFormPr(oPr);
|
||||
|
||||
CheckFormKey(oCC);
|
||||
return new AscBuilder.ApiPictureForm(oCC);
|
||||
if (!oFormPr)
|
||||
oFormPr = {};
|
||||
|
||||
if (GetStringParameter("placeholder", null))
|
||||
oFormPr["placeholder"] = AscCommon.translateManager.getValue("Click to load image");
|
||||
|
||||
var oCC = CreateCommonForm(oFormPr);
|
||||
oCC.ApplyPicturePr(true);
|
||||
oCC.ConvertFormToFixed();
|
||||
|
||||
let oPr = new AscCommon.CSdtPictureFormPr();
|
||||
|
||||
let sScale = GetStringParameter(oFormPr["scaleFlag"], undefined);
|
||||
switch (sScale)
|
||||
{
|
||||
case "always":
|
||||
oPr.SetScaleFlag(Asc.c_oAscPictureFormScaleFlag.Always);
|
||||
break;
|
||||
case "never":
|
||||
oPr.SetScaleFlag(Asc.c_oAscPictureFormScaleFlag.Never);
|
||||
break;
|
||||
case "tooBig":
|
||||
oPr.SetScaleFlag(Asc.c_oAscPictureFormScaleFlag.Bigger);
|
||||
break;
|
||||
case "tooSmall":
|
||||
oPr.SetScaleFlag(Asc.c_oAscPictureFormScaleFlag.Smaller);
|
||||
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);
|
||||
|
||||
oCC.SetPictureFormPr(oPr);
|
||||
|
||||
CheckFormKey(oCC);
|
||||
return new AscBuilder.ApiPictureForm(oCC);
|
||||
}, this);
|
||||
};
|
||||
/**
|
||||
* Creates a date form with the specified date form properties.
|
||||
* @memberof Api
|
||||
* @typeofeditors ["CDE", "CFE"]
|
||||
* @param {DateFormPr} oFormPr - Date form properties.
|
||||
* @returns {ApiDateForm}
|
||||
* @see office-js-api/Examples/Forms/Api/Methods/CreateDateForm.js
|
||||
*/
|
||||
Api.prototype.CreateDateForm = function(oFormPr)
|
||||
{
|
||||
return executeNoFormLockCheck(function()
|
||||
{
|
||||
if (!oFormPr)
|
||||
oFormPr = {};
|
||||
|
||||
let form = CreateCommonForm(oFormPr);
|
||||
ApplyDateFormPr(form, oFormPr);
|
||||
CheckFormKey(form);
|
||||
return new AscBuilder.ApiDateForm(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.
|
||||
* @returns {ApiTextForm}
|
||||
* @see office-js-api/Examples/Forms/ApiDocument/Methods/InsertTextForm.js
|
||||
*/
|
||||
ApiDocument.prototype.InsertTextForm = function(oFormPr)
|
||||
{
|
||||
return executeNoFormLockCheck(function()
|
||||
{
|
||||
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);
|
||||
}, this);
|
||||
};
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// 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);
|
||||
|
||||
let tag = oFormPr ? GetStringParameter(oFormPr["tag"], undefined) : undefined;
|
||||
if (tag)
|
||||
contentControl.SetTag(tag);
|
||||
|
||||
contentControl.ReplaceContentWithPlaceHolder(false);
|
||||
contentControl.UpdatePlaceHolderTextPrForForm();
|
||||
return contentControl;
|
||||
}
|
||||
function SetFormPlaceholder(form, text)
|
||||
{
|
||||
if (text)
|
||||
form.SetPlaceholderText(text);
|
||||
else
|
||||
oCC.SetPlaceholder(c_oAscDefaultPlaceholderName.Text);
|
||||
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 ApplyDateFormPr(form, formPr)
|
||||
{
|
||||
let datePickerPr = new AscCommon.CSdtDatePickerPr();
|
||||
|
||||
oCC.ReplaceContentWithPlaceHolder(false);
|
||||
oCC.SetFormPr(oTempFormPr);
|
||||
oCC.UpdatePlaceHolderTextPrForForm();
|
||||
var nLcid = Asc.g_oLcidNameToIdMap[formPr["lang"]];
|
||||
if (undefined == nLcid)
|
||||
nLcid = 1033;
|
||||
|
||||
return oCC;
|
||||
datePickerPr.SetDateFormat(GetStringParameter(formPr["format"], "mm/dd/yyyy"));
|
||||
datePickerPr.SetLangId(nLcid);
|
||||
|
||||
form.ApplyDatePickerPr(datePickerPr);
|
||||
}
|
||||
function CheckFormKey(form)
|
||||
{
|
||||
@ -386,7 +540,11 @@
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
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["CreateComboBoxForm"] = Api.prototype.CreateComboBoxForm;
|
||||
|
||||
ApiDocument.prototype["InsertTextForm"] = ApiDocument.prototype.InsertTextForm;
|
||||
|
||||
}(window, null));
|
||||
|
||||
|
||||
158
apiPlugins.js
158
apiPlugins.js
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2022
|
||||
* (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)
|
||||
@ -12,7 +12,7 @@
|
||||
* 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-12 Ernesta Birznieka-Upisha
|
||||
* 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
|
||||
@ -35,13 +35,32 @@
|
||||
(function(window)
|
||||
{
|
||||
/**
|
||||
* Returns information about all the forms that have been added to the document
|
||||
* @typedef {Object} ContentControl
|
||||
* Content control object.
|
||||
* @property {string} Tag - A tag assigned to the content control. The same tag can be assigned to several content controls so that it is possible to make reference to them in your code.
|
||||
* @property {string} Id - A unique identifier of the content control. It can be used to search for a certain content control and make reference to it in the code.
|
||||
* @property {ContentControlLock} Lock - A value that defines if it is possible to delete and/or edit the content control or not: 0 - only deleting, 1 - no deleting or editing, 2 - only editing, 3 - full access.
|
||||
* @property {string} InternalId - A unique internal identifier of the content control. It is used for all operations with content controls.
|
||||
* @see office-js-api/Examples/Plugins/Forms/Enumeration/ContentControl.js
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {(0 | 1 | 2 | 3)} ContentControlLock
|
||||
* A value that defines if it is possible to delete and/or edit the content control or not:
|
||||
* **0** - only deleting
|
||||
* **1** - disable deleting or editing
|
||||
* **2** - only editing
|
||||
* **3** - full access
|
||||
* @see office-js-api/Examples/Plugins/Forms/Enumeration/ContentControlLock.js
|
||||
*/
|
||||
|
||||
/**
|
||||
* Returns information about all the forms that have been added to the document.
|
||||
* @memberof Api
|
||||
* @typeofeditors ["CDE"]
|
||||
* @alias GetAllForms
|
||||
* @returns {[]} - An array of forms
|
||||
* @example
|
||||
* window.Asc.plugin.executeMethod("GetAllForms");
|
||||
* @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()
|
||||
{
|
||||
@ -58,14 +77,13 @@
|
||||
return arrResult;
|
||||
};
|
||||
/**
|
||||
* Returns information about all the forms that have been added to the document with specified Tag
|
||||
* Returns information about all the forms that have been added to the document with specified tag.
|
||||
* @memberof Api
|
||||
* @typeofeditors ["CDE"]
|
||||
* @alias GetFormsByTag
|
||||
* @param {string} tag - Tag of the form
|
||||
* @returns {[]} - An array of forms
|
||||
* @example
|
||||
* window.Asc.plugin.executeMethod("GetFormsByTag");
|
||||
* @param {string} tag - The form tag.
|
||||
* @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)
|
||||
{
|
||||
@ -85,125 +103,26 @@
|
||||
return arrResult;
|
||||
};
|
||||
/**
|
||||
* Set value for specified form
|
||||
* Sets a value to the specified form.
|
||||
* @memberof Api
|
||||
* @typeofeditors ["CDE"]
|
||||
* @alias SetFormValue
|
||||
* @param {string} internalId - A unique internal identifier of the content control.
|
||||
* @param {*} value - Depends on the type of a form
|
||||
* @example
|
||||
* window.Asc.plugin.executeMethod("SetFormValue");
|
||||
* @param {string} internalId - A unique internal identifier of the form.
|
||||
* @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)
|
||||
{
|
||||
let oLogicDocument = this.private_GetLogicDocument();
|
||||
|
||||
if (!AscCommon.g_oTableId
|
||||
|| !oLogicDocument
|
||||
|| !oLogicDocument.IsDocumentEditor())
|
||||
return;
|
||||
|
||||
let oForm = AscCommon.g_oTableId.GetClass(internalId);
|
||||
|
||||
if (!oForm
|
||||
|| !(oForm instanceof AscWord.CInlineLevelSdt)
|
||||
|| !oForm.IsForm())
|
||||
return;
|
||||
|
||||
let oParagraph = oForm.GetParagraph();
|
||||
|
||||
oForm.SkipSpecialContentControlLock(true);
|
||||
if (!oParagraph
|
||||
|| oLogicDocument.IsSelectionLocked(AscCommon.changestype_None, {
|
||||
Type : AscCommon.changestype_2_ElementsArray_and_Type,
|
||||
Elements : [oParagraph],
|
||||
CheckType : AscCommon.changestype_Paragraph_Content
|
||||
}, true, oLogicDocument.IsFillingFormMode()))
|
||||
{
|
||||
oForm.SkipSpecialContentControlLock(false);
|
||||
return;
|
||||
}
|
||||
oForm.SkipSpecialContentControlLock(false);
|
||||
|
||||
oLogicDocument.StartAction(AscDFH.historydescription_Document_FillFormInPlugin);
|
||||
|
||||
let isClear = false;
|
||||
if (null === value)
|
||||
{
|
||||
isClear = true;
|
||||
}
|
||||
else if (oForm.IsTextForm() || oForm.IsComboBox())
|
||||
{
|
||||
let sValue = AscBuilder.GetStringParameter(value, "");
|
||||
if (!value)
|
||||
isClear = true;
|
||||
else
|
||||
oForm.SetInnerText(sValue);
|
||||
}
|
||||
else if (oForm.IsDropDownList())
|
||||
{
|
||||
let sValue = AscBuilder.GetStringParameter(value, "");
|
||||
let oPr = oForm.GetDropDownListPr();
|
||||
let nIndex = oPr.FindByText(sValue);
|
||||
if (-1 !== nIndex)
|
||||
oForm.SelectListItem(oPr.GetItemValue(nIndex));
|
||||
else
|
||||
isClear = true;
|
||||
}
|
||||
else if (oForm.IsCheckBox())
|
||||
{
|
||||
let isChecked = value === "true" ? true : value === "false" ? false : AscBuilder.GetBoolParameter(value, null);
|
||||
if (null !== isChecked)
|
||||
oForm.SetCheckBoxChecked(isChecked);
|
||||
else
|
||||
isClear = true;
|
||||
}
|
||||
else if (oForm.IsPictureForm())
|
||||
{
|
||||
let sValue = AscBuilder.GetStringParameter(value, "");
|
||||
if (!sValue)
|
||||
return;
|
||||
|
||||
let oImg;
|
||||
let allDrawings = oForm.GetAllDrawingObjects();
|
||||
for (let nDrawing = 0; nDrawing < allDrawings.length; ++nDrawing)
|
||||
{
|
||||
if (allDrawings[nDrawing].IsPicture())
|
||||
{
|
||||
oImg = allDrawings[nDrawing].GraphicObj;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (oImg)
|
||||
{
|
||||
oForm.SetShowingPlcHdr(false);
|
||||
oImg.setBlipFill(AscFormat.CreateBlipFillRasterImageId(sValue));
|
||||
}
|
||||
else
|
||||
{
|
||||
isClear = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (isClear)
|
||||
oForm.ClearContentControlExt();
|
||||
|
||||
oLogicDocument.OnChangeForm(oForm);
|
||||
oLogicDocument.Recalculate();
|
||||
oLogicDocument.UpdateTracks();
|
||||
oLogicDocument.FinalizeAction();
|
||||
this.private_SetFormValue(internalId, value);
|
||||
};
|
||||
/**
|
||||
* Get form value
|
||||
* Returns a value of the specified form.
|
||||
* @memberof Api
|
||||
* @typeofeditors ["CDE"]
|
||||
* @alias GetFormValue
|
||||
* @param {string} internalId - A unique internal identifier of the content control.
|
||||
* @returns {null | string} Value of the form (null means the form is filled with a placeholder)
|
||||
* @example
|
||||
* window.Asc.plugin.executeMethod("GetFormValue");
|
||||
*
|
||||
* @param {string} internalId - A unique internal identifier of the form.
|
||||
* @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)
|
||||
{
|
||||
@ -249,3 +168,4 @@
|
||||
};
|
||||
|
||||
})(window);
|
||||
|
||||
|
||||
@ -2,13 +2,26 @@
|
||||
"sdk": {
|
||||
"min": [
|
||||
"api.js",
|
||||
"apiPlugins.js"
|
||||
],
|
||||
"common": [
|
||||
"apiBuilder.js",
|
||||
"oform/Main.js",
|
||||
"oform/Field.js",
|
||||
"oform/User.js"
|
||||
"apiPlugins.js"
|
||||
],
|
||||
"common": [
|
||||
"apiBuilder.js",
|
||||
"oform/OForm.js",
|
||||
"oform/Role.js",
|
||||
"oform/xml/XmlPackage.js",
|
||||
"oform/xml/XmlContext.js",
|
||||
"oform/format/BaseFormatObject.js",
|
||||
"oform/format/Document.js",
|
||||
"oform/format/FieldGroup.js",
|
||||
"oform/format/FieldMaster.js",
|
||||
"oform/format/User.js",
|
||||
"oform/format/UserMaster.js",
|
||||
"oform/format/changes/DictionaryBase.js",
|
||||
"oform/format/changes/DocumentChanges.js",
|
||||
"oform/format/changes/FieldGroupChanges.js",
|
||||
"oform/format/changes/FieldMasterChanges.js",
|
||||
"oform/format/changes/UserChanges.js",
|
||||
"oform/format/changes/UserMasterChanges.js"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
416
oform/Field.js
416
oform/Field.js
@ -1,416 +0,0 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2019
|
||||
*
|
||||
* 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-12 Ernesta Birznieka-Upisha
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
(function(window, undefined) {
|
||||
|
||||
const CBaseFormatObject = AscFormat.CBaseFormatObject;
|
||||
const InitClass = AscFormat.InitClass;
|
||||
const CChangesString = AscDFH.CChangesDrawingsString;
|
||||
const CChangesObject = AscDFH.CChangesDrawingsObject;
|
||||
const CChangesContent = AscDFH.CChangesDrawingsContent;
|
||||
|
||||
AscDFH.changesFactory[AscDFH.historyitem_FormFieldMaster_FieldId] = CChangesString;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_FormFieldMaster_User] = CChangesContent;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_FormFieldMaster_Field] = CChangesObject;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_FormFieldMaster_SignRequest] = CChangesObject;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_FormField_Content] = CChangesObject;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_FormField_EncryptedData] = CChangesContent;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_FormField_FieldMaster] = CChangesObject;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_SignRequest_User] = CChangesContent;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_EncryptedData_Method] = CChangesString;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_EncryptedData_Value] = CChangesString;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_EncryptedData_KeyInfo] = CChangesObject;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_KeyInfo_User] = CChangesString;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_KeyInfo_Value] = CChangesObject;
|
||||
|
||||
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_FormFieldMaster_FieldId] = function(oClass, value) {oClass.FieldId = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_FormFieldMaster_Field] = function(oClass, value) {oClass.Field = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_FormFieldMaster_SignRequest] = function(oClass, value) {oClass.SignRequest = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_FormField_Content] = function(oClass, value) {oClass.FieldContent = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_FormField_FieldMaster] = function(oClass, value) {oClass.FieldMaster = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_EncryptedData_Method] = function(oClass, value) {oClass.EncryptedMethod = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_EncryptedData_Value] = function(oClass, value) {oClass.EncryptedValue = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_EncryptedData_KeyInfo] = function(oClass, value) {oClass.KeyInfo = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_KeyInfo_User] = function(oClass, value) {oClass.FieldId = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_KeyInfo_Value] = function(oClass, value) {oClass.FieldId = value;};
|
||||
|
||||
|
||||
AscDFH.drawingContentChanges[AscDFH.historyitem_FormFieldMaster_User] = function (oClass) {return oClass.Users;};
|
||||
AscDFH.drawingContentChanges[AscDFH.historyitem_SignRequest_User] = function (oClass) {return oClass.Users;};
|
||||
AscDFH.drawingContentChanges[AscDFH.historyitem_FormField_EncryptedData] = function (oClass) {return oClass.EndcriptedData;};
|
||||
|
||||
|
||||
function CFieldMaster() {
|
||||
CBaseFormatObject.call(this);
|
||||
this.FieldId = null;
|
||||
this.Users = [];
|
||||
this.Field = null;
|
||||
this.SignRequest = null;
|
||||
}
|
||||
InitClass(CFieldMaster, CBaseFormatObject, AscDFH.historyitem_type_FormFieldMaster);
|
||||
CFieldMaster.prototype.setFieldId = function(sFieldId) {
|
||||
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_FormFieldMaster_FieldId, this.FieldId, sFieldId));
|
||||
this.FieldId = sFieldId;
|
||||
};
|
||||
CFieldMaster.prototype.addUser = function(oUser) {
|
||||
AscCommon.History.Add(new CChangesContent(this, AscDFH.historyitem_FormFieldMaster_User, this.Users.length, [oUser], true));
|
||||
this.Users.push(oUser);
|
||||
};
|
||||
CFieldMaster.prototype.setField = function(oField) {
|
||||
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_FormFieldMaster_Field, this.Field, oField));
|
||||
this.Field = oField;
|
||||
if(oField) {
|
||||
oField.setFieldMaster(this);
|
||||
}
|
||||
};
|
||||
CFieldMaster.prototype.setSignRequest = function(oSignRequest) {
|
||||
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_FormFieldMaster_SignRequest, this.SignRequest, oSignRequest));
|
||||
this.SignRequest = oSignRequest;
|
||||
};
|
||||
CFieldMaster.prototype.readAttrXml = function(name, reader) {
|
||||
switch (name) {
|
||||
case "id": {
|
||||
this.setFieldId(reader.GetValue());
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
CFieldMaster.prototype.readChildXml = function (name, reader) {
|
||||
let oThis = this;
|
||||
switch (name) {
|
||||
case "Users": {
|
||||
let oUsersNode = new CT_XmlNode(function (reader, name){
|
||||
if(name === "User") {
|
||||
let oUserNode = new CT_XmlNode();
|
||||
oUserNode.fromXml(reader);
|
||||
let sId = oUserNode.attributes["id"];
|
||||
let oRel = reader.rels.getRelationshipById(sId);
|
||||
reader.context.addFieldMasterRelation(oThis, oRel.targetFullName)
|
||||
}
|
||||
return true;
|
||||
});
|
||||
oUsersNode.fromXml(reader);
|
||||
break;
|
||||
}
|
||||
case "SignRequest": {
|
||||
let oSignRequest = new CSignRequest();
|
||||
oSignRequest.fromXml(reader);
|
||||
this.setSignRequest(oSignRequest);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
CFieldMaster.prototype.toXml = function (writer) {
|
||||
writer.WriteXmlString(AscCommonWord.g_sXmlHeader);
|
||||
writer.WriteXmlNodeStart("FieldMaster");
|
||||
writer.WriteXmlAttributeString("xmlns:r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
|
||||
writer.WriteXmlNullableAttributeString("id", this.FieldId);
|
||||
writer.WriteXmlAttributesEnd();
|
||||
|
||||
writer.WriteXmlNodeStart("Users");
|
||||
writer.WriteXmlAttributesEnd();
|
||||
let oContext = writer.context;
|
||||
let oUserMasterPartMap = oContext.userMasterPartMap;
|
||||
let oUsersIdMap = {};
|
||||
for(let nUser = 0; nUser < this.Users.length; ++nUser) {
|
||||
let oUser = this.Users[nUser];
|
||||
let oPart = oUserMasterPartMap[oUser.Id];
|
||||
if(!oPart) {
|
||||
oPart = writer.context.part.addPart(AscCommon.openXml.Types.userMaster);
|
||||
let oUserMemory = new AscCommon.CMemory();
|
||||
oUserMemory.context = writer.context;
|
||||
oPart.part.setDataXml(oUser, oUserMemory);
|
||||
oUserMasterPartMap[oUser.Id] = oPart;
|
||||
}
|
||||
let oNode = new CT_XmlNode();
|
||||
let sRId = oContext.part.addRelationship(AscCommon.openXml.Types.userMaster.relationType, oPart.uri);
|
||||
oNode.attributes["r:id"] = sRId
|
||||
oUsersIdMap[oUser.Id] = sRId;
|
||||
oNode.toXml(writer, "User");
|
||||
|
||||
}
|
||||
writer.WriteXmlNodeEnd("Users");
|
||||
if(this.SignRequest) {
|
||||
this.SignRequest.toXml(writer, oUsersIdMap);
|
||||
}
|
||||
writer.WriteXmlNodeEnd("FieldMaster");
|
||||
if(writer.context.fileType === Asc.c_oAscFileType.OFORM) {
|
||||
if(this.Field) {
|
||||
let oPart = writer.context.docPart.part.addPartWithoutRels(AscCommon.openXml.Types.field);
|
||||
let oMemory = new AscCommon.CMemory();
|
||||
oMemory.context = writer.context;
|
||||
oPart.setDataXml(this.Field, oMemory);
|
||||
oMemory.Seek(0);
|
||||
oPart.addRelationship(AscCommon.openXml.Types.fieldMaster.relationType, oContext.part.uri)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function CSignRequest() {
|
||||
CBaseFormatObject.call(this);
|
||||
this.Users = [];
|
||||
}
|
||||
InitClass(CSignRequest, CBaseFormatObject, AscDFH.historyitem_type_SignRequest);
|
||||
CSignRequest.prototype.addUser = function(oUser) {
|
||||
AscCommon.History.Add(new CChangesContent(this, AscDFH.historyitem_SignRequest_User, this.Users.length, [oUser], true));
|
||||
this.Users.push(oUser);
|
||||
};
|
||||
CSignRequest.prototype.readChildXml = function (name, reader) {
|
||||
CFieldMaster.prototype.readChildXml.call(this, name, reader);
|
||||
};
|
||||
CSignRequest.prototype.toXml = function (writer, oUsersIdMap) {
|
||||
writer.WriteXmlNodeStart("SignRequest");
|
||||
writer.WriteXmlAttributesEnd();
|
||||
|
||||
writer.WriteXmlNodeStart("Users");
|
||||
writer.WriteXmlAttributesEnd();
|
||||
for(let nUser = 0; nUser < this.Users.length; ++nUser) {
|
||||
let oUser = this.Users[nUser];
|
||||
let oNode = new CT_XmlNode();
|
||||
let sRId = oUsersIdMap[oUser.Id];
|
||||
if(sRId) {
|
||||
oNode.attributes["r:id"] = sRId
|
||||
oUsersIdMap[oUser.Id] = sRId;
|
||||
oNode.toXml(writer, "User");
|
||||
}
|
||||
|
||||
}
|
||||
writer.WriteXmlNodeEnd("Users");
|
||||
writer.WriteXmlNodeEnd("SignRequest");
|
||||
};
|
||||
|
||||
function CFieldContent() {
|
||||
CParagraphContentWithParagraphLikeContent.call(this);
|
||||
}
|
||||
InitClass(CFieldContent, CParagraphContentWithParagraphLikeContent, 0);
|
||||
CFieldContent.prototype.Add_ToContent = function(Pos, Item, UpdatePosition)
|
||||
{
|
||||
AscCommon.History.Add(new CChangesFormFieldAddItem(this, Pos, [Item]));
|
||||
CParagraphContentWithParagraphLikeContent.prototype.Add_ToContent.apply(this, arguments);
|
||||
};
|
||||
|
||||
CFieldContent.prototype.Remove_FromContent = function(Pos, Count, UpdatePosition)
|
||||
{
|
||||
let DeletedItems = this.Content.slice( Pos, Pos + Count );
|
||||
AscCommon.History.Add(new CChangesFormFieldRemoveItem(this, Pos, DeletedItems));
|
||||
CParagraphContentWithParagraphLikeContent.prototype.Remove_FromContent.apply(this, arguments);
|
||||
};
|
||||
CFieldContent.prototype.fromXml = function (reader) {
|
||||
CParagraphContentWithParagraphLikeContent.prototype.fromXml.call(this, reader);
|
||||
};
|
||||
CFieldContent.prototype.toXml = function (writer) {
|
||||
writer.WriteXmlNodeStart("w:sdtContent");
|
||||
writer.WriteXmlAttributesEnd();
|
||||
CParagraphContentWithParagraphLikeContent.prototype.toXml.call(this, writer);
|
||||
writer.WriteXmlNodeEnd("w:sdtContent");
|
||||
};
|
||||
|
||||
function CField() {
|
||||
CBaseFormatObject.call(this);
|
||||
this.EndcriptedData = [];
|
||||
this.FieldContent = null;
|
||||
}
|
||||
InitClass(CField, CBaseFormatObject, AscDFH.historyitem_type_FormField);
|
||||
CField.prototype.setFieldContent = function(oFieldContent) {
|
||||
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_FormField_Content, this.FieldContent, oFieldContent));
|
||||
this.FieldContent = oFieldContent;
|
||||
};
|
||||
CField.prototype.addEncryptedData = function(oEncryptedData) {
|
||||
AscCommon.History.Add(new CChangesContent(this, AscDFH.historyitem_FormField_EncryptedData, this.EndcriptedData.length, [oEncryptedData], true));
|
||||
this.EndcriptedData.push(oEncryptedData);
|
||||
};
|
||||
CField.prototype.setFieldMaster = function(oFieldMaster) {
|
||||
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_FormField_FieldMaster, this.FieldMaster, oFieldMaster));
|
||||
this.FieldMaster = oFieldMaster;
|
||||
};
|
||||
CField.prototype.readChildXml = function (name, reader) {
|
||||
switch (name) {
|
||||
case "EncryptedData": {
|
||||
let oEncryptedData = new CEncryptedData();
|
||||
oEncryptedData.fromXml(reader);
|
||||
this.addEncryptedData(oEncryptedData);
|
||||
break;
|
||||
}
|
||||
case "Body": {
|
||||
let oFieldContent = null;
|
||||
let oNode = new CT_XmlNode(function (reader, name) {
|
||||
if(name === "sdtContent") {
|
||||
oFieldContent = new CFieldContent();
|
||||
oFieldContent.fromXml(reader);
|
||||
return oFieldContent;
|
||||
}
|
||||
return null;
|
||||
});
|
||||
oNode.fromXml(reader);
|
||||
if(oFieldContent) {
|
||||
this.setFieldContent(oFieldContent);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
CField.prototype.toXml = function(writer) {
|
||||
writer.WriteXmlString(AscCommonWord.g_sXmlHeader);
|
||||
writer.WriteXmlNodeStart("Field");
|
||||
writer.WriteXmlAttributesEnd();
|
||||
if(this.FieldContent) {
|
||||
writer.WriteXmlNodeStart("Body");
|
||||
writer.WriteXmlString(AscCommonWord.g_sXmlDocumentNamespaces);
|
||||
writer.WriteXmlAttributesEnd();
|
||||
this.FieldContent.toXml(writer);
|
||||
writer.WriteXmlNodeEnd("Body");
|
||||
}
|
||||
for(let nData = 0; nData < this.EndcriptedData.length; ++nData) {
|
||||
this.EndcriptedData[nData].toXml(writer);
|
||||
}
|
||||
writer.WriteXmlNodeEnd("Field");
|
||||
};
|
||||
|
||||
function CEncryptedData() {
|
||||
CBaseFormatObject.call(this);
|
||||
this.EncryptedMethod = null;
|
||||
this.EncryptedValue = null;
|
||||
this.KeyInfo = null;
|
||||
}
|
||||
InitClass(CEncryptedData, CBaseFormatObject, AscDFH.historyitem_type_EncryptedData);
|
||||
CEncryptedData.prototype.setEncryptedMethod = function (sEncryptedMethod) {
|
||||
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_EncryptedData_Method, this.EncryptedMethod, sEncryptedMethod));
|
||||
this.EncryptedMethod = sEncryptedMethod;
|
||||
};
|
||||
CEncryptedData.prototype.setEncryptedValue = function (sEncryptedValue) {
|
||||
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_EncryptedData_Value, this.EncryptedValue, sEncryptedValue));
|
||||
this.EncryptedValue = sEncryptedValue;
|
||||
};
|
||||
CEncryptedData.prototype.setKeyInfo = function (oKeyInfo) {
|
||||
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_EncryptedData_KeyInfo, this.KeyInfo, oKeyInfo));
|
||||
this.KeyInfo = oKeyInfo;
|
||||
};
|
||||
CEncryptedData.prototype.readChildXml = function (name, reader) {
|
||||
switch (name) {
|
||||
case "EncryptedMethod": {
|
||||
let oMethod = new CT_XmlNode();
|
||||
oMethod.fromXml(reader);
|
||||
let sAlgorithm = oMethod.attributes["Algorithm"];
|
||||
if(sAlgorithm) {
|
||||
this.setEncryptedMethod(sAlgorithm)
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "EncryptedValue": {
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.fromXml(reader);
|
||||
this.setEncryptedValue(oNode.text);
|
||||
break;
|
||||
}
|
||||
case "KeyInfo": {
|
||||
let oKeyInfo = new CKeyInfo();
|
||||
oKeyInfo.fromXml(reader);
|
||||
this.setKeyInfo(oKeyInfo)
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
CEncryptedData.prototype.toXml = function(writer) {
|
||||
writer.WriteXmlNodeStart("EncryptedData");
|
||||
writer.WriteXmlAttributesEnd();
|
||||
if(this.EncryptedMethod) {
|
||||
let oMethod = new CT_XmlNode();
|
||||
oMethod.attributes["Algorithm"] = this.EncryptedMethod;
|
||||
oMethod.toXml(writer, "EncryptedMethod");
|
||||
}
|
||||
if(this.EncryptedValue) {
|
||||
let oValue = new CT_XmlNode();
|
||||
oValue.text = this.EncryptedValue;
|
||||
oValue.toXml(writer, "EncryptedValue");
|
||||
}
|
||||
if(this.KeyInfo) {
|
||||
this.KeyInfo.toXml(writer);
|
||||
}
|
||||
writer.WriteXmlNodeEnd("EncryptedData");
|
||||
};
|
||||
|
||||
function CKeyInfo() {
|
||||
CBaseFormatObject.call(this);
|
||||
this.UserId = null;
|
||||
this.Value = null;
|
||||
}
|
||||
InitClass(CKeyInfo, CBaseFormatObject, AscDFH.historyitem_type_KeyInfo);
|
||||
CKeyInfo.prototype.setUserId = function (sUserId) {
|
||||
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_KeyInfo_User, this.UserId, sUserId));
|
||||
this.UserId = sUserId;
|
||||
};
|
||||
CKeyInfo.prototype.setValue = function (sValue) {
|
||||
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_KeyInfo_Value, this.Value, sValue));
|
||||
this.Value = sValue;
|
||||
};
|
||||
CKeyInfo.prototype.readChildXml = function (name, reader) {
|
||||
switch (name) {
|
||||
case "User": {
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.fromXml(reader);
|
||||
this.setUserId(oNode.attributes["id"]);
|
||||
break;
|
||||
}
|
||||
case "Value": {
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.fromXml(reader);
|
||||
this.setValue(oNode.text);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
CKeyInfo.prototype.toXml = function(writer) {
|
||||
writer.WriteXmlNodeStart("KeyInfo");
|
||||
writer.WriteXmlAttributesEnd();
|
||||
if(this.UserId) {
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.attributes["id"] = this.UserId;
|
||||
oNode.toXml(writer, "User");
|
||||
}
|
||||
if(this.Value) {
|
||||
let oValue = new CT_XmlNode();
|
||||
oValue.text = this.Value;
|
||||
oValue.toXml(writer, "Value");
|
||||
}
|
||||
writer.WriteXmlNodeEnd("KeyInfo");
|
||||
};
|
||||
|
||||
AscWord.CFieldContent = CFieldContent;
|
||||
AscWord.CFieldMaster = CFieldMaster;
|
||||
AscWord.CField = CField;
|
||||
AscWord.CEncryptedData = CEncryptedData;
|
||||
AscWord.CKeyInfo = CKeyInfo;
|
||||
AscWord.CSignRequest = CSignRequest;
|
||||
})(window);
|
||||
316
oform/Main.js
316
oform/Main.js
@ -1,316 +0,0 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2019
|
||||
*
|
||||
* 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-12 Ernesta Birznieka-Upisha
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
(function(window, undefined) {
|
||||
|
||||
const CBaseFormatObject = AscFormat.CBaseFormatObject;
|
||||
const InitClass = AscFormat.InitClass;
|
||||
const CChangesString = AscDFH.CChangesDrawingsString;
|
||||
const CChangesObject = AscDFH.CChangesDrawingsObject;
|
||||
const CChangesContent = AscDFH.CChangesDrawingsContent;
|
||||
const CChangesLong = AscDFH.CChangesDrawingsLong;
|
||||
|
||||
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_Author] = CChangesString;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_Date] = CChangesObject;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_Description] = CChangesString;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_Type] = CChangesString;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_Application] = CChangesString;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_DocumentId] = CChangesString;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_FieldsGroups] = CChangesContent;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_User] = CChangesContent;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_FormDate_Format] = CChangesString;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_FormDate_Value] = CChangesString;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_FieldsGroup_Id] = CChangesString;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_FieldsGroup_Weight] = CChangesLong;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_FieldsGroup_Field] = CChangesContent;
|
||||
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_MainDocument_Author] = function (oClass, value) {oClass.Author = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_MainDocument_Date] = function (oClass, value) {oClass.Date = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_MainDocument_Description] = function (oClass, value) {oClass.Description = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_MainDocument_Type] = function (oClass, value) {oClass.Type = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_MainDocument_Application] = function (oClass, value) {oClass.Application = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_MainDocument_DocumentId] = function (oClass, value) {oClass.DocumentId = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_FormDate_Format] = function (oClass, value) {oClass.Format = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_FormDate_Value] = function (oClass, value) {oClass.Value = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_FieldsGroup_Id] = function (oClass, value) {oClass.GroupId = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_FieldsGroup_Weight] = function (oClass, value) {oClass.Weight = value;};
|
||||
|
||||
AscDFH.drawingContentChanges[AscDFH.historyitem_MainDocument_FieldsGroups] = function (oClass) {return oClass.FieldsGroups;};
|
||||
AscDFH.drawingContentChanges[AscDFH.historyitem_MainDocument_User] = function (oClass) {return oClass.Users;};
|
||||
AscDFH.drawingContentChanges[AscDFH.historyitem_FieldsGroup_Field] = function (oClass) {return oClass.Fields;};
|
||||
|
||||
|
||||
function CMainDocument() {
|
||||
CBaseFormatObject.call(this);
|
||||
this.Author = null;
|
||||
this.Date = null;
|
||||
this.Description = null;
|
||||
this.Type = null;
|
||||
this.Application = null;
|
||||
this.DocumentId = null;
|
||||
this.FieldsGroups = [];
|
||||
|
||||
this.Users = [];
|
||||
}
|
||||
InitClass(CMainDocument, CBaseFormatObject, AscDFH.historyitem_type_MainDocument);
|
||||
CMainDocument.prototype.setAuthor = function (sAuthor) {
|
||||
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_MainDocument_Author, this.Author, sAuthor));
|
||||
this.Author = sAuthor;
|
||||
};
|
||||
CMainDocument.prototype.setDate = function (oDate) {
|
||||
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_MainDocument_Date, this.Date, oDate));
|
||||
this.Date = oDate;
|
||||
};
|
||||
CMainDocument.prototype.setDescription = function (sDescription) {
|
||||
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_MainDocument_Description, this.Description, sDescription));
|
||||
this.Description = sDescription;
|
||||
};
|
||||
CMainDocument.prototype.setType = function (sType) {
|
||||
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_MainDocument_Type, this.Type, sType));
|
||||
this.Type = sType;
|
||||
};
|
||||
CMainDocument.prototype.setApplication = function (sApplication) {
|
||||
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_MainDocument_Application, this.Application, sApplication));
|
||||
this.Application = sApplication;
|
||||
};
|
||||
CMainDocument.prototype.setDocumentId = function (sDocumentId) {
|
||||
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_MainDocument_DocumentId, this.DocumentId, sDocumentId));
|
||||
this.DocumentId = sDocumentId;
|
||||
};
|
||||
CMainDocument.prototype.addFieldsGroups = function(oFieldsGroup) {
|
||||
AscCommon.History.Add(new CChangesContent(this, AscDFH.historyitem_MainDocument_FieldsGroups, this.FieldsGroups.length, [oFieldsGroup], true));
|
||||
this.FieldsGroups.push(oFieldsGroup);
|
||||
};
|
||||
CMainDocument.prototype.addUser = function(oUser) {
|
||||
AscCommon.History.Add(new CChangesContent(this, AscDFH.historyitem_MainDocument_User, this.FieldsGroups.length, [oUser], true));
|
||||
this.Users.push(oUser);
|
||||
};
|
||||
CMainDocument.prototype.readChildXml = function (name, reader) {
|
||||
switch (name) {
|
||||
case "Author": {
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.fromXml(reader);
|
||||
let sAuthor = oNode.attributes["id"];
|
||||
if(sAuthor) {
|
||||
this.setAuthor(sAuthor);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "Date": {
|
||||
let oDate = new CFormDate();
|
||||
oDate.fromXml(reader);
|
||||
this.setDate(oDate);
|
||||
break;
|
||||
}
|
||||
case "Description": {
|
||||
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.fromXml(reader);
|
||||
this.setDescription(oNode.text);
|
||||
break;
|
||||
}
|
||||
case "Type": {
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.fromXml(reader);
|
||||
this.setType(oNode.text);
|
||||
break;
|
||||
}
|
||||
case "Application": {
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.fromXml(reader);
|
||||
this.setApplication(oNode.text);
|
||||
break;
|
||||
}
|
||||
case "Id": {
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.fromXml(reader);
|
||||
this.setDocumentId(oNode.text);
|
||||
break;
|
||||
}
|
||||
case "FieldsGroup": {
|
||||
let oFieldsGroup = new CFieldsGroup();
|
||||
oFieldsGroup.fromXml(reader);
|
||||
this.addFieldsGroups(oFieldsGroup);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
CMainDocument.prototype.toXml = function(writer) {
|
||||
|
||||
writer.WriteXmlString(AscCommonWord.g_sXmlHeader);
|
||||
writer.WriteXmlNodeStart("Document");
|
||||
writer.WriteXmlAttributeString("xmlns:r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
|
||||
writer.WriteXmlAttributesEnd();
|
||||
if(this.Author) {
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.attributes["id"] = this.Author;
|
||||
oNode.toXml(writer, "Author");
|
||||
}
|
||||
if(this.Date) {
|
||||
this.Date.toXml(writer);
|
||||
}
|
||||
let oDescriptionNode = new CT_XmlNode();
|
||||
oDescriptionNode.text = this.Description;
|
||||
oDescriptionNode.toXml(writer, "Description");
|
||||
|
||||
let oTypeNode = new CT_XmlNode();
|
||||
oTypeNode.text = this.Type;
|
||||
oTypeNode.toXml(writer, "Type");
|
||||
|
||||
let oAppNode = new CT_XmlNode();
|
||||
oAppNode.text = this.Application;
|
||||
oAppNode.toXml(writer, "Application");
|
||||
|
||||
let oIdNode = new CT_XmlNode();
|
||||
oIdNode.text = this.DocumentId;
|
||||
oIdNode.toXml(writer, "Id");
|
||||
for(let nFG = 0; nFG < this.FieldsGroups.length; ++nFG) {
|
||||
this.FieldsGroups[nFG].toXml(writer);
|
||||
}
|
||||
writer.WriteXmlNodeEnd("Document");
|
||||
};
|
||||
|
||||
function CFormDate() {
|
||||
CBaseFormatObject.call(this);
|
||||
this.Format = null;
|
||||
this.Value = null;
|
||||
}
|
||||
InitClass(CFormDate, CBaseFormatObject, AscDFH.historyitem_type_FormDate);
|
||||
CFormDate.prototype.setFormat = function(sFormat) {
|
||||
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_FormDate_Format, this.Format, sFormat));
|
||||
this.Format = sFormat;
|
||||
};
|
||||
CFormDate.prototype.setValue = function(sValue) {
|
||||
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_FormDate_Value, this.Value, sValue));
|
||||
this.Value = sValue;
|
||||
};
|
||||
CFormDate.prototype.readChildXml = function (name, reader) {
|
||||
switch (name) {
|
||||
case "Format": {
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.fromXml(reader);
|
||||
this.setFormat(oNode.text);
|
||||
break;
|
||||
}
|
||||
case "Value": {
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.fromXml(reader);
|
||||
this.setValue(oNode.text);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
CFormDate.prototype.toXml = function (writer) {
|
||||
writer.WriteXmlNodeStart("Date");
|
||||
writer.WriteXmlAttributesEnd();
|
||||
|
||||
let oFormatNode = new CT_XmlNode();
|
||||
oFormatNode.text = this.Format;
|
||||
oFormatNode.toXml(writer, "Format");
|
||||
|
||||
let oValueNode = new CT_XmlNode();
|
||||
oValueNode.text = this.Value;
|
||||
oValueNode.toXml(writer, "Value");
|
||||
|
||||
writer.WriteXmlNodeEnd("Date");
|
||||
};
|
||||
|
||||
function CFieldsGroup() {
|
||||
CBaseFormatObject.call(this);
|
||||
this.GroupId = null;
|
||||
this.Weight = null;
|
||||
this.Fields = [];
|
||||
}
|
||||
InitClass(CFieldsGroup, CBaseFormatObject, AscDFH.historyitem_type_FieldsGroup);
|
||||
CFieldsGroup.prototype.setGroupId = function (sGroupId) {
|
||||
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_FieldsGroup_Id, this.GroupId, sGroupId));
|
||||
this.GroupId = sGroupId;
|
||||
};
|
||||
CFieldsGroup.prototype.setWeight = function (nWeight) {
|
||||
AscCommon.History.Add(new CChangesLong(this, AscDFH.historyitem_FieldsGroup_Weight, this.Weight, nWeight));
|
||||
this.Weight = nWeight;
|
||||
};
|
||||
CFieldsGroup.prototype.addField = function (oField) {
|
||||
AscCommon.History.Add(new CChangesContent(this, AscDFH.historyitem_FieldsGroup_Field, this.Fields.length, [oField], true));
|
||||
this.Fields.push(oField);
|
||||
};
|
||||
CFieldsGroup.prototype.readAttrXml = function(name, reader) {
|
||||
switch (name) {
|
||||
case "id": {
|
||||
this.setGroupId(reader.GetValue());
|
||||
break;
|
||||
}
|
||||
case "weight": {
|
||||
this.setWeight(reader.GetValueInt());
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
CFieldsGroup.prototype.readChildXml = function(name, reader) {
|
||||
switch (name) {
|
||||
case "Field": {
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.fromXml(reader);
|
||||
let sId = oNode.attributes["id"];
|
||||
let oRel = reader.rels.getRelationshipById(sId);
|
||||
reader.context.addFieldGroupRelation(this, oRel.targetFullName);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
CFieldsGroup.prototype.toXml = function (writer) {
|
||||
writer.WriteXmlNodeStart("FieldsGroup");
|
||||
writer.WriteXmlNullableAttributeString("id", this.GroupId);
|
||||
writer.WriteXmlNullableAttributeInt("weight", this.Weight);
|
||||
writer.WriteXmlAttributesEnd();
|
||||
|
||||
let oContext = writer.context;
|
||||
let oFldMasterPartMap = oContext.fieldMastersPartMap;
|
||||
for(let nFldMaster = 0; nFldMaster < this.Fields.length; ++nFldMaster) {
|
||||
let oFieldMaster = this.Fields[nFldMaster];
|
||||
let oPart = oFldMasterPartMap[oFieldMaster.Id];
|
||||
if(oPart) {
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.attributes["r:id"] = oContext.part.addRelationship(AscCommon.openXml.Types.fieldMaster.relationType, oPart.part.uri);
|
||||
oNode.toXml(writer, "Field");
|
||||
}
|
||||
}
|
||||
|
||||
writer.WriteXmlNodeEnd("FieldsGroup");
|
||||
};
|
||||
|
||||
AscWord.CMainDocument = CMainDocument;
|
||||
AscWord.CFieldsGroup = CFieldsGroup;
|
||||
AscWord.CFormDate = CFormDate;
|
||||
})(window);
|
||||
663
oform/OForm.js
Normal file
663
oform/OForm.js
Normal file
@ -0,0 +1,663 @@
|
||||
/*
|
||||
* (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
|
||||
*
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
(function(window)
|
||||
{
|
||||
/**
|
||||
* Основной класс для работы с форматом oform
|
||||
* @param document {AscWord.CDocument}
|
||||
* @constructor
|
||||
*/
|
||||
function OForm(document)
|
||||
{
|
||||
this.Format = new AscOForm.CDocument(this);
|
||||
this.Document = document;
|
||||
this.CurrentUser = null;
|
||||
|
||||
// Сейчас у нас роль - это ровно один userMaster и ровно одна группа полей
|
||||
this.Roles = [];
|
||||
this.NeedUpdateRoles = true;
|
||||
this.NeedRedraw = true;
|
||||
}
|
||||
/**
|
||||
* @returns {AscWord.CDocument}
|
||||
*/
|
||||
OForm.prototype.getDocument = function()
|
||||
{
|
||||
return this.Document;
|
||||
};
|
||||
/**
|
||||
* @returns {AscOForm.CDocument}
|
||||
*/
|
||||
OForm.prototype.getFormat = function()
|
||||
{
|
||||
return this.Format;
|
||||
};
|
||||
OForm.prototype.fromZip = function(zip, opt_sdtPrWithFieldPath)
|
||||
{
|
||||
let xmlPkg = new AscOForm.XmlPackage(zip);
|
||||
xmlPkg.setContext(new AscOForm.XmlReaderContext(xmlPkg));
|
||||
this.Format.fromPkg(xmlPkg, opt_sdtPrWithFieldPath);
|
||||
};
|
||||
OForm.prototype.toZip = function(zip, opt_fieldMastersPartMap)
|
||||
{
|
||||
let writer = new AscCommon.CMemory();
|
||||
let xmlPkg = new AscOForm.XmlPackage(zip, writer);
|
||||
xmlPkg.setContext(new AscOForm.XmlWriterContext(xmlPkg));
|
||||
writer.context = xmlPkg.getContext();
|
||||
this.Format.toPkg(xmlPkg, opt_fieldMastersPartMap);
|
||||
|
||||
// Наш XmlPackage работает в общей папке, а нам нужно запихнуть в zip подпапку oform
|
||||
zip.getPaths().forEach(function(path)
|
||||
{
|
||||
let fileData = zip.getFile(path);
|
||||
if (path.startsWith("oform/"))
|
||||
zip.addFile(path.substr(6), fileData);
|
||||
|
||||
zip.removeFile(path);
|
||||
});
|
||||
};
|
||||
OForm.prototype.setCurrentRole = function(roleName)
|
||||
{
|
||||
let role = this.getRole(roleName);
|
||||
if (!role)
|
||||
return;
|
||||
|
||||
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;
|
||||
};
|
||||
OForm.prototype.getAllRoles = function()
|
||||
{
|
||||
this.updateRoles();
|
||||
return this.Roles;
|
||||
};
|
||||
/**
|
||||
* @param roleSettings {AscOForm.CRoleSettings}
|
||||
*/
|
||||
OForm.prototype.addRole = function(roleSettings)
|
||||
{
|
||||
let name = "";
|
||||
if ("string" === typeof roleSettings)
|
||||
{
|
||||
name = roleSettings;
|
||||
roleSettings = new AscOForm.CRoleSettings();
|
||||
roleSettings.setName(name);
|
||||
}
|
||||
|
||||
if (roleSettings instanceof AscOForm.CRoleSettings)
|
||||
name = roleSettings.getName();
|
||||
else
|
||||
return false;
|
||||
|
||||
if (this.haveRole(name))
|
||||
return false;
|
||||
|
||||
if (!this.startAction(AscDFH.historydescription_OForm_AddRole))
|
||||
return false;
|
||||
|
||||
let userMaster = new AscOForm.CUserMaster(true);
|
||||
userMaster.setRole(name);
|
||||
|
||||
let color = roleSettings.getColor();
|
||||
if (color)
|
||||
userMaster.setColor(color.r, color.g, color.b);
|
||||
|
||||
let fieldGroup = new AscOForm.CFieldGroup();
|
||||
fieldGroup.setWeight(this.Format.getMaxWeight() + 1);
|
||||
fieldGroup.addUser(userMaster);
|
||||
|
||||
this.Format.addFieldGroup(fieldGroup);
|
||||
this.Format.addUserMaster(userMaster);
|
||||
|
||||
this.endAction();
|
||||
return true;
|
||||
};
|
||||
OForm.prototype.removeRole = function(name, delegateName)
|
||||
{
|
||||
this.updateRoles();
|
||||
|
||||
let roleIndex = this.getRoleIndex(name);
|
||||
if (-1 === roleIndex)
|
||||
return false;
|
||||
|
||||
let userMaster = this.Roles[roleIndex].getUserMaster();
|
||||
let fieldGroup = this.Roles[roleIndex].getFieldGroup();
|
||||
|
||||
let fields = fieldGroup.getAllFields();
|
||||
|
||||
|
||||
let delegateIndex = this.getRoleIndex(delegateName);
|
||||
|
||||
// На самом деле можно убрать эту проверку, но тогда мы просто удалим группу по умолчнию и заново её добавим
|
||||
if (this.Roles.length <= 1
|
||||
&& this.Roles[roleIndex].getUserMaster() === this.Format.getDefaultUserMaster()
|
||||
&& -1 === delegateIndex)
|
||||
{
|
||||
let defaultUserMaster = this.Format.getDefaultUserMaster();
|
||||
if (!defaultUserMaster.isDefaultUserProps())
|
||||
{
|
||||
if (!this.startAction(AscDFH.historydescription_OForm_RemoveRole))
|
||||
return false;
|
||||
|
||||
defaultUserMaster.initDefaultUser();
|
||||
|
||||
this.NeedRedraw = true;
|
||||
this.endAction();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!this.startAction(AscDFH.historydescription_OForm_RemoveRole))
|
||||
return false;
|
||||
|
||||
fieldGroup.clear();
|
||||
this.Format.removeFieldGroup(fieldGroup);
|
||||
this.Format.removeUserMaster(userMaster);
|
||||
|
||||
if (fields.length > 0)
|
||||
{
|
||||
let delegateUserMaster, delegateFieldGroup;
|
||||
if (-1 === delegateIndex || delegateIndex === roleIndex)
|
||||
{
|
||||
let defaultRole = this.getDefaultRole();
|
||||
if (defaultRole)
|
||||
{
|
||||
delegateUserMaster = defaultRole.getUserMaster();
|
||||
delegateFieldGroup = defaultRole.getFieldGroup();
|
||||
}
|
||||
else
|
||||
{
|
||||
let defaultGroup = new AscOForm.CFieldGroup();
|
||||
defaultGroup.setWeight(this.Format.getMaxWeight() + 1);
|
||||
this.Format.addFieldGroup(defaultGroup);
|
||||
defaultGroup.addUser(this.Format.getDefaultUserMaster());
|
||||
|
||||
delegateUserMaster = this.Format.getDefaultUserMaster();
|
||||
delegateFieldGroup = defaultGroup;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
delegateUserMaster = this.Roles[delegateIndex].getUserMaster();
|
||||
delegateFieldGroup = this.Roles[delegateIndex].getFieldGroup();
|
||||
}
|
||||
|
||||
for (let index = 0, count = fields.length; index < count; ++index)
|
||||
{
|
||||
let fieldMaster = fields[index];
|
||||
fieldMaster.removeUser(userMaster);
|
||||
fieldMaster.addUser(delegateUserMaster);
|
||||
}
|
||||
|
||||
delegateFieldGroup.addUser(delegateUserMaster);
|
||||
this.Format.addFieldGroup(delegateFieldGroup);
|
||||
}
|
||||
|
||||
this.NeedRedraw = true;
|
||||
this.endAction();
|
||||
return true;
|
||||
};
|
||||
OForm.prototype.editRole = function(name, roleSettings)
|
||||
{
|
||||
let role = this.getRole(name);
|
||||
if (!role)
|
||||
return false;
|
||||
|
||||
let newName = roleSettings.getName();
|
||||
if (undefined !== newName
|
||||
&& null !== newName
|
||||
&& name !== newName
|
||||
&& this.haveRole(newName))
|
||||
return false;
|
||||
|
||||
if (!this.startAction(AscDFH.historyitem_OForm_EditRole))
|
||||
return false;
|
||||
|
||||
let userMaster = role.getUserMaster();
|
||||
if (undefined !== roleSettings.getName())
|
||||
userMaster.setRole(roleSettings.getName());
|
||||
|
||||
let color = roleSettings.getColor();
|
||||
if (null === color)
|
||||
userMaster.setColor(color);
|
||||
else if (undefined !== color)
|
||||
userMaster.setColor(color.r, color.g, color.b);
|
||||
|
||||
this.endAction();
|
||||
return true;
|
||||
};
|
||||
OForm.prototype.moveUpRole = function(name)
|
||||
{
|
||||
let role = this.getRole(name);
|
||||
if (!role)
|
||||
return false;
|
||||
|
||||
let weight = role.getWeight();
|
||||
let sameWeightRoles = this.getRolesByWeight(weight);
|
||||
|
||||
if (weight === this.Format.getMinWeight() && sameWeightRoles.length <= 1)
|
||||
return false;
|
||||
|
||||
if (!this.startAction(AscDFH.historydescription_OForm_ChangeRoleOrder))
|
||||
return false;
|
||||
|
||||
if (sameWeightRoles.length > 1)
|
||||
{
|
||||
for (let index = 0, count = this.Roles.length; index < count; ++index)
|
||||
{
|
||||
let curRole = this.Roles[index];
|
||||
let curWeight = curRole.getWeight();
|
||||
if (role !== curRole && curWeight >= weight)
|
||||
{
|
||||
curRole.setWeight(curWeight + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let prevWeight = -1;
|
||||
for (let index = 0, count = this.Roles.length; index < count; ++index)
|
||||
{
|
||||
let curRole = this.Roles[index];
|
||||
let curWeight = curRole.getWeight();
|
||||
if (curWeight < weight)
|
||||
{
|
||||
if (-1 === prevWeight || prevWeight < curWeight)
|
||||
prevWeight = curWeight;
|
||||
}
|
||||
}
|
||||
|
||||
if (-1 !== prevWeight)
|
||||
{
|
||||
let prevRoles = this.getRolesByWeight(prevWeight);
|
||||
|
||||
role.setWeight(prevWeight);
|
||||
for (let index = 0, count = prevRoles.length; index < count; ++index)
|
||||
{
|
||||
prevRoles[index].setWeight(weight);
|
||||
}
|
||||
}
|
||||
|
||||
this.endAction();
|
||||
return true;
|
||||
};
|
||||
OForm.prototype.moveDownRole = function(name)
|
||||
{
|
||||
let role = this.getRole(name);
|
||||
if (!role)
|
||||
return false;
|
||||
|
||||
let weight = role.getWeight();
|
||||
let sameWeightRoles = this.getRolesByWeight(weight);
|
||||
|
||||
if (weight === this.Format.getMaxWeight() && sameWeightRoles.length <= 1)
|
||||
return false;
|
||||
|
||||
if (!this.startAction(AscDFH.historydescription_OForm_ChangeRoleOrder))
|
||||
return false;
|
||||
|
||||
if (sameWeightRoles.length > 1)
|
||||
{
|
||||
weight++;
|
||||
if (this.getRolesByWeight(weight + 1).length)
|
||||
{
|
||||
for (let index = 0, count = this.Roles.length; index < count; ++index)
|
||||
{
|
||||
let curRole = this.Roles[index];
|
||||
let curWeight = curRole.getWeight();
|
||||
if (curWeight > weight)
|
||||
{
|
||||
curRole.setWeight(curWeight + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let nextWeight = -1;
|
||||
for (let index = 0, count = this.Roles.length; index < count; ++index)
|
||||
{
|
||||
let curRole = this.Roles[index];
|
||||
let curWeight = curRole.getWeight();
|
||||
if (curWeight > weight)
|
||||
{
|
||||
if (-1 === nextWeight || nextWeight > curWeight)
|
||||
nextWeight = curWeight;
|
||||
}
|
||||
}
|
||||
|
||||
if (-1 !== nextWeight)
|
||||
{
|
||||
let nextRoles = this.getRolesByWeight(nextWeight);
|
||||
|
||||
role.setWeight(nextWeight);
|
||||
for (let index = 0, count = nextRoles.length; index < count; ++index)
|
||||
{
|
||||
nextRoles[index].setWeight(weight);
|
||||
}
|
||||
}
|
||||
else if (weight !== role.getWeight())
|
||||
{
|
||||
role.setWeight(weight);
|
||||
}
|
||||
|
||||
this.endAction();
|
||||
return true;
|
||||
};
|
||||
OForm.prototype.getRole = function(name)
|
||||
{
|
||||
let roleIndex = this.getRoleIndex(name);
|
||||
if (-1 === roleIndex)
|
||||
return null;
|
||||
|
||||
return this.Roles[roleIndex];
|
||||
};
|
||||
OForm.prototype.getRoleIndex = function(name)
|
||||
{
|
||||
this.updateRoles();
|
||||
|
||||
for (let index = 0, count = this.Roles.length; index < count; ++index)
|
||||
{
|
||||
if (name === this.Roles[index].getRole())
|
||||
return index;
|
||||
}
|
||||
|
||||
return -1;
|
||||
};
|
||||
OForm.prototype.getRolesByWeight = function(weight)
|
||||
{
|
||||
this.updateRoles();
|
||||
|
||||
let roles = [];
|
||||
for (let index = 0, count = this.Roles.length; index < count; ++index)
|
||||
{
|
||||
if (this.Roles[index].getWeight() === weight)
|
||||
roles.push(this.Roles[index]);
|
||||
}
|
||||
|
||||
return roles;
|
||||
};
|
||||
OForm.prototype.haveRole = function(name)
|
||||
{
|
||||
return !!(this.getRole(name));
|
||||
};
|
||||
OForm.prototype.getRoleSettings = function(name)
|
||||
{
|
||||
let role = this.getRole(name);
|
||||
if (!role)
|
||||
return null;
|
||||
|
||||
return role.getSettings();
|
||||
};
|
||||
OForm.prototype.getDefaultRole = function()
|
||||
{
|
||||
this.updateRoles();
|
||||
|
||||
let defaultUser = this.Format.getDefaultUserMaster();
|
||||
for (let index = 0, count = this.Roles.length; index < count; ++index)
|
||||
{
|
||||
if (defaultUser === this.Roles[index].getUserMaster())
|
||||
return this.Roles[index];
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
OForm.prototype.onChangeRoles = function()
|
||||
{
|
||||
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;
|
||||
};
|
||||
OForm.prototype.checkRedraw = function()
|
||||
{
|
||||
if (!this.NeedRedraw)
|
||||
return;
|
||||
|
||||
this.NeedRedraw = false;
|
||||
this.Document.Redraw();
|
||||
};
|
||||
OForm.prototype.updateRoles = function()
|
||||
{
|
||||
if (!this.NeedUpdateRoles)
|
||||
return;
|
||||
|
||||
this.NeedUpdateRoles = false;
|
||||
|
||||
this.Roles = [];
|
||||
for (let fgIndex = 0, fgCount = this.Format.getFieldGroupsCount(); fgIndex < fgCount; ++fgIndex)
|
||||
{
|
||||
let fieldGroup = this.Format.getFieldGroup(fgIndex);
|
||||
let user = fieldGroup.getFirstUser();
|
||||
if (!user)
|
||||
{
|
||||
// TODO: Разобраться с такими группами
|
||||
}
|
||||
|
||||
let haveRole = false;
|
||||
for (let roleIndex = 0, roleCount = this.Roles.length; roleIndex < roleCount; ++roleIndex)
|
||||
{
|
||||
if (this.Roles[roleIndex].getUserMaster() === user)
|
||||
{
|
||||
haveRole = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (haveRole)
|
||||
{
|
||||
// TODO: Разобраться с такими ситуациями
|
||||
}
|
||||
|
||||
let weight = fieldGroup.getWeight();
|
||||
let newRoleIndex = this.Roles.length;
|
||||
for (let roleIndex = 0, roleCount = this.Roles.length; roleIndex < roleCount; ++roleIndex)
|
||||
{
|
||||
let curWeight = this.Roles[roleIndex].getWeight();
|
||||
if (weight < curWeight || (weight === curWeight && user.compare(this.Roles[roleIndex].getUserMaster()) < 0))
|
||||
{
|
||||
newRoleIndex = roleIndex;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
let newRole = new AscOForm.CRole(fieldGroup, user);
|
||||
if (newRoleIndex === this.Roles.length)
|
||||
this.Roles.push(newRole);
|
||||
else
|
||||
this.Roles.splice(newRoleIndex, 0, newRole);
|
||||
}
|
||||
|
||||
this.onUpdateRoles();
|
||||
};
|
||||
OForm.prototype.correctFieldGroups = function()
|
||||
{
|
||||
// Проверяем есть ли хоть одна группа с заданной ролью (где указан userMaster)
|
||||
for (let fgIndex = 0, fgCount = this.Format.getFieldGroupsCount(); fgIndex < fgCount; ++fgIndex)
|
||||
{
|
||||
let fieldGroup = this.Format.getFieldGroup(fgIndex);
|
||||
let user = fieldGroup.getFirstUser();
|
||||
if (!user)
|
||||
continue;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Нельзя, чтобы групп не было вообще
|
||||
let defaultGroup = new AscOForm.CFieldGroup();
|
||||
defaultGroup.setWeight(this.Format.getMaxWeight() + 1);
|
||||
this.Format.addFieldGroup(defaultGroup);
|
||||
defaultGroup.addUser(this.Format.getDefaultUserMaster());
|
||||
};
|
||||
OForm.prototype.onEndLoad = function()
|
||||
{
|
||||
this.NeedUpdateRoles = true;
|
||||
this.Format.correctFieldMasters(this.getDocument());
|
||||
this.correctFieldGroups();
|
||||
this.updateRoles();
|
||||
};
|
||||
OForm.prototype.onUpdateRoles = function()
|
||||
{
|
||||
let logicDocument = this.getDocument();
|
||||
let api;
|
||||
if (!logicDocument || !(api = logicDocument.GetApi()))
|
||||
return;
|
||||
|
||||
api.sendEvent("asc_onUpdateOFormRoles", this.Roles);
|
||||
};
|
||||
OForm.prototype.onEndAction = function()
|
||||
{
|
||||
this.Format.removeUnusedFieldMasters();
|
||||
this.Format.correctFieldMasters(this.getDocument());
|
||||
this.correctFieldGroups();
|
||||
this.updateRoles();
|
||||
this.checkRedraw();
|
||||
};
|
||||
OForm.prototype.onUndoRedo = function()
|
||||
{
|
||||
this.updateRoles();
|
||||
this.checkRedraw();
|
||||
};
|
||||
OForm.prototype.onEndLoadChanges = function()
|
||||
{
|
||||
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
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
OForm.prototype.startAction = function(description)
|
||||
{
|
||||
let logicDocument = this.getDocument();
|
||||
if (!logicDocument)
|
||||
return false;
|
||||
|
||||
if (logicDocument.IsSelectionLocked(AscCommon.changestype_Document_Settings, null, false, false, null))
|
||||
return false;
|
||||
|
||||
logicDocument.StartAction(description);
|
||||
return true;
|
||||
};
|
||||
OForm.prototype.endAction = function()
|
||||
{
|
||||
let logicDocument = this.getDocument();
|
||||
if (!logicDocument)
|
||||
return;
|
||||
|
||||
this.onEndAction();
|
||||
|
||||
logicDocument.UpdateInterface();
|
||||
logicDocument.FinalizeAction();
|
||||
};
|
||||
//--------------------------------------------------------export----------------------------------------------------
|
||||
AscOForm.OForm = OForm;
|
||||
//---------------------------------------------interface export-----------------------------------------------------
|
||||
OForm.prototype['asc_getAllRoles'] = OForm.prototype.getAllRoles;
|
||||
OForm.prototype['asc_addRole'] = OForm.prototype.addRole;
|
||||
OForm.prototype['asc_removeRole'] = OForm.prototype.removeRole;
|
||||
OForm.prototype['asc_editRole'] = OForm.prototype.editRole;
|
||||
OForm.prototype['asc_moveUpRole'] = OForm.prototype.moveUpRole;
|
||||
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);
|
||||
158
oform/Role.js
Normal file
158
oform/Role.js
Normal file
@ -0,0 +1,158 @@
|
||||
/*
|
||||
* (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
|
||||
*
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
(function(window)
|
||||
{
|
||||
/**
|
||||
* Класс представляющий роль при заполнении формы. В данный момент роль - это ровно один userMaster
|
||||
* и группа полей связанные с данным userMaster
|
||||
* @param fieldGroup
|
||||
* @param userMaster
|
||||
* @constructor
|
||||
*/
|
||||
function CRole(fieldGroup, userMaster)
|
||||
{
|
||||
this.FieldGroup = fieldGroup;
|
||||
this.UserMaster = userMaster;
|
||||
}
|
||||
CRole.prototype.getSettings = function()
|
||||
{
|
||||
let r = new CRoleSettings();
|
||||
|
||||
if (this.UserMaster)
|
||||
{
|
||||
r.setName(this.UserMaster.getRole());
|
||||
r.setColor(this.UserMaster.getColor());
|
||||
}
|
||||
|
||||
if (this.FieldGroup)
|
||||
r.setFieldCount(this.FieldGroup.getAllFields().length)
|
||||
|
||||
return r;
|
||||
};
|
||||
CRole.prototype.getRole = function()
|
||||
{
|
||||
return this.UserMaster.getRole();
|
||||
};
|
||||
CRole.prototype.getUserMaster = function()
|
||||
{
|
||||
return this.UserMaster;
|
||||
};
|
||||
CRole.prototype.getWeight = function()
|
||||
{
|
||||
return this.FieldGroup.getWeight();
|
||||
};
|
||||
CRole.prototype.setWeight = function(weight)
|
||||
{
|
||||
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;
|
||||
};
|
||||
|
||||
/**
|
||||
* Класс для задания настроек роли из интерфейса
|
||||
* @constructor
|
||||
*/
|
||||
function CRoleSettings()
|
||||
{
|
||||
this.Name = "";
|
||||
this.Color = null;
|
||||
this.FieldCount = 0;
|
||||
}
|
||||
CRoleSettings.prototype.getName = function()
|
||||
{
|
||||
return this.Name;
|
||||
};
|
||||
CRoleSettings.prototype.setName = function(name)
|
||||
{
|
||||
this.Name = name;
|
||||
};
|
||||
CRoleSettings.prototype.setColor = function(color)
|
||||
{
|
||||
this.Color = color ? color.Copy() : null;
|
||||
};
|
||||
CRoleSettings.prototype.getColor = function()
|
||||
{
|
||||
return this.Color;
|
||||
};
|
||||
CRoleSettings.prototype.setAscColor = function(ascColor)
|
||||
{
|
||||
if (undefined === ascColor || null === ascColor)
|
||||
this.Color = null;
|
||||
else
|
||||
this.Color = new AscWord.CDocumentColor(ascColor.asc_getR(), ascColor.asc_getG(), ascColor.asc_getB());
|
||||
}
|
||||
CRoleSettings.prototype.getAscColor = function()
|
||||
{
|
||||
if (!this.Color)
|
||||
return null;
|
||||
|
||||
return new Asc.asc_CColor(this.Color.r, this.Color.g, this.Color.b);
|
||||
};
|
||||
CRoleSettings.prototype.haveColor = function()
|
||||
{
|
||||
return (!!this.Color);
|
||||
};
|
||||
CRoleSettings.prototype.setFieldCount = function(count)
|
||||
{
|
||||
this.FieldCount = count;
|
||||
};
|
||||
CRoleSettings.prototype.getFieldCount = function()
|
||||
{
|
||||
return this.FieldCount;
|
||||
};
|
||||
//--------------------------------------------------------export----------------------------------------------------
|
||||
AscOForm.CRole = CRole;
|
||||
AscOForm.CRoleSettings = CRoleSettings;
|
||||
//---------------------------------------------interface export-----------------------------------------------------
|
||||
CRole.prototype['asc_getSettings'] = CRole.prototype.getSettings;
|
||||
window['AscCommon']["CRoleSettings"] = CRoleSettings;
|
||||
CRoleSettings.prototype["asc_getName"] = CRoleSettings.prototype.getName;
|
||||
CRoleSettings.prototype["asc_putName"] = CRoleSettings.prototype.setName;
|
||||
CRoleSettings.prototype["asc_getColor"] = CRoleSettings.prototype.getAscColor;
|
||||
CRoleSettings.prototype["asc_putColor"] = CRoleSettings.prototype.setAscColor;
|
||||
CRoleSettings.prototype["asc_getFieldCount"] = CRoleSettings.prototype.getFieldCount;
|
||||
})(window);
|
||||
306
oform/User.js
306
oform/User.js
@ -1,306 +0,0 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2019
|
||||
*
|
||||
* 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-12 Ernesta Birznieka-Upisha
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
(function(window, undefined) {
|
||||
const CBaseFormatObject = AscFormat.CBaseFormatObject;
|
||||
const InitClass = AscFormat.InitClass;
|
||||
const CChangesString = AscDFH.CChangesDrawingsString;
|
||||
const CChangesObject = AscDFH.CChangesDrawingsObject;
|
||||
const CChangesContent = AscDFH.CChangesDrawingsContent;
|
||||
|
||||
AscDFH.changesFactory[AscDFH.historyitem_UserMasterUserId] = CChangesString;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_UserMasterSignInfo] = CChangesObject;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_UserMasterCipherInfo] = CChangesObject;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_UserMasterRole] = CChangesString;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_UserEmail] = CChangesString;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_UserTelephone] = CChangesString;
|
||||
AscDFH.changesFactory[AscDFH.historyitem_UserMasterUser] = CChangesContent;
|
||||
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_UserMasterUserId] = function(oClass, value) {oClass.UserId = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_UserMasterSignInfo] = function(oClass, value) {oClass.SignInfo = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_UserMasterCipherInfo] = function(oClass, value) {oClass.CipherInfo = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_UserMasterRole] = function(oClass, value) {oClass.Role = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_UserEmail] = function(oClass, value) {oClass.Email = value;};
|
||||
AscDFH.drawingsChangesMap[AscDFH.historyitem_UserTelephone] = function(oClass, value) {oClass.Telephone = value;};
|
||||
|
||||
AscDFH.drawingContentChanges[AscDFH.historyitem_UserMasterUser] = function(oClass) {return oClass.Users;};
|
||||
|
||||
|
||||
|
||||
function CUserMaster() {
|
||||
CBaseFormatObject.call(this);
|
||||
this.UserId = null;
|
||||
this.SignInfo = null;
|
||||
this.CipherInfo = null;
|
||||
this.Role = null;
|
||||
|
||||
this.Users = [];
|
||||
}
|
||||
InitClass(CUserMaster, CBaseFormatObject, AscDFH.historyitem_type_UserMaster);
|
||||
CUserMaster.prototype.setUserId = function (sUserId) {
|
||||
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_UserMasterUserId, this.UserId, sUserId));
|
||||
this.UserId = sUserId;
|
||||
};
|
||||
CUserMaster.prototype.setSignInfo = function (oSignInfo) {
|
||||
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_UserMasterSignInfo, this.SignInfo, oSignInfo));
|
||||
this.SignInfo = oSignInfo;
|
||||
|
||||
};
|
||||
CUserMaster.prototype.setCipherInfo = function (oCipherInfo) {
|
||||
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_UserMasterCipherInfo, this.CipherInfo, oCipherInfo));
|
||||
this.CipherInfo = oCipherInfo;
|
||||
};
|
||||
CUserMaster.prototype.setRole = function (sRole) {
|
||||
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_UserMasterRole, this.Role, sRole));
|
||||
this.Role = sRole;
|
||||
};
|
||||
CUserMaster.prototype.addUser = function (oUser) {
|
||||
AscCommon.History.Add(new CChangesContent(this, AscDFH.historyitem_UserMasterUser, this.Users.length, [oUser], true));
|
||||
this.Users.push(oUser);
|
||||
};
|
||||
CUserMaster.prototype.readChildXml = function (name, reader) {
|
||||
let bRead = false;
|
||||
switch (name) {
|
||||
case "Id": {
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.fromXml(reader);
|
||||
this.setUserId(oNode.text);
|
||||
bRead = true;
|
||||
break;
|
||||
}
|
||||
case "SignInfo": {
|
||||
let oSignInfo = new CSignInfo();
|
||||
oSignInfo.fromXml(reader);
|
||||
this.setSignInfo(oSignInfo);
|
||||
bRead = true;
|
||||
break;
|
||||
}
|
||||
case "CipherInfo": {
|
||||
let oCipherInfo = new CCipherInfo();
|
||||
oCipherInfo.fromXml(reader);
|
||||
this.setCipherInfo(oCipherInfo);
|
||||
bRead = true;
|
||||
break;
|
||||
}
|
||||
case "Role": {
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.fromXml(reader);
|
||||
this.setRole(oNode.text);
|
||||
bRead = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return bRead;
|
||||
};
|
||||
CUserMaster.prototype.writeChildren = function(writer) {
|
||||
let oIdNode = new CT_XmlNode();
|
||||
oIdNode.text = this.UserId;
|
||||
oIdNode.toXml(writer, "Id");
|
||||
if(this.SignInfo) {
|
||||
this.SignInfo.toXml(writer);
|
||||
}
|
||||
if(this.CipherInfo) {
|
||||
this.CipherInfo.toXml(writer);
|
||||
}
|
||||
let oRoleNode = new CT_XmlNode();
|
||||
oRoleNode.text = this.Role;
|
||||
oRoleNode.toXml(writer, "Role");
|
||||
}
|
||||
CUserMaster.prototype.toXml = function (writer) {
|
||||
writer.WriteXmlString(AscCommonWord.g_sXmlHeader);
|
||||
writer.WriteXmlNodeStart("UserMaster");
|
||||
writer.WriteXmlAttributesEnd();
|
||||
this.writeChildren(writer);
|
||||
writer.WriteXmlNodeEnd("UserMaster");
|
||||
};
|
||||
|
||||
function CUser() {
|
||||
CUserMaster.call(this);
|
||||
this.Email = null;
|
||||
this.Telephone = null;
|
||||
}
|
||||
InitClass(CUser, CUserMaster, AscDFH.historyitem_type_User);
|
||||
CUser.prototype.setEmail = function (sEmail) {
|
||||
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_UserEmail, this.Email, sEmail));
|
||||
this.Email = sEmail;
|
||||
};
|
||||
CUser.prototype.setTelephone = function (sTelephone) {
|
||||
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_UserTelephone, this.Telephone, sTelephone));
|
||||
this.Telephone = sTelephone;
|
||||
};
|
||||
CUser.prototype.readChildXml = function (name, reader) {
|
||||
if(CUserMaster.prototype.readChildXml.call(this, name, reader)) {
|
||||
return true;
|
||||
}
|
||||
let bRead = false;
|
||||
switch (name) {
|
||||
case "Email": {
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.fromXml(reader);
|
||||
this.setEmail(oNode.text);
|
||||
bRead = true;
|
||||
break;
|
||||
}
|
||||
case "Telephone": {
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.fromXml(reader);
|
||||
this.setTelephone(oNode.text);
|
||||
bRead = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return bRead;
|
||||
};
|
||||
CUser.prototype.toXml = function (writer) {
|
||||
writer.WriteXmlString(AscCommonWord.g_sXmlHeader);
|
||||
writer.WriteXmlNodeStart("User");
|
||||
writer.WriteXmlAttributesEnd();
|
||||
let oEmailNode = new CT_XmlNode();
|
||||
oEmailNode.text = this.Email;
|
||||
oEmailNode.toXml(writer, "Email");
|
||||
|
||||
let oTelephoneNode = new CT_XmlNode();
|
||||
oTelephoneNode.text = this.Telephone;
|
||||
oTelephoneNode.toXml(writer, "Telephone");
|
||||
this.writeChildren(writer);
|
||||
writer.WriteXmlNodeEnd("User");
|
||||
};
|
||||
|
||||
function CSignInfo() {
|
||||
CBaseFormatObject.call(this);
|
||||
this.PublicKey = null;
|
||||
this.X509 = null;
|
||||
this.ImageValid = null;
|
||||
this.ImageInvalid = null;
|
||||
}
|
||||
InitClass(CSignInfo, CBaseFormatObject, AscDFH.historyitem_type_SignInfo);
|
||||
CSignInfo.prototype.setPublicKey = function (sPublicKey) {
|
||||
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_SignInfo_PublicKey, this.PublicKey, sPublicKey));
|
||||
this.PublicKey = sPublicKey;
|
||||
};
|
||||
CSignInfo.prototype.setX509 = function (sX509) {
|
||||
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_SignInfo_X509, this.X509, sX509));
|
||||
this.X509 = sX509;
|
||||
};
|
||||
CSignInfo.prototype.setImageValid = function (sImageValid) {
|
||||
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_SignInfo_ImageValid, this.ImageValid, sImageValid));
|
||||
this.ImageValid = sImageValid;
|
||||
};
|
||||
CSignInfo.prototype.setImageInvalid = function (sImageInvalid) {
|
||||
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_SignInfo_ImageInvalid, this.ImageInvalid, sImageInvalid));
|
||||
this.ImageInvalid = sImageInvalid;
|
||||
};
|
||||
CSignInfo.prototype.readChildXml = function (name, reader) {
|
||||
switch (name) {
|
||||
case "PublicKey": {
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.fromXml(reader);
|
||||
this.setPublicKey(oNode.text);
|
||||
break;
|
||||
}
|
||||
case "X509": {
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.fromXml(reader);
|
||||
this.setX509(oNode.text);
|
||||
break;
|
||||
}
|
||||
case "ImageValid": {
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.fromXml(reader);
|
||||
this.setImageValid(oNode.text);
|
||||
break;
|
||||
}
|
||||
case "ImageInvalid": {
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.fromXml(reader);
|
||||
this.setImageInvalid(oNode.text);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
CSignInfo.prototype.toXml = function(writer) {
|
||||
writer.WriteXmlNodeStart("SignInfo");
|
||||
writer.WriteXmlAttributesEnd();
|
||||
let oPublicKeyNode = new CT_XmlNode();
|
||||
oPublicKeyNode.text = this.PublicKey;
|
||||
oPublicKeyNode.toXml(writer, "PublicKey");
|
||||
|
||||
let oX509Node = new CT_XmlNode();
|
||||
oX509Node.text = this.X509;
|
||||
oX509Node.toXml(writer, "X509");
|
||||
|
||||
let oImageValidNode = new CT_XmlNode();
|
||||
oImageValidNode.text = this.ImageValid;
|
||||
oImageValidNode.toXml(writer, "ImageValid");
|
||||
|
||||
let oImageInvalidNode = new CT_XmlNode();
|
||||
oImageInvalidNode.text = this.ImageInvalid;
|
||||
oImageInvalidNode.toXml(writer, "ImageInvalid");
|
||||
|
||||
writer.WriteXmlNodeEnd("SignInfo");
|
||||
};
|
||||
|
||||
function CCipherInfo() {
|
||||
CBaseFormatObject.call(this);
|
||||
this.PublicKey = null;
|
||||
}
|
||||
InitClass(CCipherInfo, CBaseFormatObject, AscDFH.historyitem_type_CipherInfo);
|
||||
CCipherInfo.prototype.setPublicKey = function (sPublicKey) {
|
||||
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_CipherInfo_PublicKey, this.PublicKey, sPublicKey));
|
||||
this.PublicKey = sPublicKey;
|
||||
};
|
||||
CCipherInfo.prototype.readChildXml = function (name, reader) {
|
||||
switch (name) {
|
||||
case "PublicKey": {
|
||||
let oNode = new CT_XmlNode();
|
||||
oNode.fromXml(reader);
|
||||
this.setPublicKey(oNode.text);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
CCipherInfo.prototype.toXml = function(writer) {
|
||||
writer.WriteXmlNodeStart("CipherInfo");
|
||||
writer.WriteXmlAttributesEnd();
|
||||
let oPublicKeyNode = new CT_XmlNode();
|
||||
oPublicKeyNode.text = this.PublicKey;
|
||||
oPublicKeyNode.toXml(writer, "PublicKey");
|
||||
writer.WriteXmlNodeEnd("CipherInfo");
|
||||
};
|
||||
|
||||
AscWord.CUserMaster = CUserMaster;
|
||||
AscWord.CUser = CUser;
|
||||
AscWord.CSignInfo = CSignInfo;
|
||||
AscWord.CCipherInfo = CCipherInfo;
|
||||
})(window);
|
||||
76
oform/format/BaseFormatObject.js
Normal file
76
oform/format/BaseFormatObject.js
Normal file
@ -0,0 +1,76 @@
|
||||
/*
|
||||
* (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
|
||||
*
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
(function(window)
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* Базовый класс для всех форматных классов в oform
|
||||
* @constructor
|
||||
*/
|
||||
function CBaseFormatObject()
|
||||
{
|
||||
this.Id = null;
|
||||
|
||||
if (!AscCommon.g_oIdCounter.m_bLoad && !AscCommon.History.CanAddChanges())
|
||||
return;
|
||||
|
||||
this.Id = AscCommon.g_oIdCounter.GetNewIdForOForm();
|
||||
AscCommon.g_oTableId.Add(this, this.Id);
|
||||
}
|
||||
CBaseFormatObject.prototype.GetId = function()
|
||||
{
|
||||
return this.Id;
|
||||
};
|
||||
CBaseFormatObject.prototype.Get_Id = function()
|
||||
{
|
||||
return this.Id;
|
||||
};
|
||||
CBaseFormatObject.prototype.Write_ToBinary2 = function(writer)
|
||||
{
|
||||
writer.WriteLong(this.classType);
|
||||
writer.WriteString2(this.GetId());
|
||||
};
|
||||
CBaseFormatObject.prototype.Read_FromBinary2 = function(reader)
|
||||
{
|
||||
this.Id = reader.GetString2();
|
||||
};
|
||||
CBaseFormatObject.prototype.Refresh_RecalcData = function(change)
|
||||
{
|
||||
};
|
||||
//--------------------------------------------------------export----------------------------------------------------
|
||||
AscOForm.CBaseFormatObject = CBaseFormatObject;
|
||||
|
||||
})(window);
|
||||
632
oform/format/Document.js
Normal file
632
oform/format/Document.js
Normal file
@ -0,0 +1,632 @@
|
||||
/*
|
||||
* (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
|
||||
*
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
(function(window)
|
||||
{
|
||||
/**
|
||||
* Основной класс для работы с форматом oform
|
||||
* @param oform {AscOForm.OForm}
|
||||
* @constructor
|
||||
* @extends AscOForm.CBaseFormatObject
|
||||
*/
|
||||
function CDocument(oform)
|
||||
{
|
||||
AscOForm.CBaseFormatObject.call(this);
|
||||
|
||||
this.OForm = oform;
|
||||
|
||||
this.DefaultUser = new AscOForm.CUserMaster();
|
||||
this.DefaultUser.initDefaultUser();
|
||||
this.DefaultUser.setParent(this);
|
||||
|
||||
// Форматная часть
|
||||
this.Author = null;
|
||||
this.Date = null;
|
||||
this.Description = null;
|
||||
this.Type = null;
|
||||
this.Application = null;
|
||||
this.DocumentId = null;
|
||||
this.FieldGroups = [];
|
||||
|
||||
// Массивы всех имеющихся пользователей и полей
|
||||
this.Users = [];
|
||||
this.UserMasters = [];
|
||||
this.FieldMasters = [];
|
||||
}
|
||||
AscFormat.InitClass(CDocument, AscOForm.CBaseFormatObject, AscDFH.historyitem_type_OForm_Document);
|
||||
CDocument.prototype.clear = function()
|
||||
{
|
||||
// TODO: fields?
|
||||
this.clearUsers();
|
||||
this.clearUserMasters();
|
||||
this.clearFieldGroups();
|
||||
this.clearFieldMasters();
|
||||
};
|
||||
CDocument.prototype.setDefaultUser = function(userMaster)
|
||||
{
|
||||
if (!userMaster || userMaster === this.DefaultUser)
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentDefaultUser(this, this.DefaultUser.GetId(), userMaster.GetId()));
|
||||
this.DefaultUser = userMaster;
|
||||
};
|
||||
CDocument.prototype.setAuthor = function(author)
|
||||
{
|
||||
if (this.Author === author)
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentAuthor(this, this.Author, author));
|
||||
this.Author = author;
|
||||
};
|
||||
CDocument.prototype.getAuthor = function()
|
||||
{
|
||||
return this.Author;
|
||||
};
|
||||
CDocument.prototype.setDate = function(date)
|
||||
{
|
||||
if (this.Date === date)
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentDate(this, this.Date, date));
|
||||
this.Date = date;
|
||||
};
|
||||
CDocument.prototype.getDate = function()
|
||||
{
|
||||
return this.Date;
|
||||
};
|
||||
CDocument.prototype.setDescription = function(description)
|
||||
{
|
||||
if (this.Description === description)
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentDescription(this, this.Description, description));
|
||||
this.Description = description;
|
||||
};
|
||||
CDocument.prototype.getDescription = function()
|
||||
{
|
||||
return this.Description;
|
||||
};
|
||||
CDocument.prototype.setType = function(type)
|
||||
{
|
||||
if (this.Type === type)
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentType(this, this.Type, type));
|
||||
this.Type = type;
|
||||
};
|
||||
CDocument.prototype.getType = function()
|
||||
{
|
||||
return this.Type;
|
||||
};
|
||||
CDocument.prototype.setApplication = function(app)
|
||||
{
|
||||
if (this.Application === app)
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentApplication(this, this.Application, app));
|
||||
this.Application = app;
|
||||
};
|
||||
CDocument.prototype.getApplication = function()
|
||||
{
|
||||
return this.Application;
|
||||
};
|
||||
CDocument.prototype.setDocumentId = function(documentId)
|
||||
{
|
||||
if (this.DocumentId === documentId)
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentDocumentId(this, this.DocumentId, documentId));
|
||||
this.DocumentId = documentId;
|
||||
};
|
||||
CDocument.prototype.getDocumentId = function()
|
||||
{
|
||||
return this.DocumentId;
|
||||
};
|
||||
CDocument.prototype.addFieldGroup = function(fieldGroup)
|
||||
{
|
||||
if (-1 !== this.FieldGroups.indexOf(fieldGroup))
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentFieldGroup(this, fieldGroup.GetId(), true));
|
||||
this.FieldGroups.push(fieldGroup);
|
||||
fieldGroup.setParent(this);
|
||||
this.onChangeFieldGroups();
|
||||
};
|
||||
CDocument.prototype.removeFieldGroup = function(fieldGroup)
|
||||
{
|
||||
if (!fieldGroup)
|
||||
return;
|
||||
|
||||
let index = this.FieldGroups.indexOf(fieldGroup);
|
||||
if (-1 === index)
|
||||
return;
|
||||
|
||||
fieldGroup.setParent(null);
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentFieldGroup(this, fieldGroup.GetId(), false));
|
||||
this.FieldGroups.splice(index, 1);
|
||||
this.onChangeFieldGroups();
|
||||
};
|
||||
CDocument.prototype.clearFieldGroups = function()
|
||||
{
|
||||
while (this.FieldGroups.length)
|
||||
{
|
||||
this.removeFieldGroup(this.FieldGroups[0]);
|
||||
}
|
||||
};
|
||||
CDocument.prototype.getFieldGroupsCount = function()
|
||||
{
|
||||
return this.FieldGroups.length;
|
||||
};
|
||||
CDocument.prototype.getFieldGroup = function(index)
|
||||
{
|
||||
if (index < 0 || index >= this.FieldGroups.length)
|
||||
return null;
|
||||
|
||||
return this.FieldGroups[index];
|
||||
};
|
||||
CDocument.prototype.fromPkg = function(xmlPkg, opt_sdtPrWithFieldPath)
|
||||
{
|
||||
let xmlContext = xmlPkg.getContext();
|
||||
let mainPart = xmlPkg.getMainPart();
|
||||
let mainContent = mainPart ? mainPart.getDocumentContent() : null;
|
||||
if (mainContent)
|
||||
{
|
||||
let xmlParserContext = new AscCommon.XmlParserContext();
|
||||
xmlParserContext.setOformContext(xmlContext);
|
||||
let reader = new AscCommon.StaxParser(mainContent, mainPart, xmlParserContext);
|
||||
this.fromXml(reader);
|
||||
}
|
||||
|
||||
let document = this;
|
||||
xmlContext.getAllUsers().forEach(function(user)
|
||||
{
|
||||
document.addUser(user)
|
||||
});
|
||||
xmlContext.getAllUserMasters().forEach(function(userMaster)
|
||||
{
|
||||
document.addUserMaster(userMaster);
|
||||
});
|
||||
xmlContext.getAllFieldMasters().forEach(function(fieldMaster)
|
||||
{
|
||||
document.addFieldMaster(fieldMaster);
|
||||
});
|
||||
//todo unite with XmlParserContext.prototype.assignFieldsToSdt
|
||||
if (opt_sdtPrWithFieldPath) {
|
||||
for (let nSdt = 0; nSdt < opt_sdtPrWithFieldPath.length; ++nSdt) {
|
||||
let oPair = opt_sdtPrWithFieldPath[nSdt];
|
||||
// let oFieldMaster = xmlContext.pathToFieldMaster[oPair.target];
|
||||
let oFieldMaster = xmlContext.getFieldMaster(oPair.target);
|
||||
if (oFieldMaster && oPair.sdt.SetFieldMaster) {
|
||||
oPair.sdt.SetFieldMaster(oFieldMaster);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
CDocument.prototype.toPkg = function(xmlPkg, opt_fieldMastersPartMap)
|
||||
{
|
||||
let xmlContext = xmlPkg.getContext();
|
||||
let xmlWriter = xmlPkg.getXmlWriter();
|
||||
|
||||
let main = xmlPkg.addPart(AscCommon.openXml.Types.oformMain).part;
|
||||
|
||||
xmlWriter.Seek(0);
|
||||
main.setDataXml(this, xmlWriter);
|
||||
|
||||
this.Users.forEach(function(user)
|
||||
{
|
||||
if (!xmlContext.haveUserPart(user))
|
||||
{
|
||||
xmlWriter.Seek(0);
|
||||
let part = xmlPkg.addPart(AscCommon.openXml.Types.oformUser);
|
||||
if (part)
|
||||
part.part.setDataXml(user, xmlWriter);
|
||||
}
|
||||
});
|
||||
|
||||
this.UserMasters.forEach(function(userMaster)
|
||||
{
|
||||
if (!xmlContext.haveUserMasterPart(userMaster))
|
||||
{
|
||||
xmlWriter.Seek(0);
|
||||
let part = xmlPkg.addPart(AscCommon.openXml.Types.oformUserMaster);
|
||||
if (part)
|
||||
part.part.setDataXml(userMaster, xmlWriter);
|
||||
}
|
||||
});
|
||||
|
||||
this.FieldMasters.forEach(function(fieldMaster)
|
||||
{
|
||||
if (!xmlContext.haveFieldMasterPart(fieldMaster))
|
||||
{
|
||||
xmlWriter.Seek(0);
|
||||
let part = xmlPkg.addPart(AscCommon.openXml.Types.oformFieldMaster);
|
||||
if (part)
|
||||
{
|
||||
part.part.setDataXml(fieldMaster, xmlWriter);
|
||||
if (opt_fieldMastersPartMap)
|
||||
{
|
||||
//todo remove path manipulation
|
||||
opt_fieldMastersPartMap[fieldMaster.Id] = '..'+part.part.uri;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
CDocument.prototype.fromXml = function(reader)
|
||||
{
|
||||
this.clear();
|
||||
|
||||
// TODO: Author, Date
|
||||
if (!reader.ReadNextNode() || "document" !== reader.GetNameNoNS())
|
||||
return false;
|
||||
|
||||
let depth = reader.GetDepth();
|
||||
while (reader.ReadNextSiblingNode(depth))
|
||||
{
|
||||
switch(reader.GetNameNoNS())
|
||||
{
|
||||
case "author":
|
||||
break;
|
||||
case "date":
|
||||
break;
|
||||
case "description":
|
||||
this.setDescription(reader.GetTextDecodeXml());
|
||||
break;
|
||||
case "type":
|
||||
this.setType(reader.GetTextDecodeXml());
|
||||
break;
|
||||
case "application":
|
||||
this.setApplication(reader.GetTextDecodeXml());
|
||||
break;
|
||||
case "id":
|
||||
this.setDocumentId(reader.GetTextDecodeXml());
|
||||
break;
|
||||
case "fieldGroup":
|
||||
this.addFieldGroup(AscOForm.CFieldGroup.fromXml(reader));
|
||||
break;
|
||||
case "defaultUser":
|
||||
{
|
||||
while (reader.MoveToNextAttribute())
|
||||
{
|
||||
if ("r:id" === reader.GetName())
|
||||
{
|
||||
let xmlReaderContext = reader.GetOformContext();
|
||||
let rId = reader.GetValueDecodeXml();
|
||||
let rel = reader.rels.getRelationship(rId);
|
||||
let userMaster = xmlReaderContext.getUserMaster(rel.getFullPath());
|
||||
if (userMaster)
|
||||
this.setDefaultUser(userMaster);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
CDocument.prototype.toXml = function(writer)
|
||||
{
|
||||
writer.WriteXmlHeader();
|
||||
writer.WriteXmlNodeStart("document");
|
||||
writer.WriteXmlRelationshipsNS();
|
||||
writer.WriteXmlAttributesEnd();
|
||||
|
||||
// TODO: Author, Date
|
||||
|
||||
let description = this.getDescription();
|
||||
if (description)
|
||||
writer.WriteXmlNodeWithText("description", description);
|
||||
|
||||
let type = this.getType();
|
||||
if (type)
|
||||
writer.WriteXmlNodeWithText("type", type);
|
||||
|
||||
let application = this.getApplication();
|
||||
if (application)
|
||||
writer.WriteXmlNodeWithText("application", application);
|
||||
|
||||
let documentId = this.getDocumentId();
|
||||
if (documentId)
|
||||
writer.WriteXmlNodeWithText("id", documentId);
|
||||
|
||||
let xmlContext = writer.context;
|
||||
let defaultUserPart = xmlContext.getDefaultUserMasterPart(this.DefaultUser);
|
||||
if (defaultUserPart)
|
||||
{
|
||||
writer.WriteXmlNodeStart("defaultUser");
|
||||
writer.WriteXmlNullableAttributeString("r:id", xmlContext.getRId(defaultUserPart));
|
||||
writer.WriteXmlAttributesEnd(true);
|
||||
}
|
||||
|
||||
for (let fgIndex = 0, fgCount = this.FieldGroups.length; fgIndex < fgCount; ++fgIndex)
|
||||
{
|
||||
this.FieldGroups[fgIndex].toXml(writer);
|
||||
}
|
||||
|
||||
writer.WriteXmlNodeEnd("document");
|
||||
};
|
||||
/**
|
||||
* @returns {AscOForm.CUserMaster}
|
||||
*/
|
||||
CDocument.prototype.getDefaultUserMaster = function()
|
||||
{
|
||||
return this.DefaultUser;
|
||||
};
|
||||
CDocument.prototype.addUser = function(user)
|
||||
{
|
||||
if (-1 !== this.Users.indexOf(user))
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentUser(this, user.GetId(), true));
|
||||
this.Users.push(user);
|
||||
};
|
||||
CDocument.prototype.removeUser = function(user)
|
||||
{
|
||||
let index = this.Users.indexOf(user);
|
||||
if (-1 === index)
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentUser(this, user.GetId(), false));
|
||||
this.Users.splice(index, 1);
|
||||
};
|
||||
CDocument.prototype.getUserCount = function()
|
||||
{
|
||||
return this.Users.length;
|
||||
};
|
||||
/**
|
||||
* @param index {number}
|
||||
* @returns {?AscOForm.CUser}
|
||||
*/
|
||||
CDocument.prototype.getUser = function(index)
|
||||
{
|
||||
if (index < 0 || index >= this.Users.length)
|
||||
return null;
|
||||
|
||||
return this.Users[index];
|
||||
};
|
||||
CDocument.prototype.clearUsers = function()
|
||||
{
|
||||
while (this.Users.length)
|
||||
{
|
||||
this.removeUser(this.Users[0]);
|
||||
}
|
||||
};
|
||||
CDocument.prototype.addUserMaster = function(userMaster)
|
||||
{
|
||||
if (-1 !== this.UserMasters.indexOf(userMaster))
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentUserMaster(this, userMaster.GetId(), true));
|
||||
this.UserMasters.push(userMaster);
|
||||
userMaster.setParent(this);
|
||||
};
|
||||
CDocument.prototype.removeUserMaster = function(userMaster)
|
||||
{
|
||||
let index = this.UserMasters.indexOf(userMaster);
|
||||
if (-1 === index)
|
||||
return;
|
||||
|
||||
userMaster.setParent(null);
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentUserMaster(this, userMaster.GetId(), false));
|
||||
this.UserMasters.splice(index, 1);
|
||||
};
|
||||
CDocument.prototype.getUserMasterCount = function()
|
||||
{
|
||||
return this.UserMasters.length;
|
||||
};
|
||||
CDocument.prototype.getUserMaster = function(index)
|
||||
{
|
||||
if (index < 0 || index >= this.UserMasters.length)
|
||||
return null;
|
||||
|
||||
return this.UserMasters[index];
|
||||
};
|
||||
CDocument.prototype.getAllUserMasters = function()
|
||||
{
|
||||
return this.UserMasters;
|
||||
};
|
||||
CDocument.prototype.clearUserMasters = function()
|
||||
{
|
||||
while (this.UserMasters.length)
|
||||
{
|
||||
this.removeUserMaster(this.UserMasters[0]);
|
||||
}
|
||||
};
|
||||
CDocument.prototype.createFieldMaster = function(id)
|
||||
{
|
||||
let fieldMaster = new AscOForm.CFieldMaster(!id);
|
||||
|
||||
if (id)
|
||||
fieldMaster.setFieldId(id);
|
||||
|
||||
this.addFieldMaster(fieldMaster);
|
||||
return fieldMaster;
|
||||
};
|
||||
CDocument.prototype.addFieldMaster = function(fieldMaster)
|
||||
{
|
||||
if (-1 !== this.FieldMasters.indexOf(fieldMaster))
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentFieldMaster(this, fieldMaster.GetId(), true));
|
||||
this.FieldMasters.push(fieldMaster);
|
||||
};
|
||||
CDocument.prototype.removeFieldMaster = function(fieldMaster)
|
||||
{
|
||||
let index = this.FieldMasters.indexOf(fieldMaster);
|
||||
if (-1 === index)
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentFieldMaster(this, fieldMaster.GetId(), false));
|
||||
this.FieldMasters.splice(index, 1);
|
||||
};
|
||||
CDocument.prototype.removeFieldMasterByIndex = function(index)
|
||||
{
|
||||
if (index < 0 || index >= this.FieldMasters.length)
|
||||
return;
|
||||
|
||||
let fieldMaster = this.FieldMasters[index];
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentFieldMaster(this, fieldMaster.GetId(), false));
|
||||
this.FieldMasters.splice(index, 1);
|
||||
};
|
||||
CDocument.prototype.getFieldMasterCount = function()
|
||||
{
|
||||
return this.FieldMasters.length;
|
||||
};
|
||||
CDocument.prototype.getFieldMaster = function(index)
|
||||
{
|
||||
if (index < 0 || index >= this.FieldMasters.length)
|
||||
return null;
|
||||
|
||||
return this.FieldMasters[index];
|
||||
};
|
||||
CDocument.prototype.clearFieldMasters = function()
|
||||
{
|
||||
while (this.FieldMasters.length)
|
||||
{
|
||||
this.removeFieldMaster(this.FieldMasters[0]);
|
||||
}
|
||||
};
|
||||
CDocument.prototype.getMinWeight = function()
|
||||
{
|
||||
let min = -1;
|
||||
for (let index = 0, count = this.FieldGroups.length; index < count; ++index)
|
||||
{
|
||||
let curWeight = this.FieldGroups[index].getWeight();
|
||||
if (-1 === min || min > curWeight)
|
||||
min = curWeight;
|
||||
}
|
||||
|
||||
return min;
|
||||
};
|
||||
CDocument.prototype.getMaxWeight = function()
|
||||
{
|
||||
let max = -1;
|
||||
for (let index = 0, count = this.FieldGroups.length; index < count; ++index)
|
||||
{
|
||||
let curWeight = this.FieldGroups[index].getWeight();
|
||||
if (max < curWeight)
|
||||
max = curWeight;
|
||||
}
|
||||
|
||||
return max;
|
||||
};
|
||||
CDocument.prototype.getAllFieldsByUserMaster = function(userMaster)
|
||||
{
|
||||
let fields = [];
|
||||
for (let index = 0, count = this.FieldMasters.length; index < count; ++index)
|
||||
{
|
||||
let fieldMaster = this.FieldMasters[index];
|
||||
if (fieldMaster.checkUser(userMaster))
|
||||
fields.push(fieldMaster);
|
||||
}
|
||||
|
||||
return fields;
|
||||
};
|
||||
CDocument.prototype.onChangeFieldGroups = function()
|
||||
{
|
||||
if (!this.OForm)
|
||||
return;
|
||||
|
||||
this.OForm.onChangeRoles();
|
||||
};
|
||||
CDocument.prototype.onChangeFieldGroup = function(fieldGroup)
|
||||
{
|
||||
if (!this.OForm)
|
||||
return;
|
||||
|
||||
this.OForm.onChangeRoles();
|
||||
};
|
||||
CDocument.prototype.onChangeFieldGroupFilled = function(fieldGroup)
|
||||
{
|
||||
if (!this.OForm)
|
||||
return;
|
||||
|
||||
this.OForm.onChangeFieldGroupFilled(fieldGroup);
|
||||
};
|
||||
CDocument.prototype.onChangeUserMaster = function(userMaster)
|
||||
{
|
||||
if (!this.OForm)
|
||||
return;
|
||||
|
||||
this.OForm.onChangeRoles();
|
||||
this.OForm.onChangeRoleColor();
|
||||
};
|
||||
CDocument.prototype.correctFieldMasters = function(logicDocument)
|
||||
{
|
||||
if (!logicDocument)
|
||||
return;
|
||||
|
||||
let formManager = logicDocument.GetFormsManager();
|
||||
let allForms = formManager.GetAllForms();
|
||||
|
||||
for (let index = 0, count = allForms.length; index < count; ++index)
|
||||
{
|
||||
let form = allForms[index];
|
||||
let fieldMaster = form.GetFieldMaster();
|
||||
if (!fieldMaster)
|
||||
{
|
||||
// TODO: Мы не можем здесь генерировать id, т.к. данная функция вызывается на открытии
|
||||
// и тогда у разных клиентов будут разные id. Поэтому, пока лучше вообще такие поля будут без id
|
||||
fieldMaster = new AscOForm.CFieldMaster(false);
|
||||
this.addFieldMaster(fieldMaster);
|
||||
fieldMaster.addUser(this.getDefaultUserMaster());
|
||||
form.SetFieldMaster(fieldMaster);
|
||||
}
|
||||
fieldMaster.setLogicField(form);
|
||||
}
|
||||
|
||||
for (let fieldIndex = this.FieldMasters.length - 1; fieldIndex >= 0; --fieldIndex)
|
||||
{
|
||||
let fieldMaster = this.FieldMasters[fieldIndex];
|
||||
|
||||
let form = fieldMaster.getLogicField();
|
||||
if (!form || form.GetFieldMaster() !== fieldMaster)
|
||||
this.removeFieldMasterByIndex(fieldIndex);
|
||||
}
|
||||
};
|
||||
CDocument.prototype.removeUnusedFieldMasters = function()
|
||||
{
|
||||
for (let fieldIndex = this.FieldMasters.length - 1; fieldIndex >= 0; --fieldIndex)
|
||||
{
|
||||
let fieldMaster = this.FieldMasters[fieldIndex];
|
||||
if (!fieldMaster.isUseInDocument())
|
||||
this.removeFieldMasterByIndex(fieldIndex);
|
||||
}
|
||||
};
|
||||
|
||||
//--------------------------------------------------------export----------------------------------------------------
|
||||
AscOForm.CDocument = CDocument;
|
||||
|
||||
})(window);
|
||||
316
oform/format/FieldGroup.js
Normal file
316
oform/format/FieldGroup.js
Normal file
@ -0,0 +1,316 @@
|
||||
/*
|
||||
* (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
|
||||
*
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
(function(window)
|
||||
{
|
||||
/**
|
||||
* @constructor
|
||||
* @extends AscOForm.CBaseFormatObject
|
||||
*/
|
||||
function CFieldGroup()
|
||||
{
|
||||
AscOForm.CBaseFormatObject.call(this);
|
||||
|
||||
this.Filled = false;
|
||||
this.Weight = null;
|
||||
this.Fields = [];
|
||||
this.Users = [];
|
||||
|
||||
this.Parent = null;
|
||||
}
|
||||
AscFormat.InitClass(CFieldGroup, AscOForm.CBaseFormatObject, AscDFH.historyitem_type_OForm_FieldGroup);
|
||||
CFieldGroup.prototype.setParent = function(parent)
|
||||
{
|
||||
if (this.Parent === parent)
|
||||
return;
|
||||
|
||||
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)
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormFieldGroupWeight(this, this.Weight, value));
|
||||
this.Weight = value;
|
||||
this.onChange();
|
||||
};
|
||||
CFieldGroup.prototype.getWeight = function()
|
||||
{
|
||||
return this.Weight;
|
||||
};
|
||||
CFieldGroup.prototype.addField = function(field)
|
||||
{
|
||||
if (!field || -1 !== this.Fields.indexOf(field))
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormFieldGroupAddRemoveField(this, field.GetId(), true));
|
||||
this.Fields.push(field);
|
||||
this.onChange();
|
||||
};
|
||||
CFieldGroup.prototype.removeField = function(field)
|
||||
{
|
||||
if (!field)
|
||||
return;
|
||||
|
||||
let index = this.Fields.indexOf(field);
|
||||
if (-1 === index)
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormFieldGroupAddRemoveField(this, field.GetId(), false));
|
||||
this.Fields.splice(index, 1);
|
||||
this.onChange();
|
||||
};
|
||||
CFieldGroup.prototype.getFieldCount = function()
|
||||
{
|
||||
return this.Fields.length;
|
||||
};
|
||||
CFieldGroup.prototype.getField = function(index)
|
||||
{
|
||||
return (index >= 0 && index < this.Fields.length ? this.Fields[index] : null);
|
||||
};
|
||||
CFieldGroup.prototype.addUser = function(user)
|
||||
{
|
||||
if (!user || -1 !== this.Users.indexOf(user))
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormFieldGroupAddRemoveUser(this, user.GetId(), true));
|
||||
this.Users.push(user);
|
||||
this.onChange();
|
||||
};
|
||||
CFieldGroup.prototype.removeUser = function(user)
|
||||
{
|
||||
if (!user)
|
||||
return;
|
||||
|
||||
let index = this.Users.indexOf(user);
|
||||
if (-1 === index)
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormFieldGroupAddRemoveUser(this, user.GetId(), false));
|
||||
this.Users.splice(index, 1);
|
||||
this.onChange();
|
||||
};
|
||||
CFieldGroup.prototype.getUserCount = function()
|
||||
{
|
||||
return this.Users.length;
|
||||
};
|
||||
CFieldGroup.prototype.getUser = function(index)
|
||||
{
|
||||
return (index >= 0 && index < this.Users.length ? this.Users[index] : null);
|
||||
};
|
||||
CFieldGroup.prototype.clear = function()
|
||||
{
|
||||
while (this.Users.length)
|
||||
{
|
||||
this.removeUser(this.Users[this.Users.length - 1]);
|
||||
}
|
||||
|
||||
while (this.Fields.length)
|
||||
{
|
||||
this.removeField(this.Fields[this.Fields.length - 1]);
|
||||
}
|
||||
};
|
||||
CFieldGroup.prototype.onChange = function()
|
||||
{
|
||||
if (!this.Parent)
|
||||
return;
|
||||
|
||||
this.Parent.onChangeFieldGroup(this);
|
||||
};
|
||||
CFieldGroup.prototype.onChangeFilled = function()
|
||||
{
|
||||
if (!this.Parent)
|
||||
return;
|
||||
|
||||
this.Parent.onChangeFieldGroupFilled(this);
|
||||
};
|
||||
CFieldGroup.prototype.getAllFields = function()
|
||||
{
|
||||
let fields = [];
|
||||
for (let fieldIndex = 0, fieldCount = this.Fields.length; fieldIndex < fieldCount; ++fieldIndex)
|
||||
{
|
||||
if (this.Fields[fieldIndex].isUseInDocument()
|
||||
&& this.Fields[fieldIndex].isMainField())
|
||||
{
|
||||
fields.push(this.Fields[fieldIndex]);
|
||||
}
|
||||
}
|
||||
|
||||
if (this.Users.length && this.Parent)
|
||||
{
|
||||
for (let index = 0, count = this.Users.length; index < count; ++index)
|
||||
{
|
||||
let userFields = this.Parent.getAllFieldsByUserMaster(this.Users[index]);
|
||||
for (let fieldIndex = 0, fieldCount = userFields.length; fieldIndex < fieldCount; ++fieldIndex)
|
||||
{
|
||||
if (-1 === fields.indexOf(userFields[fieldIndex])
|
||||
&& userFields[fieldIndex].isUseInDocument()
|
||||
&& userFields[fieldIndex].isMainField())
|
||||
{
|
||||
fields.push(userFields[fieldIndex]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return fields;
|
||||
};
|
||||
CFieldGroup.prototype.getFirstUser = function()
|
||||
{
|
||||
let user = null;
|
||||
for (let index = 0, userCount = this.Users.length; index < userCount; ++index)
|
||||
{
|
||||
let curUser = this.Users[index];
|
||||
if (!user || user.compare(curUser) < 0)
|
||||
user = curUser;
|
||||
}
|
||||
|
||||
if (!user)
|
||||
{
|
||||
for (let fieldIndex = 0, fieldCount = this.Fields.length; fieldIndex < fieldCount; ++fieldIndex)
|
||||
{
|
||||
let curUser = this.Fields[fieldIndex].getFirstUser();
|
||||
if (!user || user.compare(curUser) < 0)
|
||||
user = curUser;
|
||||
}
|
||||
}
|
||||
return user;
|
||||
};
|
||||
CFieldGroup.prototype.toXml = function(writer)
|
||||
{
|
||||
let context = writer.context;
|
||||
|
||||
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)
|
||||
{
|
||||
let part = context.getUserMasterPart(this.Users[userIndex]);
|
||||
if (!part)
|
||||
continue;
|
||||
|
||||
writer.WriteXmlNodeStart("user");
|
||||
writer.WriteXmlNullableAttributeString("r:id", context.getRId(part));
|
||||
writer.WriteXmlAttributesEnd(true);
|
||||
}
|
||||
|
||||
for (let fieldIndex = 0, fieldCount = this.Fields.length; fieldIndex < fieldCount; ++fieldIndex)
|
||||
{
|
||||
let part = context.getFieldMasterPart(this.Fields[fieldIndex]);
|
||||
if (!part)
|
||||
continue;
|
||||
|
||||
writer.WriteXmlNodeStart("field");
|
||||
writer.WriteXmlNullableAttributeString("r:id", context.getRId(part));
|
||||
writer.WriteXmlAttributesEnd(true);
|
||||
}
|
||||
|
||||
writer.WriteXmlNodeEnd("fieldGroup");
|
||||
};
|
||||
CFieldGroup.fromXml = function(reader)
|
||||
{
|
||||
let fG = new CFieldGroup();
|
||||
|
||||
while (reader.MoveToNextAttribute())
|
||||
{
|
||||
let attrName = reader.GetNameNoNS();
|
||||
if ("weight" === attrName)
|
||||
fG.setWeight(reader.GetValueInt());
|
||||
if ("filled" === attrName)
|
||||
fG.setFilled(reader.GetValueBool());
|
||||
}
|
||||
|
||||
let xmlReaderContext = reader.GetOformContext();
|
||||
let depth = reader.GetDepth();
|
||||
while (reader.ReadNextSiblingNode(depth))
|
||||
{
|
||||
switch(reader.GetNameNoNS())
|
||||
{
|
||||
case "user":
|
||||
|
||||
while (reader.MoveToNextAttribute())
|
||||
{
|
||||
if ("r:id" === reader.GetName())
|
||||
{
|
||||
let rId = reader.GetValueDecodeXml();
|
||||
let rel = reader.rels.getRelationship(rId);
|
||||
let userMaster = xmlReaderContext && xmlReaderContext.getUserMaster(rel.getFullPath());
|
||||
if (userMaster)
|
||||
fG.addUser(userMaster);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
case "field":
|
||||
|
||||
while (reader.MoveToNextAttribute())
|
||||
{
|
||||
if ("r:id" === reader.GetName())
|
||||
{
|
||||
let rId = reader.GetValueDecodeXml();
|
||||
let rel = reader.rels.getRelationship(rId);
|
||||
let fieldMaster = xmlReaderContext && xmlReaderContext.getFieldMaster(rel.getFullPath());
|
||||
if (fieldMaster)
|
||||
fG.addField(fieldMaster);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return fG;
|
||||
};
|
||||
//--------------------------------------------------------export----------------------------------------------------
|
||||
AscOForm.CFieldGroup = CFieldGroup;
|
||||
|
||||
})(window);
|
||||
303
oform/format/FieldMaster.js
Normal file
303
oform/format/FieldMaster.js
Normal file
@ -0,0 +1,303 @@
|
||||
/*
|
||||
* (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
|
||||
*
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
(function(window)
|
||||
{
|
||||
/**
|
||||
* @param {boolean} [generateId=false]
|
||||
* @constructor
|
||||
* @extends AscOForm.CBaseFormatObject
|
||||
*/
|
||||
function CFieldMaster(generateId)
|
||||
{
|
||||
AscOForm.CBaseFormatObject.call(this);
|
||||
|
||||
this.FieldId = null;
|
||||
this.Field = null;
|
||||
this.Users = [];
|
||||
this.Signers = [];
|
||||
|
||||
if (true === generateId)
|
||||
this.setFieldId(AscCommon.CreateGUID());
|
||||
}
|
||||
AscFormat.InitClass(CFieldMaster, AscOForm.CBaseFormatObject, AscDFH.historyitem_type_OForm_FieldMaster);
|
||||
CFieldMaster.prototype.setLogicField = function(logicField)
|
||||
{
|
||||
this.Field = logicField;
|
||||
};
|
||||
CFieldMaster.prototype.getLogicField = function()
|
||||
{
|
||||
return this.Field;
|
||||
};
|
||||
CFieldMaster.prototype.clone = function()
|
||||
{
|
||||
let fm = new CFieldMaster(true);
|
||||
this.copyTo(fm);
|
||||
return fm;
|
||||
};
|
||||
CFieldMaster.prototype.copyTo = function(fm)
|
||||
{
|
||||
fm.clearUsers();
|
||||
for (let index = 0, count = this.Users.length; index < count; ++index)
|
||||
{
|
||||
fm.addUser(this.Users[index]);
|
||||
}
|
||||
|
||||
fm.clearSigners();
|
||||
for (let index = 0, count = this.Signers.length; index < count; ++index)
|
||||
{
|
||||
fm.addSigner(this.Signers[index]);
|
||||
}
|
||||
};
|
||||
CFieldMaster.prototype.setFieldId = function(fieldId)
|
||||
{
|
||||
if (fieldId === this.FieldId)
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormFieldMasterFieldId(this, this.FieldId, fieldId));
|
||||
this.FieldId = fieldId;
|
||||
};
|
||||
CFieldMaster.prototype.getFieldId = function()
|
||||
{
|
||||
return this.FieldId;
|
||||
};
|
||||
CFieldMaster.prototype.addUser = function(user)
|
||||
{
|
||||
if (-1 !== this.Users.indexOf(user))
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormFieldMasterAddRemoveUser(this, user.GetId(), true));
|
||||
this.Users.push(user);
|
||||
};
|
||||
CFieldMaster.prototype.removeUser = function(user)
|
||||
{
|
||||
let index = this.Users.indexOf(user);
|
||||
if (-1 === index)
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormFieldMasterAddRemoveUser(this, user.GetId(), false));
|
||||
this.Users.splice(index, 1);
|
||||
};
|
||||
CFieldMaster.prototype.clearUsers = function()
|
||||
{
|
||||
while (this.Users.length)
|
||||
{
|
||||
this.removeUser(this.Users[this.Users.length - 1]);
|
||||
}
|
||||
};
|
||||
CFieldMaster.prototype.getUserCount = function()
|
||||
{
|
||||
return this.Users.length;
|
||||
};
|
||||
CFieldMaster.prototype.getUser = function(index)
|
||||
{
|
||||
if (index < 0 || index >= this.Users.length)
|
||||
return null;
|
||||
|
||||
return this.Users[index];
|
||||
};
|
||||
CFieldMaster.prototype.getFirstUser = function()
|
||||
{
|
||||
let user = null;
|
||||
for (let userIndex = 0, userCount = this.getUserCount(); userIndex < userCount; ++userIndex)
|
||||
{
|
||||
let curUser = this.getUser(userIndex);
|
||||
if (!user || user.compare(curUser) < 0)
|
||||
user = curUser;
|
||||
}
|
||||
|
||||
return user;
|
||||
};
|
||||
CFieldMaster.prototype.addSigner = function(user)
|
||||
{
|
||||
if (-1 !== this.Signers.indexOf(user))
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormFieldMasterAddRemoveSigner(this, user.GetId(), true));
|
||||
this.Signers.push(user);
|
||||
};
|
||||
CFieldMaster.prototype.removeSigner = function(user)
|
||||
{
|
||||
let index = this.Signers.indexOf(user);
|
||||
if (-1 === index)
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormFieldMasterAddRemoveSigner(this, user.GetId(), false));
|
||||
this.Signers.splice(index, 1);
|
||||
};
|
||||
CFieldMaster.prototype.clearSigners = function()
|
||||
{
|
||||
while (this.Signers.length)
|
||||
{
|
||||
this.removeSigner(this.Signers[this.Signers.length - 1]);
|
||||
}
|
||||
};
|
||||
CFieldMaster.prototype.checkUser = function(user)
|
||||
{
|
||||
for (let index = 0, count = this.Users.length; index < count; ++index)
|
||||
{
|
||||
if (this.Users[index] === user)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
CFieldMaster.prototype.isUseInDocument = function()
|
||||
{
|
||||
return (this.Field
|
||||
&& this.Field.IsUseInDocument()
|
||||
&& this === this.Field.GetFieldMaster());
|
||||
};
|
||||
CFieldMaster.prototype.isMainField = function()
|
||||
{
|
||||
return (this.Field && this.Field.IsMainForm());
|
||||
};
|
||||
CFieldMaster.prototype.toXml = function(writer)
|
||||
{
|
||||
let context = writer.context;
|
||||
|
||||
writer.WriteXmlHeader();
|
||||
writer.WriteXmlNodeStart("fieldMaster");
|
||||
writer.WriteXmlRelationshipsNS();
|
||||
if (this.FieldId)
|
||||
writer.WriteXmlNullableAttributeString("id", this.FieldId);
|
||||
writer.WriteXmlAttributesEnd();
|
||||
|
||||
writer.WriteXmlNodeStart("users");
|
||||
writer.WriteXmlAttributesEnd();
|
||||
|
||||
for (let index = 0, count = this.Users.length; index < count; ++index)
|
||||
{
|
||||
let user = this.Users[index];
|
||||
let part = context.getUserMasterPart(user);
|
||||
if (!part)
|
||||
continue;
|
||||
|
||||
writer.WriteXmlNodeStart("user");
|
||||
writer.WriteXmlNullableAttributeString("r:id", context.getRId(part));
|
||||
writer.WriteXmlAttributesEnd(true);
|
||||
}
|
||||
writer.WriteXmlNodeEnd("users");
|
||||
|
||||
writer.WriteXmlNodeStart("signRequest");
|
||||
writer.WriteXmlAttributesEnd();
|
||||
|
||||
for (let index = 0, count = this.Signers.length; index < count; ++index)
|
||||
{
|
||||
let user = this.Signers[index];
|
||||
let part = context.getUserMasterPart(user);
|
||||
if (!part)
|
||||
continue;
|
||||
|
||||
writer.WriteXmlNodeStart("user");
|
||||
writer.WriteXmlNullableAttributeString("r:id", context.getRId(part));
|
||||
writer.WriteXmlAttributesEnd(true);
|
||||
}
|
||||
writer.WriteXmlNodeEnd("signRequest");
|
||||
|
||||
writer.WriteXmlNodeEnd("fieldMaster");
|
||||
};
|
||||
CFieldMaster.fromXml = function(reader)
|
||||
{
|
||||
if (!reader.ReadNextNode())
|
||||
return null;
|
||||
|
||||
if ("fieldMaster" !== reader.GetNameNoNS())
|
||||
return null;
|
||||
|
||||
let fieldMaster = new CFieldMaster();
|
||||
|
||||
while (reader.MoveToNextAttribute())
|
||||
{
|
||||
if ("id" === reader.GetNameNoNS())
|
||||
fieldMaster.setFieldId(reader.GetValueDecodeXml());
|
||||
}
|
||||
|
||||
let depth = reader.GetDepth();
|
||||
while (reader.ReadNextSiblingNode(depth))
|
||||
{
|
||||
switch(reader.GetNameNoNS())
|
||||
{
|
||||
case "users":
|
||||
{
|
||||
let users = readUsersFromXml(reader);
|
||||
for (let index = 0, count = users.length; index < count; ++index)
|
||||
{
|
||||
fieldMaster.addUser(users[index]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "signRequest":
|
||||
{
|
||||
let users = readUsersFromXml(reader);
|
||||
for (let index = 0, count = users.length; index < count; ++index)
|
||||
{
|
||||
fieldMaster.addSigner(users[index]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return fieldMaster;
|
||||
};
|
||||
|
||||
function readUsersFromXml(reader)
|
||||
{
|
||||
let xmlReaderContext = reader.GetOformContext();
|
||||
let users = [];
|
||||
let depth = reader.GetDepth();
|
||||
while (reader.ReadNextSiblingNode(depth))
|
||||
{
|
||||
if ("user" === reader.GetNameNoNS())
|
||||
{
|
||||
while (reader.MoveToNextAttribute())
|
||||
{
|
||||
if ("r:id" === reader.GetName())
|
||||
{
|
||||
let rId = reader.GetValueDecodeXml();
|
||||
let rel = reader.rels.getRelationship(rId);
|
||||
let userMaster = xmlReaderContext && xmlReaderContext.getUserMaster(rel.getFullPath());
|
||||
if (userMaster)
|
||||
users.push(userMaster);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return users;
|
||||
}
|
||||
//--------------------------------------------------------export----------------------------------------------------
|
||||
AscOForm.CFieldMaster = CFieldMaster;
|
||||
|
||||
})(window);
|
||||
109
oform/format/User.js
Normal file
109
oform/format/User.js
Normal file
@ -0,0 +1,109 @@
|
||||
/*
|
||||
* (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
|
||||
*
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
(function(window)
|
||||
{
|
||||
/**
|
||||
* @param {AscOForm.CUserMaster} userMaster
|
||||
* @constructor
|
||||
* @extends AscOForm.CBaseFormatObject
|
||||
*/
|
||||
function CUser(userMaster)
|
||||
{
|
||||
AscOForm.CBaseFormatObject.call(this);
|
||||
|
||||
this.Email = undefined;
|
||||
this.Telephone = undefined;
|
||||
this.UserMaster = undefined;
|
||||
|
||||
if (userMaster)
|
||||
this.setUserMaster(userMaster);
|
||||
}
|
||||
AscFormat.InitClass(CUser, AscOForm.CBaseFormatObject, AscDFH.historyitem_type_OForm_User);
|
||||
CUser.prototype.setUserMaster = function(userMaster)
|
||||
{
|
||||
if (this.UserMaster === userMaster)
|
||||
return;
|
||||
|
||||
let oldValue = this.UserMaster ? this.UserMaster.GetId() : undefined;
|
||||
let newValue = userMaster ? userMaster.GetId() : undefined;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormUserUserMaster(this, oldValue, newValue));
|
||||
this.UserMaster = userMaster;
|
||||
};
|
||||
CUser.prototype.setEmail = function(email)
|
||||
{
|
||||
if (email === this.Email)
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormUserEmail(this, this.Email, email));
|
||||
this.Email = email;
|
||||
};
|
||||
CUser.prototype.setTelephone = function(telephone)
|
||||
{
|
||||
if (telephone === this.Telephone)
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormUserTelephone(this, this.Telephone, telephone));
|
||||
this.Telephone = telephone;
|
||||
};
|
||||
CUser.prototype.getUserMaster = function()
|
||||
{
|
||||
return this.UserMaster;
|
||||
};
|
||||
CUser.prototype.toXml = function(writer)
|
||||
{
|
||||
writer.WriteXmlHeader();
|
||||
writer.WriteXmlNodeStart("user");
|
||||
writer.WriteXmlAttributesEnd();
|
||||
|
||||
if (this.Email)
|
||||
writer.WriteXmlNodeWithText("email", this.Email);
|
||||
if (this.Telephone)
|
||||
writer.WriteXmlNodeWithText("telephone", this.Telephone);
|
||||
|
||||
writer.WriteXmlNodeEnd("user");
|
||||
};
|
||||
CUser.fromXml = function(reader)
|
||||
{
|
||||
let user = new CUser();
|
||||
|
||||
|
||||
|
||||
return user;
|
||||
};
|
||||
//--------------------------------------------------------export----------------------------------------------------
|
||||
AscOForm.CUser = CUser;
|
||||
|
||||
})(window);
|
||||
251
oform/format/UserMaster.js
Normal file
251
oform/format/UserMaster.js
Normal file
@ -0,0 +1,251 @@
|
||||
/*
|
||||
* (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
|
||||
*
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
(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
|
||||
* @extends AscOForm.CBaseFormatObject
|
||||
*/
|
||||
function CUserMaster(generateId)
|
||||
{
|
||||
AscOForm.CBaseFormatObject.call(this);
|
||||
|
||||
this.UserId = undefined;
|
||||
this.Role = undefined;
|
||||
this.Color = undefined;
|
||||
|
||||
if (true === generateId)
|
||||
this.setUserId(AscCommon.CreateGUID());
|
||||
|
||||
this.Parent = null;
|
||||
}
|
||||
AscFormat.InitClass(CUserMaster, AscOForm.CBaseFormatObject, AscDFH.historyitem_type_OForm_UserMaster);
|
||||
CUserMaster.prototype.setParent = function(parent)
|
||||
{
|
||||
if (this.Parent === parent)
|
||||
return;
|
||||
|
||||
this.Parent = parent;
|
||||
this.onChange();
|
||||
};
|
||||
CUserMaster.prototype.setUserId = function(userId)
|
||||
{
|
||||
if (userId === this.UserId)
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormUserMasterUserId(this, this.UserId, userId));
|
||||
this.UserId = userId;
|
||||
this.onChange();
|
||||
};
|
||||
CUserMaster.prototype.getUserId = function()
|
||||
{
|
||||
return this.UserId;
|
||||
};
|
||||
CUserMaster.prototype.setRole = function(role)
|
||||
{
|
||||
if (role === this.Role)
|
||||
return;
|
||||
|
||||
role = null === role ? undefined : role;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormUserMasterRole(this, this.Role, role));
|
||||
this.Role = role;
|
||||
this.onChange();
|
||||
};
|
||||
CUserMaster.prototype.getRole = function()
|
||||
{
|
||||
return this.Role ? this.Role : "";
|
||||
};
|
||||
CUserMaster.prototype.setColor = function(r, g, b)
|
||||
{
|
||||
let newColor = undefined !== r && null !== r ? new AscWord.CDocumentColor(r, g, b) : undefined;
|
||||
let oldColor = this.Color;
|
||||
if ((!newColor && !oldColor) || (oldColor && oldColor.IsEqual(newColor)))
|
||||
return;
|
||||
|
||||
AscCommon.History.Add(new AscDFH.CChangesOFormUserMasterColor(this, oldColor, newColor));
|
||||
this.Color = newColor;
|
||||
this.onChange();
|
||||
};
|
||||
CUserMaster.prototype.getColor = function()
|
||||
{
|
||||
return this.Color ? this.Color : null;
|
||||
};
|
||||
CUserMaster.prototype.initDefaultUser = function()
|
||||
{
|
||||
// TODO: Возможно стоит придумать уникальный id общий для дефолтовой роли
|
||||
this.setRole("Anyone");
|
||||
this.setColor(255, 239, 191);
|
||||
};
|
||||
CUserMaster.prototype.compare = function(user)
|
||||
{
|
||||
let res = AscCommon.CompareStrings(this.Role, user.Role);
|
||||
if (0 !== res)
|
||||
return res;
|
||||
|
||||
res = AscCommon.CompareStrings(this.UserId, user.UserId);
|
||||
if (0 !== res)
|
||||
return res;
|
||||
|
||||
if (!this.Color && !user.Color)
|
||||
return 0;
|
||||
else if (!this.Color && user.Color)
|
||||
return -1;
|
||||
else if (this.Color && !user.Color)
|
||||
return 1;
|
||||
|
||||
|
||||
if (this.Color.r < user.Color.r)
|
||||
return -1;
|
||||
else if (this.Color.r > user.Color.r)
|
||||
return 1;
|
||||
else if (this.Color.g < user.Color.g)
|
||||
return -1;
|
||||
else if (this.Color.g > user.Color.g)
|
||||
return 1;
|
||||
else if (this.Color.b < user.Color.b)
|
||||
return -1;
|
||||
else if (this.Color.b > user.Color.b)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
};
|
||||
CUserMaster.prototype.isEqual = function(user)
|
||||
{
|
||||
return (0 === this.compare(user));
|
||||
};
|
||||
CUserMaster.prototype.isDefaultUserProps = function()
|
||||
{
|
||||
let result = false;
|
||||
let u = this;
|
||||
AscCommon.ExecuteNoHistory(function()
|
||||
{
|
||||
let defaultUser = new CUserMaster();
|
||||
defaultUser.initDefaultUser();
|
||||
result = defaultUser.isEqual(u);
|
||||
});
|
||||
return result;
|
||||
};
|
||||
CUserMaster.prototype.onChange = function()
|
||||
{
|
||||
if (!this.Parent)
|
||||
return;
|
||||
|
||||
this.Parent.onChangeUserMaster(this);
|
||||
};
|
||||
CUserMaster.prototype.toXml = function(writer)
|
||||
{
|
||||
writer.WriteXmlHeader();
|
||||
writer.WriteXmlNodeStart("user");
|
||||
writer.WriteXmlAttributesEnd();
|
||||
|
||||
if (this.UserId)
|
||||
writer.WriteXmlNodeWithText("id", this.UserId);
|
||||
|
||||
if (this.Role)
|
||||
writer.WriteXmlNodeWithText("role", this.Role);
|
||||
|
||||
if (this.Color)
|
||||
{
|
||||
writer.WriteXmlNodeStart("color");
|
||||
writer.WriteXmlNullableAttributeStringEncode("val", this.Color.ToHexColor());
|
||||
writer.WriteXmlAttributesEnd(true);
|
||||
}
|
||||
|
||||
writer.WriteXmlNodeEnd("user");
|
||||
};
|
||||
CUserMaster.fromXml = function(reader)
|
||||
{
|
||||
if (!reader.ReadNextNode())
|
||||
return null;
|
||||
|
||||
let name = reader.GetNameNoNS();
|
||||
if ("user" !== reader.GetNameNoNS())
|
||||
return null;
|
||||
|
||||
let um = new CUserMaster();
|
||||
let depth = reader.GetDepth();
|
||||
while (reader.ReadNextSiblingNode(depth))
|
||||
{
|
||||
name = reader.GetNameNoNS();
|
||||
switch(reader.GetNameNoNS())
|
||||
{
|
||||
case "id":
|
||||
um.setUserId(reader.GetTextDecodeXml());
|
||||
break;
|
||||
case "role":
|
||||
um.setRole(reader.GetTextDecodeXml());
|
||||
break;
|
||||
case "color":
|
||||
while (reader.MoveToNextAttribute())
|
||||
{
|
||||
if ("val" === reader.GetNameNoNS())
|
||||
{
|
||||
let color = new AscWord.CDocumentColor();
|
||||
color.SetFromHexColor(reader.GetValueDecodeXml());
|
||||
um.setColor(color.r, color.g, color.b);
|
||||
}
|
||||
}
|
||||
reader.ReadTillEnd();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return um;
|
||||
};
|
||||
//--------------------------------------------------------export----------------------------------------------------
|
||||
AscOForm.CUserMaster = CUserMaster;
|
||||
AscOForm.getNoRole = getNoRole;
|
||||
|
||||
|
||||
})(window);
|
||||
103
oform/format/changes/DictionaryBase.js
Normal file
103
oform/format/changes/DictionaryBase.js
Normal file
@ -0,0 +1,103 @@
|
||||
/*
|
||||
* (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
|
||||
*
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
(function(window)
|
||||
{
|
||||
/**
|
||||
* Базовое изменение для работы с каким-либо контейнером, в который по ключу-key (string)
|
||||
* добавляют/удаляют значение
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesBase}
|
||||
*/
|
||||
function CChangesDictionaryBase(Class, key, isAdd)
|
||||
{
|
||||
AscDFH.CChangesBase.call(this, Class);
|
||||
this.Key = key;
|
||||
this.Add = isAdd;
|
||||
}
|
||||
CChangesDictionaryBase.prototype = Object.create(AscDFH.CChangesBase.prototype);
|
||||
CChangesDictionaryBase.prototype.constructor = CChangesDictionaryBase;
|
||||
CChangesDictionaryBase.prototype.Redo = function()
|
||||
{
|
||||
if (this.Add)
|
||||
this.private_AddToDictionary();
|
||||
else
|
||||
this.private_RemoveFromDictionary();
|
||||
};
|
||||
CChangesDictionaryBase.prototype.Undo = function()
|
||||
{
|
||||
if (this.Add)
|
||||
this.private_RemoveFromDictionary();
|
||||
else
|
||||
this.private_AddToDictionary();
|
||||
};
|
||||
CChangesDictionaryBase.prototype.WriteToBinary = function(writer)
|
||||
{
|
||||
writer.WriteString2(this.Key);
|
||||
writer.WriteBool(this.Add);
|
||||
};
|
||||
CChangesDictionaryBase.prototype.ReadFromBinary = function(reader)
|
||||
{
|
||||
this.Key = reader.GetString2();
|
||||
this.Add = reader.GetBool();
|
||||
};
|
||||
CChangesDictionaryBase.prototype.IsNeedRecalculate = function()
|
||||
{
|
||||
return false;
|
||||
};
|
||||
CChangesDictionaryBase.prototype.CreateReverseChange = function()
|
||||
{
|
||||
return new this.constructor(this.Class, this.Key, !this.Add);
|
||||
};
|
||||
CChangesDictionaryBase.prototype.private_AddToDictionary = function()
|
||||
{
|
||||
};
|
||||
CChangesDictionaryBase.prototype.private_RemoveFromDictionary = function()
|
||||
{
|
||||
};
|
||||
window['AscDFH'].CChangesDictionaryBase = CChangesDictionaryBase;
|
||||
|
||||
function InheritDictionaryChange(changeClass, type, addFunction, removeFunction)
|
||||
{
|
||||
window['AscDFH'].changesFactory[type] = changeClass;
|
||||
|
||||
changeClass.prototype = Object.create(CChangesDictionaryBase.prototype);
|
||||
changeClass.prototype.constructor = changeClass;
|
||||
changeClass.prototype.Type = type;
|
||||
changeClass.prototype.private_AddToDictionary = addFunction;
|
||||
changeClass.prototype.private_RemoveFromDictionary = removeFunction;
|
||||
}
|
||||
window['AscDFH'].InheritDictionaryChange = InheritDictionaryChange;
|
||||
|
||||
})(window);
|
||||
329
oform/format/changes/DocumentChanges.js
Normal file
329
oform/format/changes/DocumentChanges.js
Normal file
@ -0,0 +1,329 @@
|
||||
/*
|
||||
* (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
|
||||
*
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
(function(window)
|
||||
{
|
||||
window['AscDFH'].historyitem_OForm_Document_Author = window['AscDFH'].historyitem_type_OForm_Document | 1;
|
||||
window['AscDFH'].historyitem_OForm_Document_Date = window['AscDFH'].historyitem_type_OForm_Document | 2;
|
||||
window['AscDFH'].historyitem_OForm_Document_Description = window['AscDFH'].historyitem_type_OForm_Document | 3;
|
||||
window['AscDFH'].historyitem_OForm_Document_Type = window['AscDFH'].historyitem_type_OForm_Document | 4;
|
||||
window['AscDFH'].historyitem_OForm_Document_Application = window['AscDFH'].historyitem_type_OForm_Document | 5;
|
||||
window['AscDFH'].historyitem_OForm_Document_DocumentId = window['AscDFH'].historyitem_type_OForm_Document | 6;
|
||||
window['AscDFH'].historyitem_OForm_Document_FieldGroup = window['AscDFH'].historyitem_type_OForm_Document | 7;
|
||||
window['AscDFH'].historyitem_OForm_Document_User = window['AscDFH'].historyitem_type_OForm_Document | 8;
|
||||
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;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesBaseStringProperty}
|
||||
*/
|
||||
function CChangesOFormDocumentAuthor(Class, oldAuthor, newAuthor)
|
||||
{
|
||||
let oldId = oldAuthor ? oldAuthor.GetId() : undefined;
|
||||
let newId = newAuthor ? newAuthor.GetId() : undefined;
|
||||
|
||||
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, oldId, newId);
|
||||
}
|
||||
window['AscDFH'].InheritPropertyChange(
|
||||
CChangesOFormDocumentAuthor,
|
||||
window['AscDFH'].CChangesBaseStringProperty,
|
||||
window['AscDFH'].historyitem_OForm_Document_Author,
|
||||
function(value)
|
||||
{
|
||||
if (undefined === value)
|
||||
{
|
||||
this.Class.Author = undefined;
|
||||
}
|
||||
else
|
||||
{
|
||||
let author = AscCommon.g_oTableId.GetById(value);
|
||||
if (author)
|
||||
this.Class.Author = value;
|
||||
}
|
||||
},
|
||||
false
|
||||
);
|
||||
window['AscDFH'].CChangesOFormDocumentAuthor = CChangesOFormDocumentAuthor;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesBaseStringProperty}
|
||||
*/
|
||||
function CChangesOFormDocumentDate(Class, Old, New)
|
||||
{
|
||||
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
|
||||
}
|
||||
window['AscDFH'].InheritPropertyChange(
|
||||
CChangesOFormDocumentDate,
|
||||
window['AscDFH'].CChangesBaseStringProperty,
|
||||
window['AscDFH'].historyitem_OForm_Document_Date,
|
||||
function(value)
|
||||
{
|
||||
this.Class.Date = value;
|
||||
},
|
||||
false
|
||||
);
|
||||
window['AscDFH'].CChangesOFormDocumentDate = CChangesOFormDocumentDate;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesBaseStringProperty}
|
||||
*/
|
||||
function CChangesOFormDocumentDescription(Class, Old, New)
|
||||
{
|
||||
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
|
||||
}
|
||||
window['AscDFH'].InheritPropertyChange(
|
||||
CChangesOFormDocumentDescription,
|
||||
window['AscDFH'].CChangesBaseStringProperty,
|
||||
window['AscDFH'].historyitem_OForm_Document_Description,
|
||||
function(value)
|
||||
{
|
||||
this.Class.Description = value;
|
||||
},
|
||||
false
|
||||
);
|
||||
window['AscDFH'].CChangesOFormDocumentDescription = CChangesOFormDocumentDescription;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesBaseStringProperty}
|
||||
*/
|
||||
function CChangesOFormDocumentType(Class, Old, New)
|
||||
{
|
||||
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
|
||||
}
|
||||
window['AscDFH'].InheritPropertyChange(
|
||||
CChangesOFormDocumentType,
|
||||
window['AscDFH'].CChangesBaseStringProperty,
|
||||
window['AscDFH'].historyitem_OForm_Document_Type,
|
||||
function(value)
|
||||
{
|
||||
this.Class.Type = value;
|
||||
},
|
||||
false
|
||||
);
|
||||
window['AscDFH'].CChangesOFormDocumentType = CChangesOFormDocumentType;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesBaseStringProperty}
|
||||
*/
|
||||
function CChangesOFormDocumentApplication(Class, Old, New)
|
||||
{
|
||||
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
|
||||
}
|
||||
window['AscDFH'].InheritPropertyChange(
|
||||
CChangesOFormDocumentApplication,
|
||||
window['AscDFH'].CChangesBaseStringProperty,
|
||||
window['AscDFH'].historyitem_OForm_Document_Application,
|
||||
function(value)
|
||||
{
|
||||
this.Class.Application = value;
|
||||
},
|
||||
false
|
||||
);
|
||||
window['AscDFH'].CChangesOFormDocumentApplication = CChangesOFormDocumentApplication;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesBaseStringProperty}
|
||||
*/
|
||||
function CChangesOFormDocumentDocumentId(Class, Old, New)
|
||||
{
|
||||
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
|
||||
}
|
||||
window['AscDFH'].InheritPropertyChange(
|
||||
CChangesOFormDocumentDocumentId,
|
||||
window['AscDFH'].CChangesBaseStringProperty,
|
||||
window['AscDFH'].historyitem_OForm_Document_DocumentId,
|
||||
function(value)
|
||||
{
|
||||
this.Class.DocumentId = value;
|
||||
},
|
||||
false
|
||||
);
|
||||
window['AscDFH'].CChangesOFormDocumentDocumentId = CChangesOFormDocumentDocumentId;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesDictionaryBase}
|
||||
*/
|
||||
function CChangesOFormDocumentFieldGroup(Class, fieldGroupId, isAdd)
|
||||
{
|
||||
window['AscDFH'].CChangesDictionaryBase.call(this, Class, fieldGroupId, isAdd);
|
||||
}
|
||||
window['AscDFH'].InheritDictionaryChange(
|
||||
CChangesOFormDocumentFieldGroup,
|
||||
window['AscDFH'].historyitem_OForm_Document_FieldGroup,
|
||||
function()
|
||||
{
|
||||
let fieldGroup = AscCommon.g_oTableId.GetById(this.Key);
|
||||
if (-1 === this.Class.FieldGroups.indexOf(fieldGroup))
|
||||
{
|
||||
fieldGroup.setParent(this.Class);
|
||||
this.Class.FieldGroups.push(fieldGroup);
|
||||
this.Class.onChangeFieldGroups();
|
||||
}
|
||||
},
|
||||
function()
|
||||
{
|
||||
let fieldGroup = AscCommon.g_oTableId.GetById(this.Key);
|
||||
let index = this.Class.FieldGroups.indexOf(fieldGroup);
|
||||
if (-1 !== index)
|
||||
{
|
||||
fieldGroup.setParent(null);
|
||||
this.Class.FieldGroups.splice(index, 1);
|
||||
this.Class.onChangeFieldGroups();
|
||||
}
|
||||
}
|
||||
);
|
||||
window['AscDFH'].CChangesOFormDocumentFieldGroup = CChangesOFormDocumentFieldGroup;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesDictionaryBase}
|
||||
*/
|
||||
function CChangesOFormDocumentUser(Class, userId, isAdd)
|
||||
{
|
||||
window['AscDFH'].CChangesDictionaryBase.call(this, Class, userId, isAdd);
|
||||
}
|
||||
window['AscDFH'].InheritDictionaryChange(
|
||||
CChangesOFormDocumentUser,
|
||||
window['AscDFH'].historyitem_OForm_Document_User,
|
||||
function()
|
||||
{
|
||||
let user = AscCommon.g_oTableId.GetById(this.Key);
|
||||
if (-1 === this.Class.Users.indexOf(user))
|
||||
this.Class.Users.push(user);
|
||||
},
|
||||
function()
|
||||
{
|
||||
let user = AscCommon.g_oTableId.GetById(this.Key);
|
||||
let index = this.Class.Users.indexOf(user);
|
||||
if (-1 !== index)
|
||||
this.Class.Users.splice(index, 1);
|
||||
}
|
||||
);
|
||||
window['AscDFH'].CChangesOFormDocumentUser = CChangesOFormDocumentUser;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesDictionaryBase}
|
||||
*/
|
||||
function CChangesOFormDocumentUserMaster(Class, userMasterId, isAdd)
|
||||
{
|
||||
window['AscDFH'].CChangesDictionaryBase.call(this, Class, userMasterId, isAdd);
|
||||
}
|
||||
window['AscDFH'].InheritDictionaryChange(
|
||||
CChangesOFormDocumentUserMaster,
|
||||
window['AscDFH'].historyitem_OForm_Document_UserMaster,
|
||||
function()
|
||||
{
|
||||
let userMaster = AscCommon.g_oTableId.GetById(this.Key);
|
||||
if (-1 === this.Class.UserMasters.indexOf(userMaster))
|
||||
{
|
||||
userMaster.setParent(this.Class);
|
||||
this.Class.UserMasters.push(userMaster);
|
||||
}
|
||||
},
|
||||
function()
|
||||
{
|
||||
let userMaster = AscCommon.g_oTableId.GetById(this.Key);
|
||||
let index = this.Class.UserMasters.indexOf(userMaster);
|
||||
if (-1 !== index)
|
||||
{
|
||||
userMaster.setParent(null);
|
||||
this.Class.UserMasters.splice(index, 1);
|
||||
}
|
||||
}
|
||||
);
|
||||
window['AscDFH'].CChangesOFormDocumentUserMaster = CChangesOFormDocumentUserMaster;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesDictionaryBase}
|
||||
*/
|
||||
function CChangesOFormDocumentFieldMaster(Class, fieldMasterId, isAdd)
|
||||
{
|
||||
window['AscDFH'].CChangesDictionaryBase.call(this, Class, fieldMasterId, isAdd);
|
||||
}
|
||||
window['AscDFH'].InheritDictionaryChange(
|
||||
CChangesOFormDocumentFieldMaster,
|
||||
window['AscDFH'].historyitem_OForm_Document_FieldMaster,
|
||||
function()
|
||||
{
|
||||
let field = AscCommon.g_oTableId.GetById(this.Key);
|
||||
if (-1 === this.Class.FieldMasters.indexOf(field))
|
||||
this.Class.FieldMasters.push(field);
|
||||
},
|
||||
function()
|
||||
{
|
||||
let field = AscCommon.g_oTableId.GetById(this.Key);
|
||||
let index = this.Class.FieldMasters.indexOf(field);
|
||||
if (-1 !== index)
|
||||
this.Class.FieldMasters.splice(index, 1);
|
||||
}
|
||||
);
|
||||
window['AscDFH'].CChangesOFormDocumentFieldMaster = CChangesOFormDocumentFieldMaster;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesBaseStringProperty}
|
||||
*/
|
||||
function CChangesOFormDocumentDefaultUser(Class, Old, New)
|
||||
{
|
||||
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
|
||||
}
|
||||
window['AscDFH'].InheritPropertyChange(
|
||||
CChangesOFormDocumentDefaultUser,
|
||||
window['AscDFH'].CChangesBaseStringProperty,
|
||||
window['AscDFH'].historyitem_OForm_Document_DefaultUser,
|
||||
function(value)
|
||||
{
|
||||
let document = this.Class;
|
||||
let userMaster = AscCommon.g_oTableId.GetById(value);
|
||||
if (userMaster)
|
||||
{
|
||||
userMaster.setParent(document);
|
||||
document.DefaultUser = userMaster;
|
||||
}
|
||||
},
|
||||
false
|
||||
);
|
||||
window['AscDFH'].CChangesOFormDocumentDefaultUser = CChangesOFormDocumentDefaultUser;
|
||||
|
||||
})(window);
|
||||
146
oform/format/changes/FieldGroupChanges.js
Normal file
146
oform/format/changes/FieldGroupChanges.js
Normal file
@ -0,0 +1,146 @@
|
||||
/*
|
||||
* (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
|
||||
*
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
(function(window)
|
||||
{
|
||||
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
|
||||
* @extends {window['AscDFH'].CChangesBaseLongProperty}
|
||||
*/
|
||||
function CChangesOFormFieldGroupWeight(Class, Old, New)
|
||||
{
|
||||
window['AscDFH'].CChangesBaseLongProperty.call(this, Class, Old, New);
|
||||
}
|
||||
window['AscDFH'].InheritPropertyChange(
|
||||
CChangesOFormFieldGroupWeight,
|
||||
window['AscDFH'].CChangesBaseLongProperty,
|
||||
window['AscDFH'].historyitem_OForm_FieldGroup_Weight,
|
||||
function(value)
|
||||
{
|
||||
this.Class.Weight = value;
|
||||
this.Class.onChange();
|
||||
},
|
||||
false
|
||||
);
|
||||
window['AscDFH'].CChangesOFormFieldGroupWeight = CChangesOFormFieldGroupWeight;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesDictionaryBase}
|
||||
*/
|
||||
function CChangesOFormFieldGroupAddRemoveField(Class, fieldId, isAdd)
|
||||
{
|
||||
window['AscDFH'].CChangesDictionaryBase.call(this, Class, fieldId, isAdd);
|
||||
}
|
||||
window['AscDFH'].InheritDictionaryChange(
|
||||
CChangesOFormFieldGroupAddRemoveField,
|
||||
window['AscDFH'].historyitem_OForm_FieldGroup_AddRemoveField,
|
||||
function()
|
||||
{
|
||||
let field = AscCommon.g_oTableId.GetById(this.Key);
|
||||
if (-1 === this.Class.Fields.indexOf(field))
|
||||
this.Class.Fields.push(field);
|
||||
|
||||
this.Class.onChange();
|
||||
},
|
||||
function()
|
||||
{
|
||||
let field = AscCommon.g_oTableId.GetById(this.Key);
|
||||
let index = this.Class.Fields.indexOf(field);
|
||||
if (-1 !== index)
|
||||
this.Class.Fields.splice(index, 1);
|
||||
|
||||
this.Class.onChange();
|
||||
}
|
||||
);
|
||||
window['AscDFH'].CChangesOFormFieldGroupAddRemoveField = CChangesOFormFieldGroupAddRemoveField;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesDictionaryBase}
|
||||
*/
|
||||
function CChangesOFormFieldGroupAddRemoveUser(Class, userMasterId, isAdd)
|
||||
{
|
||||
window['AscDFH'].CChangesDictionaryBase.call(this, Class, userMasterId, isAdd);
|
||||
}
|
||||
window['AscDFH'].InheritDictionaryChange(
|
||||
CChangesOFormFieldGroupAddRemoveUser,
|
||||
window['AscDFH'].historyitem_OForm_FieldGroup_AddRemoveUser,
|
||||
function()
|
||||
{
|
||||
let userMaster = AscCommon.g_oTableId.GetById(this.Key);
|
||||
if (-1 === this.Class.Users.indexOf(userMaster))
|
||||
this.Class.Users.push(userMaster);
|
||||
|
||||
this.Class.onChange();
|
||||
},
|
||||
function()
|
||||
{
|
||||
let userMaster = AscCommon.g_oTableId.GetById(this.Key);
|
||||
let index = this.Class.Fields.indexOf(userMaster);
|
||||
if (-1 !== index)
|
||||
this.Class.Users.splice(index, 1);
|
||||
|
||||
this.Class.onChange();
|
||||
}
|
||||
);
|
||||
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);
|
||||
115
oform/format/changes/FieldMasterChanges.js
Normal file
115
oform/format/changes/FieldMasterChanges.js
Normal file
@ -0,0 +1,115 @@
|
||||
/*
|
||||
* (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
|
||||
*
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
(function(window)
|
||||
{
|
||||
window['AscDFH'].historyitem_OFormFieldMaster_FieldId = window['AscDFH'].historyitem_type_OForm_FieldMaster | 1;
|
||||
window['AscDFH'].historyitem_OFormFieldMaster_AddRemoveUser = window['AscDFH'].historyitem_type_OForm_FieldMaster | 2;
|
||||
window['AscDFH'].historyitem_OFormFieldMaster_AddRemoveSigner = window['AscDFH'].historyitem_type_OForm_FieldMaster | 3;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesBaseStringProperty}
|
||||
*/
|
||||
function CChangesOFormFieldMasterFieldId(Class, Old, New)
|
||||
{
|
||||
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
|
||||
}
|
||||
window['AscDFH'].InheritPropertyChange(
|
||||
CChangesOFormFieldMasterFieldId,
|
||||
window['AscDFH'].CChangesBaseStringProperty,
|
||||
window['AscDFH'].historyitem_OFormFieldMaster_FieldId,
|
||||
function(value)
|
||||
{
|
||||
this.Class.FieldId = value;
|
||||
},
|
||||
false
|
||||
);
|
||||
window['AscDFH'].CChangesOFormFieldMasterFieldId = CChangesOFormFieldMasterFieldId;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesDictionaryBase}
|
||||
*/
|
||||
function CChangesOFormFieldMasterAddRemoveUser(Class, userId, isAdd)
|
||||
{
|
||||
window['AscDFH'].CChangesDictionaryBase.call(this, Class, userId, isAdd);
|
||||
}
|
||||
window['AscDFH'].InheritDictionaryChange(
|
||||
CChangesOFormFieldMasterAddRemoveUser,
|
||||
window['AscDFH'].historyitem_OFormFieldMaster_AddRemoveUser,
|
||||
function()
|
||||
{
|
||||
let user = AscCommon.g_oTableId.GetById(this.Key);
|
||||
if (-1 === this.Class.Users.indexOf(user))
|
||||
this.Class.Users.push(user);
|
||||
},
|
||||
function()
|
||||
{
|
||||
let user = AscCommon.g_oTableId.GetById(this.Key);
|
||||
let index = this.Class.Users.indexOf(user);
|
||||
if (-1 !== index)
|
||||
this.Class.Users.splice(index, 1);
|
||||
}
|
||||
);
|
||||
window['AscDFH'].CChangesOFormFieldMasterAddRemoveUser = CChangesOFormFieldMasterAddRemoveUser;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesDictionaryBase}
|
||||
*/
|
||||
function CChangesOFormFieldMasterAddRemoveSigner(Class, userId, isAdd)
|
||||
{
|
||||
window['AscDFH'].CChangesDictionaryBase.call(this, Class, userId, isAdd);
|
||||
}
|
||||
window['AscDFH'].InheritDictionaryChange(
|
||||
CChangesOFormFieldMasterAddRemoveSigner,
|
||||
window['AscDFH'].historyitem_OFormFieldMaster_AddSigner,
|
||||
function()
|
||||
{
|
||||
let user = AscCommon.g_oTableId.GetById(this.Key);
|
||||
if (-1 === this.Class.Signers.indexOf(user))
|
||||
this.Class.Signers.push(user);
|
||||
},
|
||||
function()
|
||||
{
|
||||
let user = AscCommon.g_oTableId.GetById(this.Key);
|
||||
let index = this.Class.Signers.indexOf(user);
|
||||
if (-1 !== index)
|
||||
this.Class.Signers.splice(index, 1);
|
||||
}
|
||||
);
|
||||
window['AscDFH'].CChangesOFormFieldMasterAddRemoveSigner = CChangesOFormFieldMasterAddRemoveSigner;
|
||||
|
||||
})(window);
|
||||
110
oform/format/changes/UserChanges.js
Normal file
110
oform/format/changes/UserChanges.js
Normal file
@ -0,0 +1,110 @@
|
||||
/*
|
||||
* (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
|
||||
*
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
(function(window)
|
||||
{
|
||||
window['AscDFH'].historyitem_OForm_User_UserMaster = window['AscDFH'].historyitem_type_OForm_User | 1;
|
||||
window['AscDFH'].historyitem_OForm_User_Email = window['AscDFH'].historyitem_type_OForm_User | 2;
|
||||
window['AscDFH'].historyitem_OForm_User_Telephone = window['AscDFH'].historyitem_type_OForm_User | 3;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesBaseStringProperty}
|
||||
*/
|
||||
function CChangesOFormUserUserMaster(Class, Old, New)
|
||||
{
|
||||
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
|
||||
}
|
||||
window['AscDFH'].InheritPropertyChange(
|
||||
CChangesOFormUserUserMaster,
|
||||
window['AscDFH'].CChangesBaseStringProperty,
|
||||
window['AscDFH'].historyitem_OForm_User_UserMaster,
|
||||
function(value)
|
||||
{
|
||||
if (!value)
|
||||
{
|
||||
this.Class.UserMaster = undefined;
|
||||
}
|
||||
else
|
||||
{
|
||||
let userMaster = AscCommon.g_oTableId.Get_ById(value);
|
||||
if (userMaster)
|
||||
this.Class.UserMaster = userMaster;
|
||||
}
|
||||
},
|
||||
false
|
||||
);
|
||||
window['AscDFH'].CChangesOFormUserUserMaster = CChangesOFormUserUserMaster;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesBaseStringProperty}
|
||||
*/
|
||||
function CChangesOFormUserEmail(Class, Old, New)
|
||||
{
|
||||
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
|
||||
}
|
||||
window['AscDFH'].InheritPropertyChange(
|
||||
CChangesOFormUserEmail,
|
||||
window['AscDFH'].CChangesBaseStringProperty,
|
||||
window['AscDFH'].historyitem_OForm_User_Email,
|
||||
function(value)
|
||||
{
|
||||
this.Class.Email = value;
|
||||
},
|
||||
false
|
||||
);
|
||||
window['AscDFH'].CChangesOFormUserEmail = CChangesOFormUserEmail;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesBaseStringProperty}
|
||||
*/
|
||||
function CChangesOFormUserTelephone(Class, Old, New)
|
||||
{
|
||||
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
|
||||
}
|
||||
window['AscDFH'].InheritPropertyChange(
|
||||
CChangesOFormUserTelephone,
|
||||
window['AscDFH'].CChangesBaseStringProperty,
|
||||
window['AscDFH'].historyitem_OForm_User_Telephone,
|
||||
function(value)
|
||||
{
|
||||
this.Class.Telephone = value;
|
||||
},
|
||||
false
|
||||
);
|
||||
window['AscDFH'].CChangesOFormUserTelephone = CChangesOFormUserTelephone;
|
||||
|
||||
})(window);
|
||||
108
oform/format/changes/UserMasterChanges.js
Normal file
108
oform/format/changes/UserMasterChanges.js
Normal file
@ -0,0 +1,108 @@
|
||||
/*
|
||||
* (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
|
||||
*
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
(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;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesBaseStringProperty}
|
||||
*/
|
||||
function CChangesOFormUserMasterUserId(Class, Old, New)
|
||||
{
|
||||
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
|
||||
}
|
||||
window['AscDFH'].InheritPropertyChange(
|
||||
CChangesOFormUserMasterUserId,
|
||||
window['AscDFH'].CChangesBaseStringProperty,
|
||||
window['AscDFH'].historyitem_OForm_UserMaster_UserId,
|
||||
function(Value)
|
||||
{
|
||||
this.Class.UserId = Value;
|
||||
this.Class.onChange();
|
||||
},
|
||||
false
|
||||
);
|
||||
window['AscDFH'].CChangesOFormUserMasterUserId = CChangesOFormUserMasterUserId;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesBaseStringProperty}
|
||||
*/
|
||||
function CChangesOFormUserMasterRole(Class, Old, New)
|
||||
{
|
||||
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
|
||||
}
|
||||
window['AscDFH'].InheritPropertyChange(
|
||||
CChangesOFormUserMasterRole,
|
||||
window['AscDFH'].CChangesBaseStringProperty,
|
||||
window['AscDFH'].historyitem_OForm_UserMaster_Role,
|
||||
function(Value)
|
||||
{
|
||||
this.Class.Role = Value;
|
||||
this.Class.onChange();
|
||||
},
|
||||
false
|
||||
);
|
||||
window['AscDFH'].CChangesOFormUserMasterRole = CChangesOFormUserMasterRole;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {window['AscDFH'].CChangesBaseObjectProperty}
|
||||
*/
|
||||
function CChangesOFormUserMasterColor(Class, Old, New)
|
||||
{
|
||||
window['AscDFH'].CChangesBaseObjectProperty.call(this, Class, Old, New);
|
||||
}
|
||||
window['AscDFH'].InheritPropertyChange(
|
||||
CChangesOFormUserMasterColor,
|
||||
window['AscDFH'].CChangesBaseObjectProperty,
|
||||
window['AscDFH'].historyitem_OForm_UserMaster_Color,
|
||||
function(value)
|
||||
{
|
||||
this.Class.Color = value;
|
||||
this.Class.onChange();
|
||||
},
|
||||
false
|
||||
);
|
||||
CChangesOFormUserMasterColor.prototype.private_CreateObject = function()
|
||||
{
|
||||
return new AscWord.CDocumentColor(0, 0, 0);
|
||||
};
|
||||
window['AscDFH'].CChangesOFormUserMasterColor = CChangesOFormUserMasterColor;
|
||||
|
||||
})(window);
|
||||
300
oform/xml/XmlContext.js
Normal file
300
oform/xml/XmlContext.js
Normal file
@ -0,0 +1,300 @@
|
||||
/*
|
||||
* (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
|
||||
*
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
(function(window)
|
||||
{
|
||||
const PATH_USERS = "/users/";
|
||||
const PATH_USER_MASTERS = "/userMasters/";
|
||||
const PATH_FIELDS = "/fields/";
|
||||
const PATH_FIELD_MASTERS = "/fieldMasters/";
|
||||
|
||||
/**
|
||||
* Класс для работы с ссылками внутри xml структуры во время чтения
|
||||
* @constructor
|
||||
*/
|
||||
function XmlReaderContext(pkg)
|
||||
{
|
||||
this.pkg = pkg;
|
||||
|
||||
this.pathToUser = {};
|
||||
this.pathToUserMaster = {};
|
||||
this.pathToField = {};
|
||||
this.pathToFieldMaster = {};
|
||||
}
|
||||
XmlReaderContext.prototype.getOformContext = function()
|
||||
{
|
||||
return this;
|
||||
};
|
||||
XmlReaderContext.prototype.getUser = function(path)
|
||||
{
|
||||
let user = this.pathToUser[path];
|
||||
if (user)
|
||||
return user;
|
||||
|
||||
let reader = this.getXmlReader(path);
|
||||
if (!reader)
|
||||
return null;
|
||||
|
||||
user = AscOForm.CUser.fromXml(reader);
|
||||
this.pathToUser[path] = user;
|
||||
return user;
|
||||
};
|
||||
XmlReaderContext.prototype.getUserMaster = function(path)
|
||||
{
|
||||
let userMaster = this.pathToUserMaster[path];
|
||||
if (userMaster)
|
||||
return userMaster;
|
||||
|
||||
let reader = this.getXmlReader(path);
|
||||
if (!reader)
|
||||
return null;
|
||||
|
||||
userMaster = AscOForm.CUserMaster.fromXml(reader);
|
||||
this.pathToUserMaster[path] = userMaster;
|
||||
return userMaster;
|
||||
};
|
||||
XmlReaderContext.prototype.getField = function(path)
|
||||
{
|
||||
let field = this.pathToField[path];
|
||||
if (field)
|
||||
return field;
|
||||
|
||||
let reader = this.getXmlReader(path);
|
||||
if (!reader)
|
||||
return null;
|
||||
|
||||
return null;
|
||||
|
||||
// TODO: implement
|
||||
// field = AscOForm.CField.fromXml(reader);
|
||||
// this.pathToField[path] = field;
|
||||
// return field;
|
||||
};
|
||||
XmlReaderContext.prototype.getFieldMaster = function(path)
|
||||
{
|
||||
let fieldMaster = this.pathToFieldMaster[path];
|
||||
if (fieldMaster)
|
||||
return fieldMaster;
|
||||
|
||||
let reader = this.getXmlReader(path);
|
||||
if (!reader)
|
||||
return null;
|
||||
|
||||
fieldMaster = AscOForm.CFieldMaster.fromXml(reader);
|
||||
this.pathToFieldMaster[path] = fieldMaster;
|
||||
return fieldMaster;
|
||||
};
|
||||
XmlReaderContext.prototype.getAllUsers = function()
|
||||
{
|
||||
return this.getAllByMapAndPath(this.pathToUser, PATH_USERS, AscOForm.CUser.fromXml);
|
||||
};
|
||||
XmlReaderContext.prototype.getAllUserMasters = function()
|
||||
{
|
||||
return this.getAllByMapAndPath(this.pathToUserMaster, PATH_USER_MASTERS, AscOForm.CUserMaster.fromXml);
|
||||
};
|
||||
XmlReaderContext.prototype.getAllFields = function()
|
||||
{
|
||||
// TODO: Implement
|
||||
return [];
|
||||
//return this.getAllByMapAndPath(this.pathToField, PATH_FIELDS, AscOForm.CField.fromXml);
|
||||
};
|
||||
XmlReaderContext.prototype.getAllFieldMasters = function()
|
||||
{
|
||||
return this.getAllByMapAndPath(this.pathToFieldMaster, PATH_FIELD_MASTERS, AscOForm.CFieldMaster.fromXml);
|
||||
};
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Private area
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
XmlReaderContext.prototype.getXmlReader = function(path)
|
||||
{
|
||||
let part = this.pkg.getPartByUri(path);
|
||||
if (!part)
|
||||
return null;
|
||||
|
||||
let partContent = part.getDocumentContent();
|
||||
if (!partContent)
|
||||
return null;
|
||||
|
||||
let xmlParserContext = new AscCommon.XmlParserContext();
|
||||
xmlParserContext.setOformContext(this);
|
||||
return new AscCommon.StaxParser(partContent, part, xmlParserContext);
|
||||
};
|
||||
XmlReaderContext.prototype.getAllByMapAndPath = function(map, path, fromXml)
|
||||
{
|
||||
let result = [];
|
||||
for (let key in map)
|
||||
{
|
||||
result.push(map[key]);
|
||||
}
|
||||
|
||||
for (let uri in this.pkg.parts)
|
||||
{
|
||||
if (uri.startsWith(path)
|
||||
&& uri.endsWith(".xml")
|
||||
&& !map[uri])
|
||||
{
|
||||
let reader = this.getXmlReader(uri);
|
||||
if (!reader)
|
||||
return;
|
||||
|
||||
let element = fromXml(reader);
|
||||
if (element)
|
||||
{
|
||||
map[uri] = element;
|
||||
result.push(element);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
//--------------------------------------------------------export----------------------------------------------------
|
||||
AscOForm.XmlReaderContext = XmlReaderContext;
|
||||
|
||||
|
||||
/**
|
||||
* Класс для работы с ссылками внутри xml структуры во время записи
|
||||
* @constructor
|
||||
*/
|
||||
function XmlWriterContext(pkg)
|
||||
{
|
||||
this.pkg = pkg;
|
||||
|
||||
this.userToPart = {};
|
||||
this.userMasterToPart = {};
|
||||
this.fieldToPart = {};
|
||||
this.fieldMasterToPart = {};
|
||||
|
||||
this.partToRId = {};
|
||||
}
|
||||
XmlWriterContext.prototype.clearCurrentPartDataMaps = function()
|
||||
{
|
||||
this.partToRId = {};
|
||||
};
|
||||
XmlWriterContext.prototype.getRId = function(part)
|
||||
{
|
||||
if (this.partToRId[part.uri])
|
||||
return this.partToRId[part.uri];
|
||||
|
||||
if (!this.part)
|
||||
return "";
|
||||
|
||||
let target = part.uri;
|
||||
let base = this.part.uri;
|
||||
|
||||
if (target.startsWith('/'))
|
||||
target = target.substring(1);
|
||||
if (base.startsWith('/'))
|
||||
base = base.substring(1);
|
||||
|
||||
let baseSplit = base.split('/');
|
||||
let targetSplit = target.split('/');
|
||||
|
||||
while (baseSplit.length && targetSplit.length && baseSplit[0] === targetSplit[0])
|
||||
{
|
||||
baseSplit.shift();
|
||||
targetSplit.shift()
|
||||
}
|
||||
|
||||
let relative = "";
|
||||
for (let index = 0, count = baseSplit.length - 1; index < count; ++index)
|
||||
{
|
||||
relative += "../";
|
||||
}
|
||||
|
||||
relative += targetSplit.join('/');
|
||||
|
||||
let rId = this.part.addRelationship(null, relative);
|
||||
this.partToRId[part.uri] = rId;
|
||||
return rId;
|
||||
};
|
||||
XmlWriterContext.prototype.getUserPart = function(user)
|
||||
{
|
||||
return this.getPartFromPkg(this.userToPart, user, AscCommon.openXml.Types.oformUser);
|
||||
};
|
||||
XmlWriterContext.prototype.haveUserPart = function(user)
|
||||
{
|
||||
return !!this.userToPart[user.GetId()];
|
||||
};
|
||||
XmlWriterContext.prototype.getUserMasterPart = function(userMaster)
|
||||
{
|
||||
return this.getPartFromPkg(this.userMasterToPart, userMaster, AscCommon.openXml.Types.oformUserMaster);
|
||||
};
|
||||
XmlWriterContext.prototype.getDefaultUserMasterPart = function(userMaster)
|
||||
{
|
||||
return this.getPartFromPkg(this.userMasterToPart, userMaster, AscCommon.openXml.Types.oformDefaultUserMaster);
|
||||
};
|
||||
XmlWriterContext.prototype.haveUserMasterPart = function(userMaster)
|
||||
{
|
||||
return !!this.userMasterToPart[userMaster.GetId()];
|
||||
};
|
||||
XmlWriterContext.prototype.getFieldPart = function(field)
|
||||
{
|
||||
return this.getPartFromPkg(this.fieldToPart, field, AscCommon.openXml.Types.oformField);
|
||||
};
|
||||
XmlWriterContext.prototype.haveFieldPart = function(field)
|
||||
{
|
||||
return !!this.fieldToPart[field.GetId()];
|
||||
};
|
||||
XmlWriterContext.prototype.getFieldMasterPart = function(fieldMaster)
|
||||
{
|
||||
return this.getPartFromPkg(this.fieldMasterToPart, fieldMaster, AscCommon.openXml.Types.oformFieldMaster);
|
||||
};
|
||||
XmlWriterContext.prototype.haveFieldMasterPart = function(fieldMaster)
|
||||
{
|
||||
return !!this.fieldMasterToPart[fieldMaster];
|
||||
};
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Private area
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
XmlWriterContext.prototype.getPartFromPkg = function(map, object, contentType)
|
||||
{
|
||||
let objectId = object.GetId();
|
||||
if (map[objectId])
|
||||
return map[objectId];
|
||||
|
||||
let part = this.pkg.addPart(contentType).part;
|
||||
|
||||
let xmlWriter = new AscCommon.CMemory();
|
||||
xmlWriter.context = this;
|
||||
|
||||
part.setDataXml(object, xmlWriter);
|
||||
|
||||
map[objectId] = part;
|
||||
return part;
|
||||
};
|
||||
//--------------------------------------------------------export----------------------------------------------------
|
||||
AscOForm.XmlWriterContext = XmlWriterContext;
|
||||
|
||||
})(window);
|
||||
129
oform/xml/XmlPackage.js
Normal file
129
oform/xml/XmlPackage.js
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user