Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/utils / dist / createScriptTag.js
Size: Mime:
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
 * @description scoped default argument
 */
const defaultAttributes = {
    async: true,
};
function shouldIgnore(src) {
    // no need for this in test env
    // @todo we may want to render a local import though, using a mock/
    if (process.env.NODE_ENV === 'test') {
        return true;
    }
    if (typeof window !== 'object') {
        return true;
    }
    // all scripts
    const scriptElements = window.document.getElementsByTagName('script');
    for (let index = 0; index < scriptElements.length; index++) {
        const script = scriptElements[index];
        // ignore it if we already loaded
        if (script.src === src) {
            // console.warn('already loaded: ', src)
            return true;
        }
    }
    return false;
}
/**
 * @tutorial https://hacks.mozilla.org/2009/06/defer/
 *
 * @param src url of the script tag
 * @param attributes
 * @modifies window.dom -> createElement -> <script src>
 */
function createScriptTag(src, attributes = defaultAttributes) {
    if (shouldIgnore(src) === true) {
        return;
    }
    const scriptElements = window.document.getElementsByTagName('script');
    // find first script
    const ref = scriptElements[0];
    // make our own new script
    const script = window.document.createElement('script');
    // set attributes
    script.src = src;
    // can also object async, or enable a fn to tap this
    script.async = attributes.async;
    // put before first script
    ref.parentNode.insertBefore(script, ref);
}
exports.createScriptTag = createScriptTag;
exports.default = createScriptTag;
//# sourceMappingURL=createScriptTag.js.map