Show:
                            /**
                             * @module node
                             * @submodule node-base
                             */
                            
                            var Y_Node = Y.Node;
                            var Y_NodeList = Y.NodeList;
                            /**
                             * List of events that route to DOM events
                             * @static
                             * @property DOM_EVENTS
                             * @for Node
                             */
                            
                            Y_Node.DOM_EVENTS = {
                                abort: 1,
                                beforeunload: 1,
                                blur: 1,
                                change: 1,
                                click: 1,
                                close: 1,
                                command: 1,
                                contextmenu: 1,
                                copy: 1,
                                cut: 1,
                                dblclick: 1,
                                DOMMouseScroll: 1,
                                drag: 1,
                                dragstart: 1,
                                dragenter: 1,
                                dragover: 1,
                                dragleave: 1,
                                dragend: 1,
                                drop: 1,
                                error: 1,
                                focus: 1,
                                key: 1,
                                keydown: 1,
                                keypress: 1,
                                keyup: 1,
                                load: 1,
                                message: 1,
                                mousedown: 1,
                                mouseenter: 1,
                                mouseleave: 1,
                                mousemove: 1,
                                mousemultiwheel: 1,
                                mouseout: 1,
                                mouseover: 1,
                                mouseup: 1,
                                mousewheel: 1,
                                orientationchange: 1,
                                paste: 1,
                                reset: 1,
                                resize: 1,
                                select: 1,
                                selectstart: 1,
                                submit: 1,
                                scroll: 1,
                                textInput: 1,
                                unload: 1,
                                invalid: 1
                            };
                            
                            // Add custom event adaptors to this list.  This will make it so
                            // that delegate, key, available, contentready, etc all will
                            // be available through Node.on
                            Y.mix(Y_Node.DOM_EVENTS, Y.Env.evt.plugins);
                            
                            Y.augment(Y_Node, Y.EventTarget);
                            
                            Y.mix(Y_Node.prototype, {
                                /**
                                 * Removes event listeners from the node and (optionally) its subtree
                                 * @method purge
                                 * @param {Boolean} recurse (optional) Whether or not to remove listeners from the
                                 * node's subtree
                                 * @param {String} type (optional) Only remove listeners of the specified type
                                 * @chainable
                                 *
                                 */
                                purge: function(recurse, type) {
                                    Y.Event.purgeElement(this._node, recurse, type);
                                    return this;
                                }
                            
                            });
                            
                            Y.mix(Y.NodeList.prototype, {
                                _prepEvtArgs: function(type, fn, context) {
                                    // map to Y.on/after signature (type, fn, nodes, context, arg1, arg2, etc)
                                    var args = Y.Array(arguments, 0, true);
                            
                                    if (args.length < 2) { // type only (event hash) just add nodes
                                        args[2] = this._nodes;
                                    } else {
                                        args.splice(2, 0, this._nodes);
                                    }
                            
                                    args[3] = context || this; // default to NodeList instance as context
                            
                                    return args;
                                },
                            
                                /**
                                Subscribe a callback function for each `Node` in the collection to execute
                                in response to a DOM event.
                            
                                NOTE: Generally, the `on()` method should be avoided on `NodeLists`, in
                                favor of using event delegation from a parent Node.  See the Event user
                                guide for details.
                            
                                Most DOM events are associated with a preventable default behavior, such as
                                link clicks navigating to a new page.  Callbacks are passed a
                                `DOMEventFacade` object as their first argument (usually called `e`) that
                                can be used to prevent this default behavior with `e.preventDefault()`. See
                                the `DOMEventFacade` API for all available properties and methods on the
                                object.
                            
                                By default, the `this` object will be the `NodeList` that the subscription
                                came from, <em>not the `Node` that received the event</em>.  Use
                                `e.currentTarget` to refer to the `Node`.
                            
                                Returning `false` from a callback is supported as an alternative to calling
                                `e.preventDefault(); e.stopPropagation();`.  However, it is recommended to
                                use the event methods.
                            
                                @example
                            
                                    Y.all(".sku").on("keydown", function (e) {
                                        if (e.keyCode === 13) {
                                            e.preventDefault();
                            
                                            // Use e.currentTarget to refer to the individual Node
                                            var item = Y.MyApp.searchInventory( e.currentTarget.get('value') );
                                            // etc ...
                                        }
                                    });
                            
                                @method on
                                @param {String} type The name of the event
                                @param {Function} fn The callback to execute in response to the event
                                @param {Object} [context] Override `this` object in callback
                                @param {Any} [arg*] 0..n additional arguments to supply to the subscriber
                                @return {EventHandle} A subscription handle capable of detaching that
                                                      subscription
                                @for NodeList
                                **/
                                on: function(type, fn, context) {
                                    return Y.on.apply(Y, this._prepEvtArgs.apply(this, arguments));
                                },
                            
                                /**
                                 * Applies an one-time event listener to each Node bound to the NodeList.
                                 * @method once
                                 * @param {String} type The event being listened for
                                 * @param {Function} fn The handler to call when the event fires
                                 * @param {Object} context The context to call the handler with.
                                 * Default is the NodeList instance.
                                 * @return {EventHandle} A subscription handle capable of detaching that
                                 *                    subscription
                                 * @for NodeList
                                 */
                                once: function(type, fn, context) {
                                    return Y.once.apply(Y, this._prepEvtArgs.apply(this, arguments));
                                },
                            
                                /**
                                 * Applies an event listener to each Node bound to the NodeList.
                                 * The handler is called only after all on() handlers are called
                                 * and the event is not prevented.
                                 * @method after
                                 * @param {String} type The event being listened for
                                 * @param {Function} fn The handler to call when the event fires
                                 * @param {Object} context The context to call the handler with.
                                 * Default is the NodeList instance.
                                 * @return {EventHandle} A subscription handle capable of detaching that
                                 *                    subscription
                                 * @for NodeList
                                 */
                                after: function(type, fn, context) {
                                    return Y.after.apply(Y, this._prepEvtArgs.apply(this, arguments));
                                },
                            
                                /**
                                 * Applies an one-time event listener to each Node bound to the NodeList
                                 * that will be called only after all on() handlers are called and the
                                 * event is not prevented.
                                 *
                                 * @method onceAfter
                                 * @param {String} type The event being listened for
                                 * @param {Function} fn The handler to call when the event fires
                                 * @param {Object} context The context to call the handler with.
                                 * Default is the NodeList instance.
                                 * @return {EventHandle} A subscription handle capable of detaching that
                                 *                    subscription
                                 * @for NodeList
                                 */
                                onceAfter: function(type, fn, context) {
                                    return Y.onceAfter.apply(Y, this._prepEvtArgs.apply(this, arguments));
                                }
                            });
                            
                            Y_NodeList.importMethod(Y.Node.prototype, [
                                /**
                                  * Called on each Node instance
                                  * @method detach
                                  * @see Node.detach
                                  * @for NodeList
                                  */
                                'detach',
                            
                                /** Called on each Node instance
                                  * @method detachAll
                                  * @see Node.detachAll
                                  * @for NodeList
                                  */
                                'detachAll'
                            ]);
                            
                            /**
                            Subscribe a callback function to execute in response to a DOM event or custom
                            event.
                            
                            Most DOM events are associated with a preventable default behavior such as
                            link clicks navigating to a new page.  Callbacks are passed a `DOMEventFacade`
                            object as their first argument (usually called `e`) that can be used to
                            prevent this default behavior with `e.preventDefault()`. See the
                            `DOMEventFacade` API for all available properties and methods on the object.
                            
                            If the event name passed as the first parameter is not a whitelisted DOM event,
                            it will be treated as a custom event subscriptions, allowing
                            `node.fire('customEventName')` later in the code.  Refer to the Event user guide
                            for the full DOM event whitelist.
                            
                            By default, the `this` object in the callback will refer to the subscribed
                            `Node`.
                            
                            Returning `false` from a callback is supported as an alternative to calling
                            `e.preventDefault(); e.stopPropagation();`.  However, it is recommended to use
                            the event methods.
                            
                            @example
                            
                                Y.one("#my-form").on("submit", function (e) {
                                    e.preventDefault();
                            
                                    // proceed with ajax form submission instead...
                                });
                            
                            @method on
                            @param {String} type The name of the event
                            @param {Function} fn The callback to execute in response to the event
                            @param {Object} [context] Override `this` object in callback
                            @param {Any} [arg*] 0..n additional arguments to supply to the subscriber
                            @return {EventHandle} A subscription handle capable of detaching that
                                                  subscription
                            @for Node
                            **/