(function(exports) { "use strict"; var config = {}; var browserGlobal = (typeof window !== 'undefined') ? window : {}; var MutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver; var RSVP; if (typeof process !== 'undefined' && {}.toString.call(process) === '[object process]') { config.async = function(callback, binding) { process.nextTick(function() { callback.call(binding); }); }; } else if (MutationObserver) { var queue = []; var observer = new MutationObserver(function() { var toProcess = queue.slice(); queue = []; toProcess.forEach(function(tuple) { var callback = tuple[0], binding = tuple[1]; callback.call(binding); }); }); var element = document.createElement('div'); observer.observe(element, { attributes: true }); // Chrome Memory Leak: https://bugs.webkit.org/show_bug.cgi?id=93661 window.addEventListener('unload', function(){ observer.disconnect(); observer = null; }); config.async = function(callback, binding) { queue.push([callback, binding]); element.setAttribute('drainQueue', 'drainQueue'); }; } else { config.async = function(callback, binding) { setTimeout(function() { callback.call(binding); }, 1); }; } var Event = function(type, options) { this.type = type; for (var option in options) { if (!options.hasOwnProperty(option)) { continue; } this[option] = options[option]; } }; var indexOf = function(callbacks, callback) { for (var i=0, l=callbacks.length; i