Skip to content

Instantly share code, notes, and snippets.

@mcanever-fastbooking
Last active November 24, 2017 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mcanever-fastbooking/949361996240d5aa8ed637d776a35f96 to your computer and use it in GitHub Desktop.
Save mcanever-fastbooking/949361996240d5aa8ed637d776a35f96 to your computer and use it in GitHub Desktop.
onAvailable - Wait for libraries to be available in window and run a callback.

Use example:

onAvailable(['jQuery', 'jQuery.fn.countdown'], function() {
    jQuery('.countdown').countdown(the_countdown_date, function(event) {
        jQuery(this).html(event.strftime(the_countdown_template));
    });
});
function onAvailable(vars_to_check, callback, interval) {
if (typeof vars_to_check === 'undefined' || typeof callback === 'undefined') {
return;
}
//If vars_to_check is a scalar, make it as an array
if (vars_to_check.constructor !== Array) {
vars_to_check = [vars_to_check];
}
//Default interval 100ms
if (typeof interval === 'undefined') {
interval = 100;
}
var isDefined = function(s){
s=s.split('.');
var obj= window[s.shift()];
while(obj && s.length) {
obj=obj[s.shift()];
}
return (typeof obj !== 'undefined');
};
var intervals = '$_onAvailableIntervals';
var callbacks = '$_onAvailableCallbacks';
window[intervals] = window[intervals] || [];
window[callbacks] = window[callbacks] || [];
window[callbacks].push(callback);
var index=window[callbacks].length - 1;
window[intervals].push(setInterval(
(function(index, vars) {
return function() {
var ready = true;
for (var i = 0; i<vars.length; i++) {
ready = ready && isDefined(vars[i]);
}
if (ready) {
clearInterval(window[intervals][index]);
if (typeof window[callbacks][index] !== 'undefined') {
window[callbacks][index]();
}
}
}
})(index, vars_to_check)
, interval
));
}
function onAvailable(n,i,o){if(void 0!==n&&void 0!==i){n.constructor!==Array&&(n=[n]),void 0===o&&(o=100);var w=function(n){n=n.split(".");for(var i=window[n.shift()];i&&n.length;)i=i[n.shift()];return void 0!==i},r="$_onAvailableIntervals",t="$_onAvailableCallbacks";window[r]=window[r]||[],window[t]=window[t]||[],window[t].push(i);var a=window[t].length-1;window[r].push(setInterval(function(n,i){return function(){for(var o=!0,a=0;a<i.length;a++)o=o&&w(i[a]);o&&(clearInterval(window[r][n]),void 0!==window[t][n]&&window[t][n]())}}(a,n),o))}}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment