@syncfusion/ej2-lists 32.2.3 → 32.2.7

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.
@@ -67,6 +67,7 @@ var ListBase;
67
67
  showCheckBox: false,
68
68
  showIcon: false,
69
69
  enableHtmlSanitizer: false,
70
+ disableHtmlEncode: false,
70
71
  expandCollapse: false,
71
72
  fields: ListBase.defaultMappedFields,
72
73
  ariaAttributes: defaultAriaAttributes,
@@ -261,14 +262,10 @@ var ListBase;
261
262
  anchorElement = li.querySelector('.' + cssClass.anchorWrap);
262
263
  if (Object.prototype.hasOwnProperty.call(fieldData, fields.tooltip)) {
263
264
  let tooltipText = fieldData[fields.tooltip];
264
- if (options && options.enableHtmlSanitizer) {
265
- tooltipText = SanitizeHtmlHelper.sanitize(tooltipText);
266
- }
267
- else {
268
- let tooltipTextElement = createElement('span', { innerHTML: tooltipText });
269
- tooltipText = tooltipTextElement.innerText;
270
- tooltipTextElement = null;
271
- }
265
+ tooltipText = getSanitizedText(tooltipText, curOpt);
266
+ let tooltipTextElement = createElement('span', { innerHTML: tooltipText });
267
+ tooltipText = tooltipTextElement.innerText;
268
+ tooltipTextElement = null;
272
269
  li.setAttribute('title', tooltipText);
273
270
  }
274
271
  if (curOpt.itemNavigable && checkboxElement.length) {
@@ -285,14 +282,10 @@ var ListBase;
285
282
  anchorElement = li.querySelector('.' + cssClass.anchorWrap);
286
283
  if (Object.prototype.hasOwnProperty.call(fieldData, fields.tooltip)) {
287
284
  let tooltipText = fieldData[fields.tooltip];
288
- if (options && options.enableHtmlSanitizer) {
289
- tooltipText = SanitizeHtmlHelper.sanitize(tooltipText);
290
- }
291
- else {
292
- let tooltipTextElement = createElement('span', { innerHTML: tooltipText });
293
- tooltipText = tooltipTextElement.innerText;
294
- tooltipTextElement = null;
295
- }
285
+ tooltipText = getSanitizedText(tooltipText, curOpt);
286
+ let tooltipTextElement = createElement('span', { innerHTML: tooltipText });
287
+ tooltipText = tooltipTextElement.innerText;
288
+ tooltipTextElement = null;
296
289
  li.setAttribute('title', tooltipText);
297
290
  }
298
291
  if (Object.prototype.hasOwnProperty.call(fieldData, fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {
@@ -821,6 +814,7 @@ var ListBase;
821
814
  fieldData[fields.text] : (fieldData[fields.text] || '');
822
815
  value = fieldData[fields.value];
823
816
  }
817
+ text = getSanitizedText(text, curOpt);
824
818
  let elementID;
825
819
  if (!isNullOrUndefined(dataSource) && !isNullOrUndefined(fieldData[fields.id])
826
820
  && fieldData[fields.id] !== '') {
@@ -837,11 +831,8 @@ var ListBase;
837
831
  if (dataSource && Object.prototype.hasOwnProperty.call(fieldData, fields.enabled) && fieldData[fields.enabled].toString() === 'false') {
838
832
  li.classList.add(cssClass.disabled);
839
833
  }
840
- if (options && options.enableHtmlSanitizer) {
841
- text = SanitizeHtmlHelper.sanitize(text);
842
- }
843
834
  if (grpLI) {
844
- li.innerText = text;
835
+ li[getDomSetter(curOpt)] = text;
845
836
  }
846
837
  else {
847
838
  li.setAttribute('data-value', isNullOrUndefined(value) ? 'null' : value);
@@ -854,7 +845,7 @@ var ListBase;
854
845
  }
855
846
  if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&
856
847
  fieldData[fields.urlAttributes].href))) {
857
- li.appendChild(anchorTag(createElement, dataSource, fields, text, innerElements, curOpt.itemNavigable));
848
+ li.appendChild(anchorTag(createElement, dataSource, fields, text, innerElements, curOpt.itemNavigable, curOpt));
858
849
  }
859
850
  else {
860
851
  if (innerElements.length && curOpt.itemNavigable) {
@@ -905,9 +896,10 @@ var ListBase;
905
896
  * @param {string} text - The text content of the anchor tag.
906
897
  * @param {HTMLElement[]} innerElements - Optional array of inner elements to append to the anchor tag.
907
898
  * @param {boolean} isFullNavigation - Indicates whether the anchor tag should be for full navigation.
899
+ * @param {ListBaseOptions} [options] - Optional ListBase options.
908
900
  * @returns {HTMLElement} The created anchor tag element.
909
901
  */
910
- function anchorTag(createElement, dataSource, fields, text, innerElements, isFullNavigation) {
902
+ function anchorTag(createElement, dataSource, fields, text, innerElements, isFullNavigation, options) {
911
903
  const fieldData = getFieldValues(dataSource, fields);
912
904
  const attr = { href: fieldData[fields.url] };
913
905
  if (Object.prototype.hasOwnProperty.call(fieldData, fields.urlAttributes) && fieldData[fields.urlAttributes]) {
@@ -916,8 +908,11 @@ var ListBase;
916
908
  fieldData[fields.urlAttributes].href;
917
909
  }
918
910
  let anchorTag;
911
+ const curOpt = extend({}, defaultListBaseOptions, options);
912
+ const safeText = getSanitizedText(text, curOpt);
919
913
  if (!isFullNavigation) {
920
- anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url, innerHTML: text });
914
+ anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url });
915
+ anchorTag[getDomSetter(curOpt)] = safeText;
921
916
  }
922
917
  else {
923
918
  anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url });
