UNPKG

@openui5/sap.m

Version:

OpenUI5 UI Library sap.m

169 lines (142 loc) 3.99 kB
/*! * OpenUI5 * (c) Copyright 2026 SAP SE or an SAP affiliate company. * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. */ sap.ui.define(["sap/ui/core/Renderer", "sap/m/ListItemBaseRenderer"], function(Renderer, ListItemBaseRenderer) { "use strict"; var TAG_INCLUDELIST = { "svg": { attributes: ["width", "height", "focusable", "preserveAspectRatio"] }, "path": { attributes: ["d", "fill", "transform", "stroke", "stroke-width"] }, "line": { attributes: ["x1", "x2", "y1", "y2", "stroke-width", "stroke", "stroke-dasharray", "stroke-linecap"] } }; function every(aDomArray, fnCallback) { var i; if (!aDomArray) { return true; } for (i = 0; i < aDomArray.length; i++) { if (!fnCallback(aDomArray[i])) { return false; } } return true; } function isValidSvgNode(oNode) { if (oNode.nodeType !== window.Node.ELEMENT_NODE) { return true; } var sTagName = oNode.tagName.toLowerCase(), oTag = TAG_INCLUDELIST[sTagName], bTagsValid; if (!oTag) { return false; } bTagsValid = every(oNode.attributes, function (attribute) { if (attribute.value === "") { return true; } var sAttributeName = attribute.name.toLowerCase(); return oTag.attributes.indexOf(sAttributeName) >= 0; }); if (!bTagsValid) { return false; } if (!oTag.allowTextContenet && oNode.textContent.trim().length > 0) { return false; } return every(oNode.childNodes, isValidSvgNode); } /** * SelectionDetailsItemRenderer renderer. * @namespace */ var SelectionDetailsListItemRenderer = Renderer.extend(ListItemBaseRenderer); SelectionDetailsListItemRenderer.apiVersion = 2; SelectionDetailsListItemRenderer.renderLIAttributes = function(oRm, oControl) { oRm.class("sapMSDItem"); }; SelectionDetailsListItemRenderer.renderLIContent = function(oRm, oControl) { var aLines = oControl._getParentElement().getLines(); oRm.openStart("div"); oRm.class("sapMSDItemLines"); oRm.openEnd(); for (var i = 0; i < aLines.length; i++) { this.renderLine(oRm, oControl, aLines[i]); } oRm.close("div"); ListItemBaseRenderer.renderType(oRm, oControl); }; SelectionDetailsListItemRenderer._isValidSvg = function (data) { try { var oParser = new DOMParser(), oDocument = oParser.parseFromString(data, "text/html"); var aNodes = oDocument.body.childNodes; if (aNodes.length === 0) { return false; } return every(aNodes, isValidSvgNode); } catch (ex) { return false; } }; SelectionDetailsListItemRenderer.renderLine = function(oRm, oControl, line) { var sUnit = line.getUnit().trim(), sValue = line._getValueToRender(), sDisplayValue = line.getDisplayValue(), sLineMarker = line.getLineMarker(); oRm.openStart("div"); oRm.class("sapMSDItemLine"); oRm.openEnd(); oRm.openStart("div"); oRm.class("sapMSDItemLineMarkerContainer"); oRm.openEnd(); if (sLineMarker && SelectionDetailsListItemRenderer._isValidSvg(sLineMarker)) { oRm.unsafeHtml(sLineMarker); } oRm.close("div"); oRm.openStart("div"); oRm.class("sapMSDItemLineLabel"); oRm.openEnd(); oRm.text(line.getLabel()); oRm.close("div"); oRm.openStart("div"); oRm.class("sapMSDItemLineValue"); if (sUnit) { oRm.class("sapMSDItemLineBold"); } oRm.openEnd(); if (sDisplayValue) { oRm.text(sDisplayValue); } else { oRm.text(sValue); } if (sUnit) { oRm.openStart("span"); oRm.class("sapMSDItemLineUnit"); oRm.openEnd(); oRm.text("\u00a0"); oRm.text(sUnit); oRm.close("span"); } oRm.close("div"); oRm.close("div"); }; SelectionDetailsListItemRenderer.renderType = function(oRm, oControl) { var oToolbar = oControl._getParentElement().getAggregation("_overflowToolbar"); if (oToolbar) { oRm.openStart("div"); oRm.class("sapMSDItemActions"); oRm.openEnd(); oRm.renderControl(oToolbar); oRm.close("div"); } }; return SelectionDetailsListItemRenderer; }, /* bExport= */ true);