12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- /* Copyright (c) 2017 Environmental Systems Research Institute, Inc.
- * Apache-2.0 */
- import { getScript, isLoaded, loadScript } from './script';
- import utils from './utils/index';
- // wrap Dojo's require() in a promise
- function requireModules(modules) {
- return new utils.Promise(function (resolve, reject) {
- // If something goes wrong loading the esri/dojo scripts, reject with the error.
- var errorHandler = window['require'].on('error', reject);
- window['require'](modules, function () {
- var args = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i];
- }
- // remove error handler
- errorHandler.remove();
- // Resolve with the parameters from dojo require as an array.
- resolve(args);
- });
- });
- }
- // returns a promise that resolves with an array of the required modules
- // also will attempt to lazy load the ArcGIS API if it has not already been loaded
- export function loadModules(modules, loadScriptOptions) {
- if (loadScriptOptions === void 0) { loadScriptOptions = {}; }
- if (!isLoaded()) {
- // script is not yet loaded, is it in the process of loading?
- var script = getScript();
- var src = script && script.getAttribute('src');
- if (!loadScriptOptions.url && src) {
- // script is still loading and user did not specify a URL
- // in this case we want to default to the URL that's being loaded
- // instead of defaulting to the latest 4.x URL
- loadScriptOptions.url = src;
- }
- // attempt to load the script then load the modules
- return loadScript(loadScriptOptions).then(function () { return requireModules(modules); });
- }
- else {
- // script is already loaded, just load the modules
- return requireModules(modules);
- }
- }
|