// MIT License 
 | 
// From: https://github.com/uupaa/dynamic-import-polyfill/blob/master/importModule.js 
 | 
  
 | 
/** 
 | 
 * @module importModule 
 | 
 */ 
 | 
  
 | 
function toAbsoluteURL (url) { 
 | 
  const a = document.createElement('a'); 
 | 
  a.setAttribute('href', url); // <a href="hoge.html"> 
 | 
  return a.cloneNode(false).href; // -> "http://example.com/hoge.html" 
 | 
} 
 | 
  
 | 
function addScriptAtts (script, atts) { 
 | 
  ['id', 'class', 'type'].forEach((prop) => { 
 | 
    if (prop in atts) { 
 | 
      script[prop] = atts[prop]; 
 | 
    } 
 | 
  }); 
 | 
} 
 | 
  
 | 
// Additions by Brett 
 | 
/** 
 | 
* @typedef {PlainObject} module:importModule.ImportConfig 
 | 
* @property {string} global The variable name to set on `window` (when not using the modular version) 
 | 
* @property {boolean} [returnDefault=false] 
 | 
*/ 
 | 
/** 
 | 
* @function module:importModule.importSetGlobalDefault 
 | 
* @param {string} url 
 | 
* @param {module:importModule.ImportConfig} config 
 | 
* @returns {*} The return depends on the export of the targeted module. 
 | 
*/ 
 | 
export async function importSetGlobalDefault (url, config) { 
 | 
  return importSetGlobal(url, {...config, returnDefault: true}); 
 | 
} 
 | 
/** 
 | 
* @function module:importModule.importSetGlobal 
 | 
* @param {string} url 
 | 
* @param {module:importModule.ImportConfig} config 
 | 
* @returns {ArbitraryModule|*} The return depends on the export of the targeted module. 
 | 
*/ 
 | 
export async function importSetGlobal (url, {global, returnDefault}) { 
 | 
  // Todo: Replace calls to this function with `import()` when supported 
 | 
  const modularVersion = !('svgEditor' in window) || 
 | 
    !window.svgEditor || 
 | 
    window.svgEditor.modules !== false; 
 | 
  if (modularVersion) { 
 | 
    return importModule(url, undefined, {returnDefault}); 
 | 
  } 
 | 
  await importScript(url); 
 | 
  return window[global]; 
 | 
} 
 | 
// Addition by Brett 
 | 
export function importScript (url, atts = {}) { 
 | 
  if (Array.isArray(url)) { 
 | 
    return Promise.all(url.map((u) => { 
 | 
      return importScript(u, atts); 
 | 
    })); 
 | 
  } 
 | 
  return new Promise((resolve, reject) => { 
 | 
    const script = document.createElement('script'); 
 | 
    const destructor = () => { 
 | 
      script.onerror = null; 
 | 
      script.onload = null; 
 | 
      script.remove(); 
 | 
      script.src = ''; 
 | 
    }; 
 | 
    script.defer = 'defer'; 
 | 
    addScriptAtts(script, atts); 
 | 
    script.onerror = () => { 
 | 
      reject(new Error(`Failed to import: ${url}`)); 
 | 
      destructor(); 
 | 
    }; 
 | 
    script.onload = () => { 
 | 
      resolve(); 
 | 
      destructor(); 
 | 
    }; 
 | 
    script.src = url; 
 | 
  
 | 
    document.head.append(script); 
 | 
  }); 
 | 
} 
 | 
  
 | 
export function importModule (url, atts = {}, {returnDefault = false} = {}) { 
 | 
  if (Array.isArray(url)) { 
 | 
    return Promise.all(url.map((u) => { 
 | 
      return importModule(u, atts); 
 | 
    })); 
 | 
  } 
 | 
  return new Promise((resolve, reject) => { 
 | 
    const vector = '$importModule$' + Math.random().toString(32).slice(2); 
 | 
    const script = document.createElement('script'); 
 | 
    const destructor = () => { 
 | 
      delete window[vector]; 
 | 
      script.onerror = null; 
 | 
      script.onload = null; 
 | 
      script.remove(); 
 | 
      URL.revokeObjectURL(script.src); 
 | 
      script.src = ''; 
 | 
    }; 
 | 
    addScriptAtts(script, atts); 
 | 
    script.defer = 'defer'; 
 | 
    script.type = 'module'; 
 | 
    script.onerror = () => { 
 | 
      reject(new Error(`Failed to import: ${url}`)); 
 | 
      destructor(); 
 | 
    }; 
 | 
    script.onload = () => { 
 | 
      resolve(window[vector]); 
 | 
      destructor(); 
 | 
    }; 
 | 
    const absURL = toAbsoluteURL(url); 
 | 
    const loader = `import * as m from '${absURL.replace(/'/g, "\\'")}'; window.${vector} = ${returnDefault ? 'm.default || ' : ''}m;`; // export Module 
 | 
    const blob = new Blob([loader], {type: 'text/javascript'}); 
 | 
    script.src = URL.createObjectURL(blob); 
 | 
  
 | 
    document.head.append(script); 
 | 
  }); 
 | 
} 
 | 
  
 | 
export default importModule; 
 |