123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- import defined from "./defined.js";
- import DeveloperError from "./DeveloperError.js";
- import getAbsoluteUri from "./getAbsoluteUri.js";
- import Resource from "./Resource.js";
- /*global CESIUM_BASE_URL,define,require*/
- const cesiumScriptRegex = /((?:.*\/)|^)Cesium\.js(?:\?|\#|$)/;
- function getBaseUrlFromCesiumScript() {
- const scripts = document.getElementsByTagName("script");
- for (let i = 0, len = scripts.length; i < len; ++i) {
- const src = scripts[i].getAttribute("src");
- const result = cesiumScriptRegex.exec(src);
- if (result !== null) {
- return result[1];
- }
- }
- return undefined;
- }
- let a;
- function tryMakeAbsolute(url) {
- if (typeof document === "undefined") {
- //Node.js and Web Workers. In both cases, the URL will already be absolute.
- return url;
- }
- if (!defined(a)) {
- a = document.createElement("a");
- }
- a.href = url;
- // IE only absolutizes href on get, not set
- // eslint-disable-next-line no-self-assign
- a.href = a.href;
- return a.href;
- }
- let baseResource;
- function getCesiumBaseUrl() {
- if (defined(baseResource)) {
- return baseResource;
- }
- let baseUrlString;
- if (typeof CESIUM_BASE_URL !== "undefined") {
- baseUrlString = CESIUM_BASE_URL;
- } else if (
- typeof define === "object" &&
- defined(define.amd) &&
- !define.amd.toUrlUndefined &&
- defined(require.toUrl)
- ) {
- baseUrlString = getAbsoluteUri(
- "..",
- buildModuleUrl("Core/buildModuleUrl.js")
- );
- } else {
- baseUrlString = getBaseUrlFromCesiumScript();
- }
- //>>includeStart('debug', pragmas.debug);
- if (!defined(baseUrlString)) {
- throw new DeveloperError(
- "Unable to determine Cesium base URL automatically, try defining a global variable called CESIUM_BASE_URL."
- );
- }
- //>>includeEnd('debug');
- baseResource = new Resource({
- url: tryMakeAbsolute(baseUrlString),
- });
- baseResource.appendForwardSlash();
- return baseResource;
- }
- function buildModuleUrlFromRequireToUrl(moduleID) {
- //moduleID will be non-relative, so require it relative to this module, in Core.
- return tryMakeAbsolute(require.toUrl(`../${moduleID}`));
- }
- function buildModuleUrlFromBaseUrl(moduleID) {
- const resource = getCesiumBaseUrl().getDerivedResource({
- url: moduleID,
- });
- return resource.url;
- }
- let implementation;
- /**
- * Given a relative URL under the Cesium base URL, returns an absolute URL.
- * @function
- *
- * @param {string} relativeUrl The relative path.
- * @returns {string} The absolutely URL representation of the provided path.
- *
- * @example
- * const viewer = new Cesium.Viewer("cesiumContainer", {
- * baseLayer: Cesium.ImageryLayer.fromProviderAsync(
- * Cesium.TileMapServiceImageryProvider.fromUrl(
- * Cesium.buildModuleUrl("Assets/Textures/NaturalEarthII"),
- * )),
- * baseLayerPicker: false,
- * });
- */
- function buildModuleUrl(relativeUrl) {
- if (!defined(implementation)) {
- //select implementation
- if (
- typeof define === "object" &&
- defined(define.amd) &&
- !define.amd.toUrlUndefined &&
- defined(require.toUrl)
- ) {
- implementation = buildModuleUrlFromRequireToUrl;
- } else {
- implementation = buildModuleUrlFromBaseUrl;
- }
- }
- const url = implementation(relativeUrl);
- return url;
- }
- // exposed for testing
- buildModuleUrl._cesiumScriptRegex = cesiumScriptRegex;
- buildModuleUrl._buildModuleUrlFromBaseUrl = buildModuleUrlFromBaseUrl;
- buildModuleUrl._clearBaseResource = function () {
- baseResource = undefined;
- };
- /**
- * Sets the base URL for resolving modules.
- * @param {string} value The new base URL.
- */
- buildModuleUrl.setBaseUrl = function (value) {
- baseResource = Resource.DEFAULT.getDerivedResource({
- url: value,
- });
- };
- /**
- * Gets the base URL for resolving modules.
- *
- * @function
- * @returns {string} The configured base URL
- */
- buildModuleUrl.getCesiumBaseUrl = getCesiumBaseUrl;
- export default buildModuleUrl;
|