Files
abap_tutorial_11/webapp/test/locate-reuse-libs.js
2025-04-25 22:19:01 +02:00

268 lines
12 KiB
JavaScript

(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);