@syncfusion/ej2-lists 22.2.11 → 23.1.36

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.
Files changed (73) hide show
  1. package/CHANGELOG.md +18 -54
  2. package/dist/ej2-lists.min.js +2 -2
  3. package/dist/ej2-lists.umd.min.js +2 -2
  4. package/dist/ej2-lists.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-lists.es2015.js +100 -218
  6. package/dist/es6/ej2-lists.es2015.js.map +1 -1
  7. package/dist/es6/ej2-lists.es5.js +108 -237
  8. package/dist/es6/ej2-lists.es5.js.map +1 -1
  9. package/dist/global/ej2-lists.min.js +2 -2
  10. package/dist/global/ej2-lists.min.js.map +1 -1
  11. package/dist/global/index.d.ts +1 -1
  12. package/package.json +9 -9
  13. package/src/common/list-base.d.ts +0 -6
  14. package/src/common/list-base.js +1 -1
  15. package/src/list-view/list-view-model.d.ts +7 -7
  16. package/src/list-view/list-view.d.ts +6 -6
  17. package/src/list-view/list-view.js +6 -18
  18. package/src/list-view/virtualization.d.ts +3 -3
  19. package/src/list-view/virtualization.js +101 -218
  20. package/styles/list-view/bootstrap-dark.scss +1 -1
  21. package/styles/list-view/bootstrap.scss +1 -1
  22. package/styles/list-view/bootstrap4.scss +1 -1
  23. package/styles/list-view/bootstrap5-dark.scss +1 -1
  24. package/styles/list-view/bootstrap5.scss +1 -1
  25. package/styles/list-view/fabric-dark.scss +1 -1
  26. package/styles/list-view/fabric.scss +1 -1
  27. package/styles/list-view/fluent-dark.scss +1 -1
  28. package/styles/list-view/fluent.scss +1 -1
  29. package/styles/list-view/highcontrast-light.scss +1 -1
  30. package/styles/list-view/highcontrast.scss +1 -1
  31. package/styles/list-view/material-dark.css +0 -1
  32. package/styles/list-view/material-dark.scss +1 -1
  33. package/styles/list-view/material.css +0 -1
  34. package/styles/list-view/material.scss +1 -1
  35. package/styles/list-view/material3-dark.css +0 -1
  36. package/styles/list-view/material3-dark.scss +1 -1
  37. package/styles/list-view/material3.css +0 -1
  38. package/styles/list-view/material3.scss +1 -1
  39. package/styles/list-view/tailwind-dark.css +0 -1
  40. package/styles/list-view/tailwind-dark.scss +1 -1
  41. package/styles/list-view/tailwind.css +0 -1
  42. package/styles/list-view/tailwind.scss +1 -1
  43. package/styles/material-dark.css +0 -1
  44. package/styles/material.css +0 -1
  45. package/styles/material3-dark.css +0 -1
  46. package/styles/material3-dark.scss +1 -1
  47. package/styles/material3.css +0 -1
  48. package/styles/material3.scss +1 -1
  49. package/styles/sortable/bootstrap-dark.scss +1 -1
  50. package/styles/sortable/bootstrap.scss +1 -1
  51. package/styles/sortable/bootstrap4.scss +1 -1
  52. package/styles/sortable/bootstrap5-dark.scss +1 -1
  53. package/styles/sortable/bootstrap5.scss +1 -1
  54. package/styles/sortable/fabric-dark.scss +1 -1
  55. package/styles/sortable/fabric.scss +1 -1
  56. package/styles/sortable/fluent-dark.scss +1 -1
  57. package/styles/sortable/fluent.scss +1 -1
  58. package/styles/sortable/highcontrast-light.scss +1 -1
  59. package/styles/sortable/highcontrast.scss +1 -1
  60. package/styles/sortable/material-dark.css +0 -1
  61. package/styles/sortable/material-dark.scss +1 -1
  62. package/styles/sortable/material.css +0 -1
  63. package/styles/sortable/material.scss +1 -1
  64. package/styles/sortable/material3-dark.css +0 -1
  65. package/styles/sortable/material3-dark.scss +1 -1
  66. package/styles/sortable/material3.css +0 -1
  67. package/styles/sortable/material3.scss +1 -1
  68. package/styles/sortable/tailwind-dark.css +0 -1
  69. package/styles/sortable/tailwind-dark.scss +1 -1
  70. package/styles/sortable/tailwind.css +0 -1
  71. package/styles/sortable/tailwind.scss +1 -1
  72. package/styles/tailwind-dark.css +0 -2
  73. package/styles/tailwind.css +0 -2
