UNPKG

@openui5/sap.m

Version:

OpenUI5 UI Library sap.m

136 lines (111 loc) 4.18 kB
/*! * UI development toolkit for HTML5 (OpenUI5) * (c) Copyright 2009-2022 SAP SE or an SAP affiliate company. * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. */ // Provides default renderer for control sap.m.Image sap.ui.define(['sap/m/library', "sap/base/security/encodeXML"], function(library, encodeXML) { "use strict"; // shortcut for sap.m.ImageMode var ImageMode = library.ImageMode; /** * Image renderer. * @author SAP SE * @namespace */ var ImageRenderer = { }; /** * Renders the HTML for the given control, using the provided {@link sap.ui.core.RenderManager}. * * @param {sap.ui.core.RenderManager} oRm The RenderManager that can be used for writing to the Render-Output-Buffer * @param {sap.ui.core.Control} oImage The control that should be rendered */ ImageRenderer.render = function(oRm, oImage) { var sMode = oImage.getMode(), alt = oImage.getAlt(), tooltip = oImage.getTooltip_AsString(), bHasPressHandlers = oImage.hasListeners("press"), oLightBox = oImage.getDetailBox(), sUseMap = oImage.getUseMap(), aLabelledBy = oImage.getAriaLabelledBy(), aDescribedBy = oImage.getAriaDescribedBy(); // Additional element for Image with LightBox if (oLightBox) { oRm.write("<span class=\"sapMLightBoxImage\""); oRm.writeControlData(oImage); oRm.write(">"); oRm.write("<span class=\"sapMLightBoxMagnifyingGlass\"></span>"); } // Open the DOM element tag. The 'img' tag is used for mode sap.m.ImageMode.Image and 'span' tag is used for sap.m.ImageMode.Background oRm.write(sMode === ImageMode.Image ? "<img" : "<span"); if (!oLightBox) { oRm.writeControlData(oImage); } // aria-labelledby references if (!oImage.getDecorative() && aLabelledBy && aLabelledBy.length > 0) { oRm.writeAttributeEscaped("aria-labelledby", aLabelledBy.join(" ")); } // aria-describedby references if (!oImage.getDecorative() && aDescribedBy && aDescribedBy.length > 0) { oRm.writeAttributeEscaped("aria-describedby", aDescribedBy.join(" ")); } if (sMode === ImageMode.Image) { oRm.writeAttributeEscaped("src", oImage._getDensityAwareSrc()); } else { // preload the image with a window.Image instance. The source uri is set to the output DOM node via CSS style 'background-image' after the source image is loaded (in onload function) oImage._preLoadImage(oImage._getDensityAwareSrc()); oRm.addStyle("background-size", encodeXML(oImage.getBackgroundSize())); oRm.addStyle("background-position", encodeXML(oImage.getBackgroundPosition())); oRm.addStyle("background-repeat", encodeXML(oImage.getBackgroundRepeat())); } oRm.addClass("sapMImg"); if (oImage.hasListeners("press") || oImage.hasListeners("tap")) { oRm.addClass("sapMPointer"); } if (sUseMap || !oImage.getDecorative() || bHasPressHandlers) { oRm.addClass("sapMImgFocusable"); } oRm.writeClasses(); //TODO implement the ImageMap control if (sUseMap) { if (!(sUseMap.startsWith("#"))) { sUseMap = "#" + sUseMap; } oRm.writeAttributeEscaped("useMap", sUseMap); } if (oImage.getDecorative() && !sUseMap && !bHasPressHandlers) { oRm.writeAttribute("role", "presentation"); oRm.writeAttribute("aria-hidden", "true"); oRm.write(" alt=''"); // accessibility requirement: write always empty alt attribute for decorative images } else { if (alt || tooltip) { oRm.writeAttributeEscaped("alt", alt || tooltip); } } if (alt || tooltip) { oRm.writeAttributeEscaped("aria-label", alt || tooltip); } if (tooltip) { oRm.writeAttributeEscaped("title", tooltip); } if (bHasPressHandlers) { oRm.writeAttribute("role", "button"); oRm.writeAttribute("tabIndex", 0); } // Dimensions if (oImage.getWidth() && oImage.getWidth() != '') { oRm.addStyle("width", oImage.getWidth()); } if (oImage.getHeight() && oImage.getHeight() != '') { oRm.addStyle("height", oImage.getHeight()); } oRm.writeStyles(); oRm.write(sMode === ImageMode.Image ? ">" : "></span>"); // close the <img> or <span> element if (oLightBox) { oRm.write("</span>"); } }; return ImageRenderer; }, /* bExport= */ true);