(function (sap) { var fioriToolsGetManifestLibs = function (manifestPath) { var url = manifestPath; var result = ""; // SAPUI5 delivered namespaces from https://ui5.sap.com/#/api/sap var ui5Libs = [ "sap.apf", "sap.base", "sap.chart", "sap.collaboration", "sap.f", "sap.fe", "sap.fileviewer", "sap.gantt", "sap.landvisz", "sap.m", "sap.ndc", "sap.ovp", "sap.rules", "sap.suite", "sap.tnt", "sap.ui", "sap.uiext", "sap.ushell", "sap.uxap", "sap.viz", "sap.webanalytics", "sap.zen" ]; var getKeys = function (libOrComp, libOrCompKeysString) { var libOrCompKeysStringTmp = libOrCompKeysString; Object.keys(libOrComp).forEach(function (libOrCompKey) { // ignore libs or Components that start with SAPUI5 delivered namespaces if (!ui5Libs.some(function (substring) { return libOrCompKey === substring || libOrCompKey.startsWith(substring + "."); })) { if (libOrCompKeysStringTmp.length > 0) { libOrCompKeysStringTmp = libOrCompKeysStringTmp + "," + libOrCompKey; } else { libOrCompKeysStringTmp = libOrCompKey; } } }); return libOrCompKeysStringTmp; }; var getComponentUsageNames = function (compUsages, libOrCompKeysString) { var libOrCompKeysStringTmp = libOrCompKeysString; var compNames = Object.keys(compUsages).map(function (compUsageKey) { return compUsages[compUsageKey].name; }); compNames.forEach(function (compName) { // ignore libs or Components that start with SAPUI5 delivered namespaces if (!ui5Libs.some(function (substring) { return compName === substring || compName.startsWith(substring + "."); })) { if (libOrCompKeysStringTmp.length > 0) { libOrCompKeysStringTmp = libOrCompKeysStringTmp + "," + compName; } else { libOrCompKeysStringTmp = compName; } } }); return libOrCompKeysStringTmp; }; return new Promise(function (resolve, reject) { sap.ui.require(["sap/ui/thirdparty/jquery"], function (localJQuery) { localJQuery.ajax(url) .done(function (manifest) { if (manifest) { if ( manifest["sap.ui5"] && manifest["sap.ui5"].dependencies ) { if (manifest["sap.ui5"].dependencies.libs) { result = getKeys(manifest["sap.ui5"].dependencies.libs, result); } if (manifest["sap.ui5"].dependencies.components) { result = getKeys(manifest["sap.ui5"].dependencies.components, result); } } if ( manifest["sap.ui5"] && manifest["sap.ui5"].componentUsages ) { result = getComponentUsageNames(manifest["sap.ui5"].componentUsages, result); } } resolve(result); }) .fail(function () { reject(new Error("Could not fetch manifest at '" + manifestPath)); }); }); }); }; var registerModules = function (dataFromAppIndex) { Object.keys(dataFromAppIndex).forEach(function (moduleDefinitionKey) { var moduleDefinition = dataFromAppIndex[moduleDefinitionKey]; if (moduleDefinition && moduleDefinition.dependencies) { moduleDefinition.dependencies.forEach(function (dependency) { if (dependency.url && dependency.url.length > 0 && dependency.type === "UI5LIB") { sap.ui.require(["sap/base/Log"], function (Log) { Log.info("Registering Library " + encodeURI(dependency.componentId) + " from server " + encodeURI(dependency.url)); }); var compId = dependency.componentId.replace(/\./g, "/"); var config = { paths: { } }; config.paths[compId] = dependency.url; sap.ui.loader.config(config); } }); } }); }; /** * Registers the module paths for dependencies of the given component. * @param {string} manifestPath The the path to the app manifest path * for which the dependencies should be registered. * @returns {Promise} A promise which is resolved when the ajax request for * the app-index was successful and the module paths were registered. */ var registerComponentDependencyPaths = function (manifestPath) { return fioriToolsGetManifestLibs(manifestPath).then(function (libs) { if (libs && libs.length > 0) { var url = "/sap/bc/ui2/app_index/ui5_app_info?id=" + libs; var sapClient = ""; return new Promise( function (resolve) { sapClient = new URLSearchParams(window.location.search).get("sap-client"); if (sapClient && sapClient.length === 3) { url = url + "&sap-client=" + sapClient; } resolve(url); }).then(function (url2) { sap.ui.require(["sap/ui/thirdparty/jquery"], function (localJQuery) { return localJQuery.ajax(url2) .done(function (data) { if (data) { registerModules(data); } }); }); }); } else { return undefined; } }); }; var registerSAPFonts = function () { sap.ui.require(["sap/ui/core/IconPool"], function (IconPool) { //Fiori Theme font family and URI var fioriTheme = { fontFamily: "SAP-icons-TNT", fontURI: sap.ui.require.toUrl("sap/tnt/themes/base/fonts/") }; //Registering to the icon pool IconPool.registerFont(fioriTheme); //SAP Business Suite Theme font family and URI var bSuiteTheme = { fontFamily: "BusinessSuiteInAppSymbols", fontURI: sap.ui.require.toUrl("sap/ushell/themes/base/fonts/") }; //Registering to the icon pool IconPool.registerFont(bSuiteTheme); }); }; /*eslint-disable fiori-custom/sap-browser-api-warning, fiori-custom/sap-no-dom-access*/ var currentScript = document.getElementById("locate-reuse-libs"); if (!currentScript) { currentScript = document.currentScript; } var manifestUri = currentScript.getAttribute("data-sap-ui-manifest-uri"); var componentName = currentScript.getAttribute("data-sap-ui-componentName"); var useMockserver = currentScript.getAttribute("data-sap-ui-use-mockserver"); // Patch (KW): resourceRoot is needed to load the correct ResourceBundles var resourceRoot = manifestUri.substring(0, manifestUri.lastIndexOf('/')+1); return registerComponentDependencyPaths(manifestUri) .catch(function (error) { sap.ui.require(["sap/base/Log"], function (Log) { Log.error(error); }); }) .finally(function () { // setting the app title with internationalization sap.ui.require(["sap/ui/core/Core"], async function(Core) { Core.ready(() => { sap.ui.require(["sap/base/i18n/Localization"], function (Localization) { sap.ui.require(["sap/base/i18n/ResourceBundle"], function (ResourceBundle) { var oResourceBundle = ResourceBundle.create({ // Patch (KW): resourceRoot is needed to load the correct ResourceBundles url: resourceRoot + "i18n/i18n.properties", locale: Localization.getLanguage() }); document.title = oResourceBundle.getText("appTitle"); }); }); }); }); if (componentName && componentName.length > 0) { if (useMockserver && useMockserver === "true") { sap.ui.require(["sap/ui/core/Core"], async function(Core) { Core.ready(() => { registerSAPFonts(); sap.ui.require([componentName.replace(/\./g, "/") + "/localService/mockserver"], function (server) { // set up test service for local testing server.init(); // initialize the ushell sandbox component sap.ui.require(["sap/ushell/Container"], async function (Container) { Container.createRenderer(true).then(function (component) { component.placeAt("content"); }); }); }); }); }); } else { // Requiring the ComponentSupport module automatically executes the component initialisation for all declaratively defined components sap.ui.require(["sap/ui/core/ComponentSupport"]); // setting the app title with the i18n text sap.ui.require(["sap/ui/core/Core"], async function(Core) { Core.ready(() => { registerSAPFonts(); sap.ui.require(["sap/base/i18n/Localization"], function (Localization) { sap.ui.require(["sap/base/i18n/ResourceBundle"], function (ResourceBundle) { var oResourceBundle = ResourceBundle.create({ // Patch (KW): resourceRoot is needed to load the correct ResourceBundles url: resourceRoot + "i18n/i18n.properties", locale: Localization.getLanguage() }); document.title = oResourceBundle.getText("appTitle"); }); }); }); }); } } else { sap.ui.require(["sap/ui/core/Core"], async function(Core) { Core.ready(() => { registerSAPFonts(); // initialize the ushell sandbox component sap.ui.require(["sap/ushell/Container"], async function (Container) { try { Container.createRenderer(true).then(function (component) { component.placeAt("content"); }); } catch (error) { // support older versions of ui5 Container.createRenderer().placeAt("content"); } }); }); }); } }); })(sap);