@@ -1,4 +1,4 @@
1
- import { Animation, Base, ChildProperty, Complex, Component, Draggable, Event, EventHandler, NotifyPropertyChanges, Property, SanitizeHtmlHelper, Touch, addClass, append, attributes, closest, compareElementParent, compile, detach, extend, formatUnit, getComponent, getUniqueID, getValue, isBlazor, isNullOrUndefined, isVisible, merge, prepend, remove, removeClass, rippleEffect } from '@syncfusion/ej2-base';
1
+ import { Animation, Base, ChildProperty, Complex, Component, Draggable, Event, EventHandler, NotifyPropertyChanges, Property, SanitizeHtmlHelper, Touch, addClass, animationMode, append, attributes, closest, compareElementParent, compile, detach, extend, formatUnit, getComponent, getUniqueID, getValue, isBlazor, isNullOrUndefined, isVisible, merge, prepend, remove, removeClass, rippleEffect } from '@syncfusion/ej2-base';
2
2
  import { DataManager, Query } from '@syncfusion/ej2-data';
3
3
  import { createCheckBox } from '@syncfusion/ej2-buttons';
4
4
 
@@ -280,7 +280,7 @@ var ListBase;
280
280
  li = generateLI(createElement, curItem, fieldData, fields, curOpt.itemClass, options, componentInstance);
281
281
  li.classList.add(cssClass.level + '-' + ariaAttributes.level);
282
282
  li.setAttribute('aria-level', ariaAttributes.level.toString());
