Bootstrap

function for loading js and css files

by peterbenoit

JavaScript

var bootstrap = (function() {
    var bootstrap = function(scriptSrc, id, callback) {
        var head = document.head || document.getElementsByTagName("head")[0];
        var scriptId = id || "script" + Math.floor(Math.random() * 1234);
        var loaded = false;
        var scriptTag = null;

        function notLoaded(src, type) {
            var nodeList;
            var propToCheck;
            if(type === "js") {
                var nodeList = document.getElementsByTagName("script");
                propToCheck = "src";
            } else if (type ==="css") {
                var nodeList = document.getElementsByTagName("link");
                propToCheck = "href";
            }

            var nodeArray = Array.prototype.slice.call(nodeList);

            var len = nodeArray.length;
            var notFound = true;
            for(var c =0;c < len;c++) {
                if((propToCheck in nodeArray[c]) && nodeArray[c][propToCheck] == src)
                    notFound = false;
            }
             return (notFound);

        }

        if(scriptSrc.indexOf(".js") > -1 && notLoaded(scriptSrc, "js")) {
            scriptTag = createScriptElement(scriptSrc, scriptId);
        };

        if(scriptSrc.indexOf(".css") > -1 && notLoaded(scriptSrc, "css")) {
            scriptTag = createCssElement(scriptSrc, scriptId);
        };
        
        scriptTag.onload = function() {
            loaded = true;
        };
        scriptTag.onreadystatechange = function() {
            if (!loaded) {
                if (this.readystate == "loaded" || this.readystate == "completed") {
                    loaded = true;
                }
            }
        }
        head.appendChild(scriptTag);

        function makeCallback() {
            window.clearInterval(id);
            if (callback != undefined) {
                callback();
            }
        }


        var id = window.setInterval(function() {
            if (loaded) {
               ...