@@ -925,7 +920,7 @@ var ListBase;
925
920
  if (innerElements && innerElements.length) {
926
921
  append(innerElements, anchorWrapper);
927
922
  }
928
- anchorWrapper.appendChild(document.createTextNode(text));
923
+ anchorWrapper.appendChild(document.createTextNode(safeText));
929
924
  append([anchorWrapper], anchorTag);
930
925
  }
931
926
  setAttribute(anchorTag, attr);
@@ -957,9 +952,7 @@ var ListBase;
957
952
  grpLI = (Object.prototype.hasOwnProperty.call(item, 'isHeader') && item.isHeader)
958
953
  ? true : false;
959
954
  }
960
- if (options && options.enableHtmlSanitizer) {
961
- text = SanitizeHtmlHelper.sanitize(text);
962
- }
955
+ text = getSanitizedText(text, curOpt);
963
956
  const li = createElement('li', {
964
957
  className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),
965
958
  attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?
@@ -1009,19 +1002,14 @@ var ListBase;
1009
1002
  });
1010
1003
  if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&
1011
1004
  fieldData[fields.urlAttributes].href))) {
1012
- innerDiv.appendChild(anchorTag(createElement, dataSource, fields, text, null, curOpt.itemNavigable));
1005
+ innerDiv.appendChild(anchorTag(createElement, dataSource, fields, text, null, curOpt.itemNavigable, curOpt));
1013
1006
  }
1014
1007
  else {
1015
1008
  const element = createElement('span', {
1016
1009
  className: cssClass.text,
1017
1010
  attrs: (ariaAttributes.itemText !== '' ? { role: ariaAttributes.itemText } : {})
1018
1011
  });
1019
- if (options && options.enableHtmlSanitizer) {
1020
- element.innerText = text;
1021
- }
1022
- else {
1023
- element.innerHTML = text;
1024
- }
1012
+ element[getDomSetter(curOpt)] = text;
1025
1013
  innerDiv.appendChild(element);
1026
1014
  }
1027
1015
  li.appendChild(innerDiv);
@@ -1077,6 +1065,14 @@ var ListBase;
1077
1065
  return liElement;
1078
1066
  }
1079
1067
  ListBase.generateIcon = generateIcon;