283
- if (ariaAttributes.groupItemRole == 'presentation') {
283
+ if (ariaAttributes.groupItemRole == 'presentation' || ariaAttributes.itemRole == 'presentation') {
284
284
  li.removeAttribute('aria-level');
285
285
  }
286
286
  anchorElement = li.querySelector('.' + cssClass.anchorWrap);
@@ -1381,7 +1381,7 @@ let ListView = class ListView extends Component {
1381
1381
  this.element.style.overflow = 'hidden';
1382
1382
  this.aniObj.animate(fromView, {
1383
1383
  name: (reverse === true ? anim[0] : anim[1]),
1384
- duration: duration,
1384
+ duration: (duration === 0 && animationMode === 'Enable') ? 400 : duration,
1385
1385
  timingFunction: this.animation.easing,
1386
1386
  // eslint-disable-next-line
1387
1387
  end: (model) => {
@@ -1394,7 +1394,7 @@ let ListView = class ListView extends Component {
1394
1394
  toView.style.display = '';
1395
1395
  this.aniObj.animate(toView, {
1396
1396
  name: (reverse === true ? anim[2] : anim[3]),
1397
- duration: duration,
1397
+ duration: (duration === 0 && animationMode === 'Enable') ? 400 : duration,
1398
1398
  timingFunction: this.animation.easing,
1399
1399
  end: () => {
1400
1400
  this.trigger('actionComplete');
@@ -1406,7 +1406,7 @@ let ListView = class ListView extends Component {
1406
1406
  preRender() {
1407
1407
  if (this.template) {
1408
1408
  try {
1409
- if (document.querySelectorAll(this.template).length) {
1409
+ if (typeof this.template !== 'function' && document.querySelectorAll(this.template).length) {
1410
1410
  this.setProperties({ template: document.querySelector(this.template).innerHTML.trim() }, true);
1411
1411
  }
1412
1412
  }
@@ -1419,7 +1419,7 @@ let ListView = class ListView extends Component {
1419
1419
  headerTemplate: this.headerTemplate,
1420
1420
  groupTemplate: this.groupTemplate, expandCollapse: true, listClass: '',
1421
1421
  ariaAttributes: {
1422
- itemRole: 'listitem', listRole: 'group', itemText: '',
1422
+ itemRole: 'listitem', listRole: 'list', itemText: '',
1423
1423
  groupItemRole: 'presentation', wrapperRole: 'presentation'
1424
1424
  },
1425
1425
  // eslint-disable-next-line
@@ -2356,18 +2356,6 @@ let ListView = class ListView extends Component {
2356
2356
  if (this.enableVirtualization) {
2357
2357
  if (Object.keys(this.dataSource).length) {
2358
2358
  if ((this.template || this.groupTemplate) && !this.virtualizationModule.isNgTemplate()) {
2359
- if (this.isReact || this.isVue) {
2360
- if (typeof this.template == "string") {
2361
- this.listBaseOption.template = null;
2362
- }
2363
- if (typeof this.groupTemplate == "string") {
2364
- this.listBaseOption.groupTemplate = null;
2365
- }
2366
- }
2367
- else {
2368
- this.listBaseOption.template = null;
2369
- this.listBaseOption.groupTemplate = null;
2370
- }
2371
2359
  this.listBaseOption.itemCreated = this.virtualizationModule.createUIItem.bind(this.virtualizationModule);
2372
2360
  }
2373
2361
  }
@@ -2400,7 +2388,7 @@ let ListView = class ListView extends Component {
2400
2388
  */
2401
2389
  render() {
2402
2390
  this.element.classList.add(classNames.root);
2403
- attributes(this.element, { role: 'list', tabindex: '0' });
2391
+ attributes(this.element, { tabindex: '0' });
2404
2392
  this.setCSSClass();
2405
2393
  this.setEnableRTL();
2406
2394
  this.setEnable();
@@ -3115,6 +3103,10 @@ class Virtualization {
3115
3103
  * @private
3116
3104
  */
3117
3105
  uiVirtualization() {
3106
+ this.commonTemplate = '<div class="e-text-content" role="presentation"> ' +
3107
+ '<span class="e-list-text"> ${' + this.listViewInstance.fields.text + '} </span></div>';
3108
+ this.templateFunction = compile(this.listViewInstance.template || this.commonTemplate, this.listViewInstance);
3109
+ this.groupTemplateFunction = compile(this.listViewInstance.groupTemplate || this.commonTemplate, this.listViewInstance);
3118
3110
  this.wireScrollEvent(false);
3119
3111
  const curViewDS = this.listViewInstance.curViewDS;
3120
3112
  const firstDs = curViewDS.slice(0, 1);
@@ -3863,12 +3855,11 @@ class Virtualization {
3863
3855
  this.refreshItemHeight();
3864
3856
  }
3865
3857
  createUIItem(args) {
3866
- const virtualTemplate = this.listViewInstance.template;
3867
- const template = this.listViewInstance.createElement('div');
3868
- let commonTemplate = '<div class="e-text-content" role="presentation"> ' +
3869
- '<span class="e-list-text"> ${' + this.listViewInstance.fields.text + '} </span></div>';
3858
+ const template = document.createElement('div');
3859
+ this.templateData = args.curData.isHeader ? args.curData.items[0] :
3860
+ args.curData;
3870
3861
  if (this.listViewInstance.isReact) {
3871
- commonTemplate = null;
3862
+ this.commonTemplate = null;
3872
3863
  }
3873
3864
  if (this.listViewInstance.showCheckBox) {
3874
3865
  // eslint-disable-next-line
@@ -3876,7 +3867,13 @@ class Virtualization {
3876
3867
  if ((!isNullOrUndefined(this.listViewInstance.virtualCheckBox)) &&
3877
3868
  (!isNullOrUndefined(this.listViewInstance.virtualCheckBox.outerHTML))) {
3878
3869
  const div = document.createElement('div');
3879
- div.innerHTML = this.listViewInstance.template || commonTemplate;
3870
+ const nodes = this.templateFunction(this.templateData, this.listViewInstance);
3871
+ if (this.listViewInstance.template && this.listViewInstance.isReact) {
3872
+ this.listViewInstance.renderReactTemplates();
3873
+ }
3874
+ [].slice.call(nodes).forEach((ele) => {
3875
+ div.appendChild(ele);
3876
+ });
3880
3877
  if (div.children && div.children[0]) {
3881
3878
  div.children[0].classList.add('e-checkbox');
3882
3879
  if (this.listViewInstance.checkBoxPosition === 'Left') {
@@ -3891,55 +3888,105 @@ class Virtualization {
3891
3888
  else {
3892
3889
  div.children[0].appendChild(this.listViewInstance.virtualCheckBox);
3893
3890
  }
3894
- this.listViewInstance.template = div.innerHTML;
3891
+ template.innerHTML = div.innerHTML;
3895
3892
  }
3896
3893
  }
3897
- if (this.isVueFunctionTemplate())
3898
- return;
3899
- template.innerHTML = this.listViewInstance.template;
3900
- this.listViewInstance.template = virtualTemplate;
3894
+ else {
3895
+ let div = document.createElement('div');
3896
+ const nodes = this.templateFunction(this.templateData, this.listViewInstance);
3897
+ if (this.listViewInstance.template && this.listViewInstance.isReact) {
3898
+ this.listViewInstance.renderReactTemplates();
3899
+ }
3900
+ [].slice.call(nodes).forEach((ele) => {
3901
+ div.appendChild(ele);
3902
+ });
3903
+ template.innerHTML = div.innerHTML;
3904
+ }
3901
3905
  }
3902
3906
  else {
3903
- if (this.isVueFunctionTemplate())
3904
- return;
3905
- template.innerHTML = this.listViewInstance.template || commonTemplate;
3906
- }
3907
- // eslint-disable-next-line
3908
- const templateElements = template.getElementsByTagName('*');
3909
- const groupTemplate = this.listViewInstance.createElement('div');
3910
- if (this.listViewInstance.fields.groupBy) {
3911
- groupTemplate.innerHTML = this.listViewInstance.groupTemplate || commonTemplate;
3907
+ const nodes = this.templateFunction(this.templateData, this.listViewInstance);
3908
+ if (this.listViewInstance.template && this.listViewInstance.isReact) {
3909
+ this.listViewInstance.renderReactTemplates();
3910
+ }
3911
+ [].slice.call(nodes).forEach((ele) => {
3912
+ template.appendChild(ele);
3913
+ });
3912
3914
  }
3913
- // eslint-disable-next-line
3914
- let groupTemplateElements = groupTemplate.getElementsByTagName('*');
3915
3915
  if (args.curData.isHeader) {
3916
3916
  this.headerData = args.curData;
3917
3917
  }
3918
- this.templateData = args.curData.isHeader ? args.curData.items[0] :
3919
- args.curData;
3920
- if (!this.listViewInstance.isReact || (typeof this.listViewInstance.template == "string" && !args.item.classList.contains("e-list-group-item")) ||
3921
- (typeof this.listViewInstance.groupTemplate == "string" && args.item.classList.contains("e-list-group-item"))) {
3918
+ const groupTemplate = this.listViewInstance.createElement('div');
3919
+ if (this.listViewInstance.fields.groupBy) {
3920
+ const nodes = this.groupTemplateFunction(this.headerData, this.listViewInstance);
3921
+ if (this.listViewInstance.template && this.listViewInstance.isReact) {
3922
+ this.listViewInstance.renderReactTemplates();
3923
+ }
3924
+ [].slice.call(nodes).forEach((ele) => {
3925
+ groupTemplate.appendChild(ele);
3926
+ });
3927
+ }
3928
+ if ((!this.listViewInstance.isReact || (typeof this.listViewInstance.template == "string" && !args.item.classList.contains("e-list-group-item")) ||
3929
+ (typeof this.listViewInstance.groupTemplate == "string" && args.item.classList.contains("e-list-group-item"))) && !this.listViewInstance.isVue) {
3922
3930
  args.item.innerHTML = '';
3923
3931
  }
3924
3932
  args.item.context = { data: args.curData, nodes: { flatTemplateNodes: [], groupTemplateNodes: [] } };
3925
- for (let i = 0; i < templateElements.length; i++) {
3926
- this.compileTemplate(templateElements[i], args.item, false);
3933
+ for (let i = 0; i < template.children.length; i++) {
3934
+ this.compileTemplate(template.children[i], args.item, false);
3927
3935
  }
3928
- for (let i = 0; i < groupTemplateElements.length; i++) {
3929
- this.compileTemplate(groupTemplateElements[i], args.item, true);
3936
+ for (let i = 0; i < groupTemplate.children.length; i++) {
3937
+ this.compileTemplate(groupTemplate.children[i], args.item, true);
3930
3938
  }
3931
3939
  args.item.context.template = args.curData.isHeader ? template.firstElementChild :
3932
3940
  groupTemplate.firstElementChild;
3933
3941
  args.item.context.type = args.curData.isHeader ? 'flatList' : 'groupList';
3934
3942
  const element = args.curData.isHeader ? groupTemplate : template;
3935
- if (element.firstElementChild) {
3943
+ if (element.firstElementChild && !this.listViewInstance.isReact && !this.listViewInstance.isVue) {
3936
3944
  args.item.insertBefore(element.firstElementChild, null);
3937
3945
  }
3938
3946
  }
3939
3947
  compileTemplate(element, item, isHeader) {
3940
- this.textProperty(element, item, isHeader);
3941
- this.classProperty(element, item, isHeader);
3942
- this.attributeProperty(element, item, isHeader);
3948
+ const subNode = {};
3949
+ subNode.onChange = (value) => {
3950
+ let groupTemplateElements;
3951
+ let templateElements;
3952
+ if (this.listViewInstance.isVue) {
3953
+ groupTemplateElements = this.groupTemplateFunction(value);
3954
+ templateElements = this.templateFunction(value);
3955
+ }
3956
+ else {
3957
+ groupTemplateElements = this.groupTemplateFunction(value, this.listViewInstance);
3958
+ templateElements = this.templateFunction(value, this.listViewInstance);
3959
+ }
3960
+ if (this.listViewInstance.template && this.listViewInstance.isReact) {
3961
+ this.listViewInstance.renderReactTemplates();
3962
+ }
3963
+ let currentTemplate = templateElements;
3964
+ if (value.isHeader) {
3965
+ currentTemplate = groupTemplateElements;
3966
+ }
3967
+ [].slice.call(currentTemplate).forEach(function (currentElement) {
3968
+ let RemovableClass = element.classList.value.replace('e-checkbox', '');
3969
+ RemovableClass = RemovableClass.replace('e-checkbox-left', '');
3970
+ RemovableClass = RemovableClass.replace('e-checkbox-right', '');
3971
+ removeClass([element], RemovableClass.split(' ').filter(function (css) { return css; }));
3972
+ addClass([element], Array.from(currentElement.classList));
3973
+ for (let i = 0; i < element.attributes.length; i++) {
3974
+ if (element.attributes[i].name != 'class') {
3975
+ const newData = currentElement.getAttribute(element.attributes[i].name);
3976
+ element.setAttribute(element.attributes[i].name, newData);
3977
+ }
3978
+ }
3979
+ [].slice.call(element.children).forEach(function (ele) {
3980
+ if (!ele.classList.contains('e-listview-checkbox') && !(ele.classList.contains('e-checkbox-left') || ele.classList.contains('e-checkbox-right'))) {
3981
+ ele.remove();
3982
+ }
3983
+ });
3984
+ [].slice.call(currentElement.children).forEach(function (ele) {
3985
+ element.appendChild(ele);
3986
+ });
3987
+ });
3988
+ };
3989
+ this.updateContextData(item, subNode, isHeader);
3943
3990
  }
3944
3991
  onChange(newData, listElement) {
3945
3992
  listElement.context.data = newData;
@@ -3993,171 +4040,6 @@ class Virtualization {
3993
4040
  listElement.context.nodes.flatTemplateNodes.push(node);
3994
4041
  }
3995
4042
  }
3996
- classProperty(element, listElement, isHeader) {
3997
- const regex = new RegExp('\\${([^}]*)}', 'g');
3998
- const resultantOutput = [];
3999
- let regexMatch;
4000
- while (regexMatch !== null) {
4001
- const match = regex.exec(element.className);
4002
- resultantOutput.push(match);
4003
- regexMatch = match;
4004
- if (regexMatch === null) {
4005
- resultantOutput.pop();
4006
- }
4007
- }
4008
- if (resultantOutput && resultantOutput.length) {
4009
- for (let i = 0; i < resultantOutput.length; i++) {
4010
- const classNameMatch = resultantOutput[i];
4011
- // eslint-disable-next-line
4012
- let classFunction;
4013
- if (classNameMatch[1].indexOf('?') !== -1 && classNameMatch[1].indexOf(':') !== -1) {
4014
- // tslint:disable-next-line:no-function-constructor-with-string-args
4015
- classFunction = new Function('data', 'return ' + classNameMatch[1].replace(/\$/g, 'data.'));
4016
- }
4017
- else {
4018
- // tslint:disable-next-line:no-function-constructor-with-string-args
4019
- classFunction = new Function('data', 'return ' + 'data.' + classNameMatch[1]);
4020
- }
4021
- // eslint-disable-next-line
4022
- const subNode = {};
4023
- if (isHeader) {
4024
- subNode.bindedvalue = classFunction(this.headerData);
4025
- }
4026
- else {
4027
- subNode.bindedvalue = classFunction(this.templateData);
4028
- }
4029
- subNode.onChange = (value) => {
4030
- if (subNode.bindedvalue) {
4031
- removeClass([element], subNode.bindedvalue.split(' ').filter((css) => css));
4032
- }
4033
- const newCss = classFunction(value);
4034
- if (newCss) {
4035
- addClass([element], (newCss).split(' ').filter((css) => css));
4036
- }
4037
- subNode.bindedvalue = newCss;
4038
- };
4039
- const className = classNameMatch[0].split(' ');
4040
- for (let i = 0; i < className.length; i++) {
4041
- element.classList.remove(className[i]);
4042
- }
4043
- if (subNode.bindedvalue) {
4044
- addClass([element], subNode.bindedvalue.split(' ').filter((css) => css));
4045
- }
4046
- this.updateContextData(listElement, subNode, isHeader);
4047
- }
4048
- }
4049
- }
4050
- attributeProperty(element, listElement, isHeader) {
4051
- const attributeNames = [];
4052
- for (let i = 0; i < element.attributes.length; i++) {
4053
- attributeNames.push(element.attributes[i].nodeName);
4054
- }
4055
- if (attributeNames.indexOf('class') !== -1) {
4056
- attributeNames.splice(attributeNames.indexOf('class'), 1);
4057
- }
4058
- for (let i = 0; i < attributeNames.length; i++) {
4059
- const attributeName = attributeNames[i];
4060
- const attrNameMatch = new RegExp('\\${([^}]*)}', 'g').exec(attributeName) || [];
4061
- const attrValueMatch = new RegExp('\\${([^}]*)}', 'g').exec(element.getAttribute(attributeName))
4062
- || [];
4063
- // eslint-disable-next-line
4064
- let attributeNameFunction;
4065
- // eslint-disable-next-line
4066
- let attributeValueFunction;
4067
- if (attrNameMatch.length || attrValueMatch.length) {
4068
- if (attrNameMatch[1]) {
4069
- // tslint:disable-next-line:no-function-constructor-with-string-args
4070
- attributeNameFunction = new Function('data', 'return ' + 'data.' + attrNameMatch[1]);
4071
- }
4072
- if (attrValueMatch[1]) {
4073
- if (attrValueMatch[1].indexOf('?') !== -1 && attrValueMatch[1].indexOf(':') !== -1) {
4074
- // tslint:disable-next-line:no-function-constructor-with-string-args
4075
- attributeValueFunction = new Function('data', 'return ' + attrValueMatch[1].replace(/\$/g, 'data.'));
4076
- }
4077
- else {
4078
- // tslint:disable-next-line:no-function-constructor-with-string-args
4079
- attributeValueFunction = new Function('data', 'return ' + 'data.' + attrValueMatch[1]);
4080
- }
4081
- }
4082
- // eslint-disable-next-line @typescript-eslint/ban-types
4083
- const subNode = {};
4084
- if (isHeader) {
4085
- subNode.bindedvalue = [attrNameMatch[1] === undefined ? undefined : attributeNameFunction(this.headerData),
4086
- attrValueMatch[1] === undefined ? undefined : attributeValueFunction(this.headerData)];
4087
- }
4088
- else {
4089
- subNode.bindedvalue = [attrNameMatch[1] === undefined ? undefined : attributeNameFunction(this.templateData),
4090
- attrValueMatch[1] === undefined ? undefined : attributeValueFunction(this.templateData)];
4091
- }
4092
- subNode.attrName = subNode.bindedvalue[0] === undefined ?
4093
- attributeName : subNode.bindedvalue[0];
4094
- subNode.onChange = (value) => {
4095
- const bindedvalue = subNode.bindedvalue[1] === undefined ?
4096
- element.getAttribute(subNode.attrName) : attributeValueFunction(value);
4097
- element.removeAttribute(subNode.attrName);
4098
- subNode.attrName = subNode.bindedvalue[0] === undefined ? subNode.attrName : attributeNameFunction(value);
4099
- element.setAttribute(subNode.attrName, bindedvalue);
4100
- subNode.bindedvalue = [subNode.bindedvalue[0] === undefined ? undefined : attributeNameFunction(value),
4101
- subNode.bindedvalue[1] === undefined ? undefined : attributeValueFunction(value)];
4102
- };
4103
- const attributeValue = subNode.bindedvalue[1] === undefined ? element.getAttribute(attributeName) :
4104
- subNode.bindedvalue[1];
4105
- element.removeAttribute(attributeName);
4106
- element.setAttribute(subNode.attrName, attributeValue);
4107
- this.updateContextData(listElement, subNode, isHeader);
4108
- }
4109
- }
4110
- }
4111
- textProperty(element, listElement, isHeader) {
4112
- const regex = new RegExp('\\${([^}]*)}', 'g');
4113
- const resultantOutput = [];
4114
- let regexMatch;
4115
- while (regexMatch !== null) {
4116
- const match = regex.exec(element.innerText);
4117
- resultantOutput.push(match);
4118
- regexMatch = match;
4119
- if (regexMatch === null) {
4120
- resultantOutput.pop();
4121
- }
4122
- }
4123
- const isChildHasTextContent = Array.prototype.some.call(element.children, (element) => {
4124
- if (new RegExp('\\${([^}]*)}', 'g').exec(element.innerText)) {
4125
- return true;
4126
- }
4127
- else {
4128
- return false;
4129
- }
4130
- });
4131
- if (resultantOutput && resultantOutput.length && !isChildHasTextContent) {
4132
- for (let i = 0; i < resultantOutput.length; i++) {
4133
- const textPropertyMatch = resultantOutput[i];
4134
- // eslint-disable-next-line
4135
- const subNode = {};
4136
- // eslint-disable-next-line
4137
- let textFunction;
4138
- if (textPropertyMatch[1].indexOf('?') !== -1 && textPropertyMatch[1].indexOf(':') !== -1) {
4139
- // tslint:disable-next-line:no-function-constructor-with-string-args
4140
- textFunction = new Function('data', 'return ' + textPropertyMatch[1].replace(/\$/g, 'data.'));
4141
- }
4142
- else {
4143
- // tslint:disable-next-line:no-function-constructor-with-string-args
4144
- textFunction = new Function('data', 'return ' + 'data.' + textPropertyMatch[1]);
4145
- }
4146
- if (isHeader) {
4147
- subNode.bindedvalue = textFunction(this.headerData);
4148
- }
4149
- else {
4150
- subNode.bindedvalue = textFunction(this.templateData);
4151
- }
4152
- subNode.onChange = (value) => {
4153
- element.innerText = element.innerText.replace(subNode.bindedvalue, textFunction(value));
4154
- subNode.bindedvalue = textFunction(value);
4155
- };
4156
- element.innerText = element.innerText.replace(textPropertyMatch[0], subNode.bindedvalue);
4157
- this.updateContextData(listElement, subNode, isHeader);
4158
- }
4159
- }
4160
- }
4161
4043
  reRenderUiVirtualization() {
4162
4044
  this.wireScrollEvent(true);
4163
4045
  if (this.listViewInstance.contentContainer) {