| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | // addapted from the document.currentScript polyfill by Adam Miller// MIT license// source: https://github.com/amiller-gh/currentScript-polyfill// added support for Firefox https://bugzilla.mozilla.org/show_bug.cgi?id=1620505(function (root, factory) {  if (typeof define === 'function' && define.amd) {    define([], factory);  } else if (typeof module === 'object' && module.exports) {    module.exports = factory();  } else {    root.getCurrentScript = factory();  }}(typeof self !== 'undefined' ? self : this, function () {  function getCurrentScript () {    var descriptor = Object.getOwnPropertyDescriptor(document, 'currentScript')    // for chrome    if (!descriptor && 'currentScript' in document && document.currentScript) {      return document.currentScript    }    // for other browsers with native support for currentScript    if (descriptor && descriptor.get !== getCurrentScript && document.currentScript) {      return document.currentScript    }      // IE 8-10 support script readyState    // IE 11+ & Firefox support stack trace    try {      throw new Error();    }    catch (err) {      // Find the second match for the "at" string to get file src url from stack.      var ieStackRegExp = /.*at [^(]*\((.*):(.+):(.+)\)$/ig,        ffStackRegExp = /@([^@]*):(\d+):(\d+)\s*$/ig,        stackDetails = ieStackRegExp.exec(err.stack) || ffStackRegExp.exec(err.stack),        scriptLocation = (stackDetails && stackDetails[1]) || false,        line = (stackDetails && stackDetails[2]) || false,        currentLocation = document.location.href.replace(document.location.hash, ''),        pageSource,        inlineScriptSourceRegExp,        inlineScriptSource,        scripts = document.getElementsByTagName('script'); // Live NodeList collection        if (scriptLocation === currentLocation) {        pageSource = document.documentElement.outerHTML;        inlineScriptSourceRegExp = new RegExp('(?:[^\\n]+?\\n){0,' + (line - 2) + '}[^<]*<script>([\\d\\D]*?)<\\/script>[\\d\\D]*', 'i');        inlineScriptSource = pageSource.replace(inlineScriptSourceRegExp, '$1').trim();      }        for (var i = 0; i < scripts.length; i++) {        // If ready state is interactive, return the script tag        if (scripts[i].readyState === 'interactive') {          return scripts[i];        }          // If src matches, return the script tag        if (scripts[i].src === scriptLocation) {          return scripts[i];        }          // If inline source matches, return the script tag        if (          scriptLocation === currentLocation &&          scripts[i].innerHTML &&          scripts[i].innerHTML.trim() === inlineScriptSource        ) {          return scripts[i];        }      }        // If no match, return null      return null;    }  };  return getCurrentScript}));
 |