1068
+ function getDomSetter(options) {
1069
+ return options.disableHtmlEncode ? 'textContent' : 'innerHTML';
1070
+ }
1071
+ ListBase.getDomSetter = getDomSetter;
1072
+ function getSanitizedText(text, options) {
1073
+ return options.enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(text) : text;
1074
+ }
1075
+ ListBase.getSanitizedText = getSanitizedText;
1080
1076
  })(ListBase || (ListBase = {}));
1081
1077
  /**
1082
1078
  * Used to get dataSource item from complex data using fields.
@@ -1398,13 +1394,13 @@ let ListView = class ListView extends Component {
1398
1394
  if (this.headerEle === undefined && this.showHeader) {
1399
1395
  this.headerEle = this.createElement('div', { className: classNames.header });
1400
1396
  const innerHeaderEle = this.createElement('span', { className: classNames.headerText });
1401
- if (this.enableHtmlSanitizer) {
1402
- this.setProperties({ headerTitle: SanitizeHtmlHelper.sanitize(this.headerTitle) }, true);
1403
- innerHeaderEle.innerText = this.headerTitle;
1404
- }
1405
- else {
1406
- innerHeaderEle.innerHTML = this.headerTitle;
1397
+ const curOpt = this.listBaseOption || {
1398
+ enableHtmlSanitizer: this.enableHtmlSanitizer, disableHtmlEncode: this.disableHtmlEncode
1399
+ };
1400
+ if (curOpt.enableHtmlSanitizer) {
1401
+ this.setProperties({ headerTitle: ListBase.getSanitizedText(this.headerTitle, curOpt) }, true);
1407
1402
  }
1403
+ innerHeaderEle[ListBase.getDomSetter(curOpt)] = ListBase.getSanitizedText(this.headerTitle, curOpt);
1408
1404
  const textEle = this.createElement('div', { className: classNames.text, innerHTML: innerHeaderEle.outerHTML });
1409
1405
  const hedBackButton = this.createElement('div', {
1410
1406
  className: classNames.icon + ' ' + classNames.backIcon + ' ' + classNames.backButton,
@@ -1435,10 +1431,10 @@ let ListView = class ListView extends Component {
1435
1431
  this.headerEle.style.display = '';
1436
1432
  const textEle = this.headerEle.querySelector('.' + classNames.headerText);
1437
1433
  const hedBackButton = this.headerEle.querySelector('.' + classNames.backIcon);
1438
- if (this.enableHtmlSanitizer) {
1439
- text = SanitizeHtmlHelper.sanitize(text);
1440
- }
1441
- textEle.innerHTML = text;
1434
+ const curOpt = this.listBaseOption || {
1435
+ enableHtmlSanitizer: this.enableHtmlSanitizer, disableHtmlEncode: this.disableHtmlEncode
1436
+ };
1437
+ textEle[ListBase.getDomSetter(curOpt)] = ListBase.getSanitizedText(text, curOpt);
1442
1438
  if (this.headerTemplate && showBack) {
1443
1439
  textEle.parentElement.classList.remove('header');
1444
1440
  this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('nested-header');
@@ -1527,7 +1523,8 @@ let ListView = class ListView extends Component {
1527
1523
  itemCreated: this.renderCheckbox.bind(this),
1528
1524
  templateID: `${this.element.id}${LISTVIEW_TEMPLATE_PROPERTY}`,
1529
1525
  groupTemplateID: `${this.element.id}${LISTVIEW_GROUPTEMPLATE_PROPERTY}`,
1530
- enableHtmlSanitizer: this.enableHtmlSanitizer
1526
+ enableHtmlSanitizer: this.enableHtmlSanitizer,
1527
+ disableHtmlEncode: this.disableHtmlEncode
1531
1528
  };
1532
1529
  this.initialization();
1533
1530
  }
@@ -3200,6 +3197,9 @@ __decorate([
3200
3197
  __decorate([
3201
3198
  Property(true)
3202
3199
  ], ListView.prototype, "enableHtmlSanitizer", void 0);
3200
+ __decorate([
3201
+ Property(true)
3202
+ ], ListView.prototype, "disableHtmlEncode", void 0);
3203
3203
  __decorate([
3204
3204
  Property('')
3205
3205
  ], ListView.prototype, "height", void 0);