Team:UCL London/js/moomore

From 2011.igem.org

// MooTools: the javascript framework. // Load this file's selection again by visiting: http://mootools.net/more/417ab68a672f38ea1c04efab47af2ff7 // Or build this file again with packager using: packager build More/Assets /* ---

script: More.js

name: More

description: MooTools More

license: MIT-style license

authors:

 - Guillermo Rauch
 - Thomas Aylott
 - Scott Kyle
 - Arian Stolwijk
 - Tim Wienk
 - Christoph Pojer
 - Aaron Newton
 - Jacob Thornton

requires:

 - Core/MooTools

provides: [MooTools.More]

...

  • /

MooTools.More = { 'version': '1.3.2.1', 'build': 'e586bcd2496e9b22acfde32e12f84d49ce09e59d' };


/* ---

script: Assets.js

name: Assets

description: Provides methods to dynamically load JavaScript, CSS, and Image files into the document.

license: MIT-style license

authors:

 - Valerio Proietti

requires:

 - Core/Element.Event
 - /MooTools.More

provides: [Assets]

...

  • /

var Asset = {

javascript: function(source, properties){ if (!properties) properties = {};

var script = new Element('script', {src: source, type: 'text/javascript'}), doc = properties.document || document, loaded = 0, loadEvent = properties.onload || properties.onLoad;

var load = loadEvent ? function(){ // make sure we only call the event once if (++loaded == 1) loadEvent.call(this); } : function(){};

delete properties.onload; delete properties.onLoad; delete properties.document;

return script.addEvents({ load: load, readystatechange: function(){ if (['loaded', 'complete'].contains(this.readyState)) load.call(this); } }).set(properties).inject(doc.head); },

css: function(source, properties){ if (!properties) properties = {};

var link = new Element('link', { rel: 'stylesheet', media: 'screen', type: 'text/css', href: source });

var load = properties.onload || properties.onLoad, doc = properties.document || document;

delete properties.onload; delete properties.onLoad; delete properties.document;

if (load) link.addEvent('load', load); return link.set(properties).inject(doc.head); },

image: function(source, properties){ if (!properties) properties = {};

var image = new Image(), element = document.id(image) || new Element('img');

['load', 'abort', 'error'].each(function(name){ var type = 'on' + name, cap = 'on' + name.capitalize(), event = properties[type] || properties[cap] || function(){};

delete properties[cap]; delete properties[type];

image[type] = function(){ if (!image) return; if (!element.parentNode){ element.width = image.width; element.height = image.height; } image = image.onload = image.onabort = image.onerror = null; event.delay(1, element, element); element.fireEvent(name, element, 1); }; });

image.src = element.src = source; if (image && image.complete) image.onload.delay(1); return element.set(properties); },

images: function(sources, options){ sources = Array.from(sources);

var fn = function(){}, counter = 0;

options = Object.merge({ onComplete: fn, onProgress: fn, onError: fn, properties: {} }, options);

return new Elements(sources.map(function(source, index){ return Asset.image(source, Object.append(options.properties, { onload: function(){ counter++; options.onProgress.call(this, counter, index, source); if (counter == sources.length) options.onComplete(); }, onerror: function(){ counter++; options.onError.call(this, counter, index, source); if (counter == sources.length) options.onComplete(); } })); })); }

};