UNPKG

@openui5/sap.m

Version:

OpenUI5 UI Library sap.m

135 lines (116 loc) 4.43 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([], function() { "use strict"; /** * Bar renderer. * @namespace */ var TileContainerRenderer = { apiVersion: 2 }; /*The default amount of tiles this renderer will render if the max tiles per page is not calculated yet.*/ TileContainerRenderer.DEFAULT_TILES_TO_RENDER = 1; /** * Renders the HTML for the given control, using the provided {@link sap.ui.core.RenderManager}. * * @param {sap.ui.core.RenderManager} rm The RenderManager that can be used for writing to the Render-Output-Buffer * @param {sap.m.TileContainer} oControl an object representation of the control that should be rendered */ TileContainerRenderer.render = function(rm, oControl) { var id = oControl.getId(); rm.openStart("div", oControl) .attr("tabindex", "-1") .style("height", oControl.getHeight()) .style("width", oControl.getWidth()) .class("sapMTC"); /* WAI ARIA region */ rm.accessibilityState(oControl, { role: "listbox", multiSelectable: false, activeDescendant: oControl.getTiles().length > 0 ? oControl.getTiles()[0].getId() : "" }); rm.openEnd(); rm.openStart("div", id + "-scrl").class("sapMTCScrl").style("height", "0"); if (!oControl.bRtl) { rm.style("overflow", "hidden"); } rm.openEnd(); rm.openStart("div", id + "-blind").class("sapMTCBlind").openEnd().close("div"); rm.openStart("div", id + "-cnt") .class("sapMTCCnt") .class("sapMTCAnim") .style("height","0") .style("width", "0") .attr("role", "group") .openEnd(); this.renderTiles(oControl, rm); rm.close("div"); rm.close("div"); rm.openStart("div", id + "-pager").class("sapMTCPager").openEnd().close("div"); rm.openStart("div", id + "-leftedge").class("sapMTCEdgeLeft").openEnd().close("div"); rm.openStart("div", id + "-rightedge").class("sapMTCEdgeRight").openEnd().close("div"); rm.openStart("div", id + "-leftscroller").class("sapMTCScroller").class("sapMTCLeft").attr("tabindex", "-1").openEnd(); rm.openStart("div").class("sapMTCInner").openEnd().close("div"); rm.close("div"); rm.openStart("div", id + "-rightscroller").class("sapMTCScroller").class("sapMTCRight").attr("tabindex", "-1").openEnd(); rm.openStart("div").class("sapMTCInner").openEnd().close("div"); rm.close("div"); rm.close("div"); }; /** * Render tiles depending on the page size and tiles count. * @param {sap.m.TileContainer} oTC the tile container * @param {sap.ui.core.RenderManager} oRm The RenderManager that can be used for writing to the Render-Output-Buffer * @private * @returns {void} */ TileContainerRenderer.renderTiles = function(oTC, oRm){ var aTiles = oTC.getTiles(), i = 0, iRenderedTiles = 0, iMaxTilesToRender; if (!aTiles.length) { return; } iMaxTilesToRender = this._getCountOfTilesToRender(oTC, aTiles); if (iMaxTilesToRender === TileContainerRenderer.DEFAULT_TILES_TO_RENDER) { // We cannot determine how many tiles to render on the 1st page, because we don't have a DOM yet. // That's why we render just one (to use it for reference tile's size detection, // @see TileDimensionCalculator.prototype.calc) and force the TileContainer.onAfterRendering // to render all tiles in the 1st page. oTC._bRenderFirstPage = true; } //render total of iMaxTilesToRender visible tiles do { if (aTiles[i] && aTiles[i].getVisible()) { aTiles[i]._setVisible(false); oRm.renderControl(aTiles[i]); iRenderedTiles++; } i++; } while (iRenderedTiles !== iMaxTilesToRender && (i < aTiles.length)); }; /** * Determines the amount fo tiles to be rendered. * This depends on information about tiles per page (if available) and/or the count of visible tiles. * @param {sap.m.TileContainer} oTC the tile container * @param {Array.<sap.m.Tile>} aTiles list of visible tiles in order to avoid filtering them again. * @returns {*} * @private */ TileContainerRenderer._getCountOfTilesToRender = function(oTC, aTiles) { if (oTC._iMaxTiles) { return oTC._iMaxTiles; } if (aTiles.length > TileContainerRenderer.DEFAULT_TILES_TO_RENDER) { return TileContainerRenderer.DEFAULT_TILES_TO_RENDER; } return aTiles.length; }; return TileContainerRenderer; }, /* bExport= */ true);