@magic-xpa/engine 4.900.0-dev491.7 → 4.901.0-dev491.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1205,7 +1205,8 @@ class MgControl extends MgControlBase {
1205
1205
  if (!isTagProcessed) {
1206
1206
  switch (attribute) {
1207
1207
  case ConstInterface.MG_ATTR_SUBFORM_TASK:
1208
- this._subformTaskId = valueStr;
1208
+ if (valueStr.trim() != "")
1209
+ this._subformTaskId = valueStr;
1209
1210
  break;
1210
1211
  case ConstInterface.MG_ATTR_REFRESHON:
1211
1212
  this.refreshOnString = valueStr.trim();
@@ -4132,9 +4133,10 @@ class Scrambler {
4132
4133
  if (high > (sqrt / 2))
4133
4134
  high = Math.floor(sqrt / 2);
4134
4135
  delta = (Math.random() * (high - low)) + low;
4136
+ delta = Math.floor(delta);
4135
4137
  if (delta === Scrambler.XML_ILLEGAL_RANDOM)
4136
4138
  delta++;
4137
- return Math.floor(delta);
4139
+ return delta;
4138
4140
  }
4139
4141
  static UnScramble(inVal, beginOffSet, endOffSet) {
4140
4142
  if (!Scrambler.ScramblingEnabled) {
@@ -6124,17 +6126,22 @@ class LanguageData {
6124
6126
  if (this._mlsContent.length > 0) {
6125
6127
  let linePairs = 0;
6126
6128
  let srcLine = this._mlsContent + 3;
6129
+ let transLine;
6127
6130
  this._mlsStrings = new Hashtable();
6128
- let linesStr = this._mlsContent.substring(this._mlsContent.length - MLS_EOF_CHARS_TO_READ, 8);
6131
+ let linesStr = this._mlsContent.substr(this._mlsContent.length - MLS_EOF_CHARS_TO_READ, 8);
6129
6132
  linePairs = parseInt(linesStr.toString(), 16);
6130
6133
  let tokens = StrUtil.tokenize(srcLine.toString(), "\n");
6131
- for (let line = 0; line < linePairs * 2; line += 2) {
6132
- if (this._mlsStrings.get_Item(tokens[line].toString()) == null)
6133
- this._mlsStrings.set_Item(tokens[line].toString(), tokens[line + 1].toString());
6134
+ for (let pairNum = 0; pairNum < linePairs * 2; pairNum += 2) {
6135
+ srcLine = tokens[pairNum].substr(0, tokens[pairNum].length - 1);
6136
+ transLine = tokens[pairNum + 1].substr(0, tokens[pairNum + 1].length - 1);
6137
+ if (this._mlsStrings.get_Item(srcLine.toString()) == null)
6138
+ this._mlsStrings.set_Item(srcLine.toString(), transLine);
6134
6139
  }
6135
6140
  }
6136
6141
  }
6137
6142
  else if (this._mlsFileUrl != null) {
6143
+ if (this._mlsFileUrl.startsWith("./"))
6144
+ this._mlsFileUrl = NString.Replace(this._mlsFileUrl, './', './assets/cache/');
6138
6145
  let contentStr = await CommandsProcessorManager.GetContent(this._mlsFileUrl, true);
6139
6146
  let buffer = contentStr;
6140
6147
  if (buffer != null && buffer.length > 0) {
@@ -9261,8 +9268,8 @@ class Operation {
9261
9268
  if (rtEvnt !== null) {
9262
9269
  this._routeParams = rtEvnt.getRouteParamList();
9263
9270
  if ((await rtEvnt.getArgList().getArg(0).getValue(StorageAttribute.ALPHA, 0)).trim() === this._routerPath &&
9264
- ((rtEvnt.getArgList().getArg(1).skipArg()) ||
9265
- (await rtEvnt.getArgList().getArg(1).getValue(StorageAttribute.ALPHA, 0)).trim() === this._originalRouterOutletName))
9271
+ ((rtEvnt.getArgList().getArg(1).skipArg() && destSubForm === this._task.getForm().DefaultRouterOutlet) ||
9272
+ (!rtEvnt.getArgList().getArg(1).skipArg() && (await rtEvnt.getArgList().getArg(1).getValue(StorageAttribute.ALPHA, 0)).trim() === this._originalRouterOutletName)))
9266
9273
  canRoute = true;
9267
9274
  if (!canRoute)
9268
9275
  return false;
@@ -10125,7 +10132,7 @@ class CookieService {
10125
10132
  var cookie = cookies[i];
10126
10133
  var eqPos = cookie.indexOf('=');
10127
10134
  var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
10128
- if (cookieName === decodeURI(name)) {
10135
+ if (cookieName === NString.TrimStart(decodeURI(name))) {
10129
10136
  document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:00 GMT';
10130
10137
  return true;
10131
10138
  }
@@ -14195,7 +14202,7 @@ class ExpressionEvaluator extends GuiExpressionEvaluator {
14195
14202
  }
14196
14203
  path = args[3];
14197
14204
  domain = args[4];
14198
- resVal.BoolVal = CookieService.setCookie(cookieName, args[0], nativeDt, path, domain, secure, sameSite);
14205
+ resVal.BoolVal = CookieService.setCookie(cookieName, (args[0] != null ? args[0].toString() : ""), nativeDt, path, domain, secure, sameSite);
14199
14206
  }
14200
14207
  eval_op_get_cookie(cookieName, resVal) {
14201
14208
  resVal.StrVal = CookieService.getCookie(cookieName);
@@ -16261,7 +16268,8 @@ class Field extends FieldBase {
16261
16268
  }
16262
16269
  break;
16263
16270
  case ConstInterface.MG_ATTR_CHACHED_FLD_ID:
16264
- this.CacheTableFldIdx = NNumber.Parse(data[1]);
16271
+ if (data[0] != "")
16272
+ this.CacheTableFldIdx = NNumber.Parse(data[1]);
16265
16273
  break;
16266
16274
  case ConstInterface.MG_ATTR_LOCATE:
16267
16275
  this.Locate = new Boundary(this.getTask(), NNumber.Parse(data[1]), NNumber.Parse(data[0]), this.getType(), this.getSize(), this.CacheTableFldIdx);
@@ -19407,6 +19415,7 @@ class MgForm extends MgFormBase {
19407
19415
  try {
19408
19416
  await this.RefreshDisplay(Constants.TASK_REFRESH_FORM);
19409
19417
  await this.setCurrRowByDisplayLine(this.GetDataview().getTopRecIdx() + this.getLastValidRow(), false, true);
19418
+ visibleLine = this.getLastValidRow();
19410
19419
  }
19411
19420
  catch (Exception) {
19412
19421
  }
@@ -20442,8 +20451,8 @@ class RemoteTaskService extends TaskServiceBase {
20442
20451
  OwnerTransactionTask = task.DataviewManager.RemoteDataviewManager.Transaction.OwnerTask;
20443
20452
  return OwnerTransactionTask;
20444
20453
  }
20445
- static PreparePropMainDisplay(task) {
20446
- task.ComputeMainDisplay();
20454
+ static async PreparePropMainDisplay(task) {
20455
+ await task.ComputeMainDisplay();
20447
20456
  return task.FormIsLegal() ? ReturnResult.SuccessfulResult : new ReturnResult(MsgInterface.BRKTAB_STR_ERR_FORM);
20448
20457
  }
20449
20458
  }
@@ -20843,15 +20852,18 @@ class RemoteDataviewHeader extends DataviewHeaderBase {
20843
20852
  setAttribute(attribute, valueStr) {
20844
20853
  switch (attribute) {
20845
20854
  case ConstInterface.MG_ATTR_CACHED_TABLE:
20846
- if (TableCacheManager.Instance.TableExists(valueStr))
20847
- this._table = TableCacheManager.Instance.GetTableById(valueStr);
20848
- else {
20849
- this._table = new TableCache(valueStr);
20850
- TableCacheManager.Instance.InsertTable(this._table);
20855
+ if (valueStr != "") {
20856
+ if (TableCacheManager.Instance.TableExists(valueStr))
20857
+ this._table = TableCacheManager.Instance.GetTableById(valueStr);
20858
+ else {
20859
+ this._table = new TableCache(valueStr);
20860
+ TableCacheManager.Instance.InsertTable(this._table);
20861
+ }
20851
20862
  }
20852
20863
  break;
20853
20864
  case ConstInterface.MG_ATTR_IDENT:
20854
- this._table.SetTableIdent(valueStr);
20865
+ if (valueStr != "")
20866
+ this._table.SetTableIdent(valueStr);
20855
20867
  break;
20856
20868
  default:
20857
20869
  super.setAttribute(attribute, valueStr);
@@ -21945,9 +21957,17 @@ class RecomputeTable {
21945
21957
  this.fillData_1(task.DataView, task, parser);
21946
21958
  }
21947
21959
  else
21948
- throw new ApplicationException("in RecomputeTable.fillData() invalid task id: ");
21960
+ parser.setCurrIndex(parser.getXMLdata().indexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex()) + 1);
21949
21961
  }
21950
21962
  fillData_1(dataView, task, parser) {
21963
+ if (parser.getNextTag() == XMLConstants.MG_TAG_RECOMPUTE) {
21964
+ let currrentIndex = parser.getCurrIndex();
21965
+ let encoded = parser.ReadContentOfCurrentElement().trim();
21966
+ let decoded = Base64.decode(encoded.substr(0, encoded.length).trim());
21967
+ let newXmlData = parser.getXMLdata().replace(encoded.trim(), decoded);
21968
+ parser.setXMLdata(newXmlData);
21969
+ parser.setCurrIndex(currrentIndex);
21970
+ }
21951
21971
  while (this.initInnerObjects(parser, parser.getNextTag(), dataView, task)) {
21952
21972
  }
21953
21973
  }
@@ -22693,10 +22713,12 @@ class Task extends TaskBase {
22693
22713
  this.setDescriptor(valueStr);
22694
22714
  break;
22695
22715
  case ConstInterface.MG_ATTR_HAS_LOCATE:
22696
- this.hasLocate = true;
22716
+ if (+valueStr == 1)
22717
+ this.hasLocate = true;
22697
22718
  break;
22698
22719
  case ConstInterface.MG_ATTR_AS_PARENT:
22699
- this.ModeAsParent = true;
22720
+ if (+valueStr == 1)
22721
+ this.ModeAsParent = true;
22700
22722
  break;
22701
22723
  case ConstInterface.MG_ATTR_TASK_UNIQUE_SORT:
22702
22724
  this.UniqueSort = valueStr[0];
@@ -23023,6 +23045,7 @@ class Task extends TaskBase {
23023
23045
  result = await this.DataviewManager.Execute(dataViewCommand);
23024
23046
  if (!result.Success)
23025
23047
  return null;
23048
+ this.ResumeSubformLayout();
23026
23049
  }
23027
23050
  nonInteractiveTask = await this.StartSubTasks(moveToFirstControl, nonInteractiveTask, callByDestSubForm);
23028
23051
  this.InStartProcess = false;
@@ -24646,16 +24669,16 @@ class Task extends TaskBase {
24646
24669
  }
24647
24670
  }
24648
24671
  }
24649
- ComputeMainDisplay() {
24672
+ async ComputeMainDisplay() {
24650
24673
  let propMainDisplay = this.getProp(PropInterface.PROP_TYPE_MAIN_DISPLAY);
24651
- let mainDisplayIndex = propMainDisplay.GetComputedValueInteger();
24674
+ let mainDisplayIndex = await propMainDisplay.getValueInt();
24652
24675
  mainDisplayIndex = this.GetRealMainDisplayIndexOnCurrentTask(mainDisplayIndex);
24653
24676
  this._forms.InitFormFromXmlString(mainDisplayIndex);
24654
24677
  this.EnsureValidForm();
24655
24678
  }
24656
24679
  async PrepareTaskForm() {
24657
24680
  await TaskServiceBase.PreparePropOpenTaskWindow(this);
24658
- return RemoteTaskService.PreparePropMainDisplay(this);
24681
+ return await RemoteTaskService.PreparePropMainDisplay(this);
24659
24682
  }
24660
24683
  FormIsLegal() {
24661
24684
  let isFormIsLegal = super.isMainProg();
@@ -24724,7 +24747,12 @@ class Task extends TaskBase {
24724
24747
  let tokensVector = XmlParser.getTokens(RuntimeContextBase.Instance.Parser.getXMLsubstring(endTaskUrlIdx), XMLConstants.XML_ATTR_DELIM);
24725
24748
  let taskCacheURL = tokensVector.get_Item(1);
24726
24749
  let refListStr = tokensVector.get_Item(3);
24727
- let taskContentOriginal = await Task.CommandsProcessor.GetContent(taskCacheURL, true);
24750
+ let taskContentOriginal = "";
24751
+ if (taskCacheURL.trim() != "") {
24752
+ if (taskCacheURL.startsWith("./"))
24753
+ taskCacheURL = NString.Replace(taskCacheURL, './', './assets/cache/');
24754
+ taskContentOriginal = await Task.CommandsProcessor.GetContent(taskCacheURL, true);
24755
+ }
24728
24756
  let taskContentFinal = new StringBuilder(xmlData.substr(0, RuntimeContextBase.Instance.Parser.getCurrIndex() - (ConstInterface.MG_TAG_TASKURL.length + 1)), taskContentOriginal.length);
24729
24757
  let reflist = this.getReflist(refListStr, ';', true, -1);
24730
24758
  let refListIdx = 0;
@@ -26924,7 +26952,7 @@ class EventsManager {
26924
26952
  val = Manager.GetCtrlVal(ctrl);
26925
26953
  task.CurrentEditingControl = null;
26926
26954
  if (!task.cancelWasRaised() &&
26927
- (ctrl.Type !== MgControlType.CTRL_TYPE_BROWSER && (!isNullOrUndefined(ctrl._field) && ctrl._field.getType() === StorageAttribute.DATE || val !== null) && typeof val != 'undefined' &&
26955
+ (ctrl.Type !== MgControlType.CTRL_TYPE_BROWSER && (!isNullOrUndefined(ctrl._field) && (ctrl._field.getType() === StorageAttribute.DATE || ctrl._field.getType() == StorageAttribute.NUMERIC) || val !== null) && typeof val != 'undefined' &&
26928
26956
  !await ctrl.validateAndSetValue(val, true))) {
26929
26957
  this.setStopExecution(true);
26930
26958
  return false;
@@ -29516,7 +29544,7 @@ class CommandsTable {
29516
29544
  }
29517
29545
  }
29518
29546
 
29519
- let CurrentClientVersion = '4.900.0-dev491.7';
29547
+ let CurrentClientVersion = '4.901.0-dev491.1';
29520
29548
 
29521
29549
  class ClientManager {
29522
29550
  constructor() {
@@ -29607,6 +29635,10 @@ class ClientManager {
29607
29635
  EventsManager.Instance.addGuiTriggeredEventWithTaskAndCodeAndLine(task, InternalInterface.MG_ACT_REC_PREFIX, dvRowIdx);
29608
29636
  }
29609
29637
  break;
29638
+ case "navigateInTable":
29639
+ if (guiEvent.ControlName === "magicRow")
29640
+ this.handleNavigateInRowEvent(task, guiEvent.Value);
29641
+ break;
29610
29642
  case "close":
29611
29643
  if (task.IsRoute())
29612
29644
  EventsManager.Instance.AddRouterClosedEvent(task);
@@ -29641,6 +29673,38 @@ class ClientManager {
29641
29673
  break;
29642
29674
  }
29643
29675
  }
29676
+ handleNavigateInRowEvent(task, evt) {
29677
+ let internalEvt = InternalInterface.MG_ACT_NONE;
29678
+ evt = evt.toLowerCase();
29679
+ switch (evt) {
29680
+ case "begin-page":
29681
+ internalEvt = InternalInterface.MG_ACT_TBL_BEGPAGE;
29682
+ break;
29683
+ case "previous-page":
29684
+ internalEvt = InternalInterface.MG_ACT_TBL_PRVPAGE;
29685
+ break;
29686
+ case "end-page":
29687
+ internalEvt = InternalInterface.MG_ACT_TBL_ENDPAGE;
29688
+ break;
29689
+ case "next-page":
29690
+ internalEvt = InternalInterface.MG_ACT_TBL_NXTPAGE;
29691
+ break;
29692
+ case "previous-line":
29693
+ internalEvt = InternalInterface.MG_ACT_TBL_PRVLINE;
29694
+ break;
29695
+ case "next-line":
29696
+ internalEvt = InternalInterface.MG_ACT_TBL_NXTLINE;
29697
+ break;
29698
+ case "begin-table":
29699
+ internalEvt = InternalInterface.MG_ACT_TBL_BEGTBL;
29700
+ break;
29701
+ case "end-table":
29702
+ internalEvt = InternalInterface.MG_ACT_TBL_ENDTBL;
29703
+ break;
29704
+ }
29705
+ if (internalEvt != InternalInterface.MG_ACT_NONE)
29706
+ EventsManager.Instance.addGuiTriggeredEventWithTaskAndCode(task, internalEvt);
29707
+ }
29644
29708
  ConfirmationClosed(res) {
29645
29709
  Commands.ResolvePromise(res);
29646
29710
  }
@@ -29777,15 +29841,20 @@ class ClientManager {
29777
29841
  }
29778
29842
  return pic;
29779
29843
  }
29780
- static GetFormattedValue(taskId, controlName, value) {
29844
+ static GetFormattedValue(taskId, controlName, value, rowId) {
29781
29845
  let pic = null;
29782
29846
  let task = MGDataCollection.Instance.GetTaskByID(taskId);
29783
29847
  let control = null;
29784
29848
  let newValue = value;
29785
- if (controlName !== null)
29849
+ if (controlName !== null && task !== null)
29786
29850
  control = task.getForm().GetCtrl(controlName);
29787
29851
  if (control != null && control.DataType == StorageAttribute.NUMERIC) {
29788
- pic = control.getPIC();
29852
+ if (control.isRepeatable() && control.getProp(PropInterface.PROP_TYPE_FORMAT).isExpression()) {
29853
+ let picval = control.getProp(PropInterface.PROP_TYPE_FORMAT).getPrevValue(+rowId);
29854
+ pic = new PIC(picval, StorageAttribute.NUMERIC, control.getForm().getTask().getCompIdx());
29855
+ }
29856
+ else
29857
+ pic = control.getPIC();
29789
29858
  let dispValue = String(value);
29790
29859
  let newPic = pic.getUnformattedNumericPic();
29791
29860
  let num = DisplayConvertor.Instance.toNum(dispValue, newPic, 0);
@@ -29886,8 +29955,8 @@ class MagicBridge {
29886
29955
  static GetControlPictureMask(taskId, controlName) {
29887
29956
  return ClientManager.GetControlPictureMask(taskId, controlName);
29888
29957
  }
29889
- static GetFormattedValue(taskId, controlName, value) {
29890
- return ClientManager.GetFormattedValue(taskId, controlName, value);
29958
+ static GetFormattedValue(taskId, controlName, value, rowId) {
29959
+ return ClientManager.GetFormattedValue(taskId, controlName, value, rowId);
29891
29960
  }
29892
29961
  static GetRangedValue(taskId, controlName, value) {
29893
29962
  return ClientManager.GetRangedValue(taskId, controlName, value);