A jQuery plugin to lazy load other plugins. Small and easy to use.
To register a plugin:
var plugin = $.plugin.register( url_of_the_file, names_to_register, settings ); or var plugin = new $.plugin( url_of_the_file, names_to_register, settings );
names_to_register is a hash in this form: { $:’foo’, fn:[‘foo’,’bar’] }
That means the plugin will register(once loaded): $.foo, $.fn.foo and $.fn.bar. For now, you can only register to those 2 namespaces. You can use 1 string or an array of names.
settings is an optional hash with these options: { cache:boolean, //default is true, use false to avoid caching id:’some_name’, //an id for the script, only necessary if another requires it require:[ ‘some_name’, ‘some_other_name’ ], //ids of the plugins required sync:boolean //must be loaded sync ? false by default, use it if the call modifies the ‘this’ }
Once a call to the plugin is done, the plugin will be loaded, that call will be taken into account and you can even use chaining with this fake call. so $(‘a’).foo().bar() will work perfectly.
The plugin objects have methods( queue, add, check, load, preload, etc ) will explain them soon(sorry). One useful data stored in the object is plugin.url, which contains the src of the plugin.
You can use bind/unbind/trigger on the plugin objects, and $.plugin itself for global calls. When a plugin starts loading, the event ‘loading’ is triggered, it receives the plugin object as 2nd argument. When finally loaded, the event ‘loaded’ is triggered.
Example
//registers $.scrollTo and $.fn.scrollTo $.plugin.register('scrollTo.js',{$:'scrollTo', fn:'scrollTo'},{ id:'ST'}); //registers $.localScroll and $.fn.localScroll, needs ScrollTo first $.plugin.register('localScroll.js', {$:'localScroll', fn:'localScroll'},{require:'ST'});
And that’s it, you can safely call scrollTo or LocalScroll whenever you want, and then, and only then, the plugin will be requested.
Known issues: -Remote scripts cannot be sync (jQuery limitation). -Mixing remote and local plugins in a chain seems to cause problems sometimes.