UNPKG

@openui5/sap.ui.core

Version:

OpenUI5 Core Library sap.ui.core

128 lines (115 loc) 3.29 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/base/i18n/Localization", "./UIArea", "./UIAreaRegistry", "sap/ui/dom/_ready" ], ( Localization, UIArea, UIAreaRegistry, _ready ) => { "use strict"; let oStaticArea; /** * Whether the DOM is ready (document.ready) */ let bDomReady = false; _ready().then(() => { bDomReady = true; }); /** * Helper module to access the static area. * * The static area is a hidden DOM element with a unique ID and managed by the framework. * It is typically used for hidden or temporarily hidden elements like InvisibleText, Popup, * Shadow, Blocklayer etc. * * All methods throw an <code>Error</code> when they are called before the document is ready. * * @namespace * @alias module:sap/ui/core/StaticArea * @public */ const StaticArea = { /** * The unique ID of the static area. * * @private * @ui5-restricted SAPUI5 Dist * @type {string} */ STATIC_UIAREA_ID: "sap-ui-static", /** * Returns the <code>UIArea</code> instance for the static area. If none exists yet, one gets created. * * @returns {sap.ui.core.UIArea} The <code>UIArea</code> instance for the static area * @throws {Error} if the document is not ready yet * * @public */ getUIArea: () => { if (!oStaticArea) { oStaticArea = UIAreaRegistry.get(StaticArea.STATIC_UIAREA_ID) || UIArea.create(_createStaticAreaRef()); oStaticArea.bInitial = false; } return oStaticArea; }, /** * Returns the root element of the static, hidden area. * * It can be used e.g. for hiding elements like Popup, Shadow, Blocklayer etc. * If it is not yet available, a DIV element is created and appended to the body. * * @returns {Element} the root DOM element of the static, hidden area * @throws {Error} if the document is not ready yet * * @public */ getDomRef: () => { return StaticArea.getUIArea().getRootNode(); }, /** * Checks whether the given DOM element is part of the static area. * * @param {Element} oDomRef The DOM element to check * @returns {boolean} Whether the given DOM reference is part of the static UIArea * @throws {Error} if the document is not ready yet * * @public */ contains: (oDomRef) => { return StaticArea.getDomRef().contains(oDomRef); } }; /* * Helper function that returns the root element of the static area. Creates it, if it doesn't exist yet. * @returns {Element} The root DOM element of the static area * * @private */ const _createStaticAreaRef = () => { if (!bDomReady) { throw new Error("DOM is not ready yet. Static UIArea cannot be created."); } let oStaticArea = document.getElementById(StaticArea.STATIC_UIAREA_ID); if (!oStaticArea) { oStaticArea = document.createElement("div"); oStaticArea.setAttribute("id", StaticArea.STATIC_UIAREA_ID); Object.assign(oStaticArea.style, { "height": "0", "width": "0", "overflow": "hidden", "float": Localization.getRTL() ? "right" : "left" }); document.body.insertBefore(oStaticArea, document.body.firstChild); } return oStaticArea; }; return StaticArea; });