Skip to content

Instantly share code, notes, and snippets.

@unnamedfeeling
Last active September 27, 2018 14:00
Show Gist options
  • Save unnamedfeeling/9b962beed8e6c6839b87ea8e24ec2327 to your computer and use it in GitHub Desktop.
Save unnamedfeeling/9b962beed8e6c6839b87ea8e24ec2327 to your computer and use it in GitHub Desktop.
Universal scripts and styles async js and css loaders
var scriptsLoaded=[],
scriptCb=function(params){
if (typeof params=='undefined') {
return console.log('No params provided for scriptCb');
}
var callback=params.el.cb,
cbparams=(typeof params.el.cbparams!=='undefined')?params.el.cbparams:null;
if (typeof params.script!=='undefined') {
if (params.script.readyState) { // IE, incl. IE9
params.script.onreadystatechange = function() {
if (params.script.readyState == "loaded" || params.script.readyState == "complete") {
params.script.onreadystatechange = null;
if (typeof callback!=='undefined') callback(cbparams);
return scriptsLoaded.push(params.el.id);
}
};
} else {
params.script.onload = function(){
if (typeof callback!=='undefined') callback(cbparams);
return scriptsLoaded.push(params.el.id);
};
}
} else {
var scriptIsLoaded=(scriptsLoaded.indexOf(params.el.id) > -1);
if(typeof params.el.cb!=='undefined'&&params.el.cb !== null&&scriptIsLoaded){
if (typeof callback!=='undefined') callback(cbparams);
} else {
setTimeout(function(){scriptCb(params)}, 500);
}
}
},
// usage: loadscripts([{id: String elid, src: String elsrc, cb: function func, cbparams: Object params}]);
// checks if script is loaded allready by id and writes back to array scriptsLoaded
loadscripts=function (arr){
var params, i;
for (i = 0; i < arr.length; i++) {
if (document.getElementById(arr[i].id)==null&&scriptsLoaded.indexOf(arr[i].id) < 0) {
var s=arr[i],
script = document.createElement('script');
script.id=s.id;
script.src = s.src;
scriptCb({el:s, script:script});
document.getElementsByTagName('head')[0].appendChild(script);
} else {
scriptCb({el:arr[i]});
}
}
},
// usage: loadstyles([{id: String elid, src: String elsrc}]);
loadstyles=function(arr){
for (var i = 0; i < arr.length; i++) {
if (document.getElementById('#'+arr[i].id)==null) {
var head = document.getElementsByTagName('head')[0],
lnk = document.createElement('link'),
func = function () {
head.appendChild(lnk);
};
lnk.rel = 'stylesheet';
lnk.id = arr[i].id;
lnk.href = arr[i].src;
var img = document.createElement('img');
img.onerror = function(){
func();
}
img.src = arr[i].src;
}
}
};
//minified version
var scriptsLoaded=[],scriptCb=function(e){if(void 0===e)return console.log("No params provided for scriptCb");var t=e.el.cb,r=void 0!==e.el.cbparams?e.el.cbparams:null;if(void 0!==e.script)e.script.readyState?e.script.onreadystatechange=function(){if("loaded"==e.script.readyState||"complete"==e.script.readyState)return e.script.onreadystatechange=null,void 0!==t&&t(r),scriptsLoaded.push(e.el.id)}:e.script.onload=function(){return void 0!==t&&t(r),scriptsLoaded.push(e.el.id)};else{var i=scriptsLoaded.indexOf(e.el.id)>-1;void 0!==e.el.cb&&null!==e.el.cb&&i?void 0!==t&&t(r):setTimeout(function(){scriptCb(e)},500)}},loadscripts=function(e){var t;for(t=0;t<e.length;t++)if(null==document.getElementById(e[t].id)&&scriptsLoaded.indexOf(e[t].id)<0){var r=e[t],i=document.createElement("script");i.id=r.id,i.src=r.src,scriptCb({el:r,script:i}),document.getElementsByTagName("head")[0].appendChild(i)}else scriptCb({el:e[t]})},loadstyles=function(e){for(var t=0;t<e.length;t++)if(null==document.getElementById("#"+e[t].id)){var r=document.getElementsByTagName("head")[0],i=document.createElement("link");i.rel="stylesheet",i.id=e[t].id,i.href=e[t].src;var d=document.createElement("img");d.onerror=function(){r.appendChild(i)},d.src=e[t].src}};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment