@syncfusion/ej2-lists 32.2.6 → 33.1.44
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.
- package/dist/ej2-lists.min.js +2 -2
- package/dist/ej2-lists.umd.min.js +2 -2
- package/dist/ej2-lists.umd.min.js.map +1 -1
- package/dist/es6/ej2-lists.es2015.js +45 -45
- package/dist/es6/ej2-lists.es2015.js.map +1 -1
- package/dist/es6/ej2-lists.es5.js +45 -45
- package/dist/es6/ej2-lists.es5.js.map +1 -1
- package/dist/global/ej2-lists.min.js +2 -2
- package/dist/global/ej2-lists.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +5 -5
- package/src/common/list-base.d.ts +10 -0
- package/src/common/list-base.js +30 -34
- package/src/list-view/list-view-model.d.ts +13 -0
- package/src/list-view/list-view.d.ts +12 -0
- package/src/list-view/list-view.js +15 -11
- package/styles/list-view/_bigger.scss +1 -0
- package/styles/list-view/_layout.scss +1 -0
- package/styles/list-view/_theme.scss +1 -0
- package/styles/sortable/_layout.scss +1 -0
|
@@ -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
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
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
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
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
|
|
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
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1402
|
-
this.
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
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
|
-
|
|
1439
|
-
|
|
1440
|
-
}
|
|
1441
|
-
textEle.
|
|
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);
|