forked from Botanical/BotanJS
104 lines
2.0 KiB
JavaScript
104 lines
2.0 KiB
JavaScript
(function(){
|
|
var ns = __namespace( "System.Net" );
|
|
var className = "ClassLoader";
|
|
|
|
/** @type {System.utils} */
|
|
var utils = __import( "System.utils" );
|
|
/** @type {System.utils.IKey} */
|
|
var IKey = __import( "System.utils.IKey" );
|
|
/** @type {Dandelion} */
|
|
var Dand = __import( "Dandelion" );
|
|
|
|
var LoadedClasses = {};
|
|
|
|
var loadFile = function ( sapi, request, mode )
|
|
{
|
|
var head = Dand.tag( "head" )[0];
|
|
|
|
// Add css
|
|
head.appendChild(
|
|
Dand.wrapna(
|
|
"link"
|
|
, IKey.quickDef(
|
|
"rel", "stylesheet"
|
|
, "type", "text/css"
|
|
, "href", sapi + mode + "css/" + request
|
|
)
|
|
)
|
|
);
|
|
|
|
// Add js
|
|
head.appendChild(
|
|
Dand.wrapna(
|
|
"script"
|
|
, IKey.quickDef(
|
|
"type", "text/javascript"
|
|
, "src", sapi + mode + "js/" + request
|
|
)
|
|
)
|
|
);
|
|
|
|
};
|
|
|
|
var Loader = function( sapi, mode )
|
|
{
|
|
mode = ( mode === undefined ) ? "o" : mode;
|
|
|
|
this.load = function( classes, handler )
|
|
{
|
|
if( !classes.join ) classes = [ classes ];
|
|
|
|
var excludes = BotanJS.getDef();
|
|
|
|
var onLoad = function( e )
|
|
{
|
|
if( classes.indexOf( e.data.name ) < 0 ) return;
|
|
handler( e.data.name );
|
|
};
|
|
|
|
// Handle the already loaded classes
|
|
var needed = [];
|
|
for( var i in classes )
|
|
{
|
|
var c = classes[i];
|
|
if( ~excludes.indexOf( c ) || LoadedClasses[ c ] )
|
|
{
|
|
handler( c );
|
|
}
|
|
else
|
|
{
|
|
needed.push( c );
|
|
}
|
|
}
|
|
|
|
if( !needed.length ) return;
|
|
|
|
// Excludes
|
|
utils.objMap( excludes , function( v ) { return "-" + v; } );
|
|
var loadc = null;
|
|
|
|
var sp = mode ? { 'o': '/', 'r': '/' }[ mode ] : ',';
|
|
|
|
loadFile(
|
|
sapi
|
|
, needed.join( sp ) + sp + excludes.join( sp )
|
|
, mode
|
|
);
|
|
|
|
BotanJS.addEventListener( "NS_INIT", onLoad );
|
|
|
|
BotanJS.addEventListener( "NS_EXPORT", function( e )
|
|
{
|
|
if( e.data.name )
|
|
{
|
|
LoadedClasses[ e.data.name ] = 1;
|
|
}
|
|
onLoad( e );
|
|
} );
|
|
};
|
|
};
|
|
|
|
ns[ NS_EXPORT ]( EX_CLASS, "ClassLoader", Loader );
|
|
})();
|
|
|