Skip to content

Instantly share code, notes, and snippets.

@Saneyan
Created January 3, 2012 05:22
Show Gist options
  • Select an option

  • Save Saneyan/1553636 to your computer and use it in GitHub Desktop.

Select an option

Save Saneyan/1553636 to your computer and use it in GitHub Desktop.
Require Scripts
/**
* Require file
*
* option object has
* {
* url : string || array || object
* error : function
* done : function
* loaded : function
* async : true || false
* cache : true || false
* }
*
* @param object option
*/
var requireScript = function( option ){
var rv = verifyRequireScript( option );
if( rv === false )
return false;
if( typeof rv.url === 'string' )
rv.url = [ rv.url ];
var pointer = 0;
var require = function( url, callback ){
if( rv.cache === false ){
if( url.indexOf( '?', 0 ) != -1 )
url += '&_' + Math.random();
else
url += '?_' + Math.random();
}
var elem = document.createElement( 'script' );
elem.src = url;
elem.type = 'text/javascript';
if( window.ActiveXObject ){
var timer = setTimeout( function(){
rv.error( url );
}, 30000 );
elem.onreadystatechange = function(){
if( this.readyState === 'complete' || this.readyState === 'loaded' ){
clearTimeout( timer );
rv.loaded( url );
callback();
}
};
}
else{
elem.onload = function(){
rv.loaded( url );
callback();
};
elem.onerror = function(){
rv.error( url );
};
}
document.getElementsByTagName( 'head' ).item( 0 ).appendChild( elem );
};
if( rv.async === false ){
var requireCallback = function(){
if( rv.url.length <= pointer ){
rv.done();
}
else{
require( rv.url[ pointer ], requireCallback );
pointer++;
}
};
requireCallback();
}
else{
var loaded = [];
for( var i = 0; rv.url.length > i; i++ )
loaded[ i ] = '';
var getCallback = function( ptr ){
return function(){
var complete;
loaded[ ptr ] = 'loaded';
for( var i = 0; loaded.length > i; i++ ){
if( loaded[ i ] !== 'loaded' ){
complete = false;
break;
}
}
if( complete !== false )
rv.done();
};
};
for( ; rv.url.length > pointer ; pointer++ ){
require( rv.url[ pointer ], getCallback( pointer ) );
}
}
};
/**
* Verify arguments requireScript method.
*
* @param object o
* @return object
*/
var verifyRequireScript = function( o ){
if( !( typeof o.url === 'string' || typeof o.url === 'array' || typeof o.url === 'object' ) )
return false;
// Done
o.done = typeof o.done === 'function' ? o.done : function(){};
// Error
o.error = typeof o.error === 'function' ? o.error : function(){};
// Loaded
o.loaded = typeof o.loaded === 'function' ? o.loaded : function(){};
// Async
o.async = typeof o.async === 'boolean' ? o.async : false;
// Cache
o.cache = typeof o.cache === 'boolean' ? o.cache : true;
return o;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment