corrade-nucleus-nucleons – Rev 20

Subversion Repositories:
Rev:
define( [
        "../core",
        "../var/indexOf",
        "./var/rneedsContext",
        "../selector"
], function( jQuery, indexOf, rneedsContext ) {

"use strict";

var risSimple = /^.[^:#\[\.,]*$/;

// Implement the identical functionality for filter and not
function winnow( elements, qualifier, not ) {
        if ( jQuery.isFunction( qualifier ) ) {
                return jQuery.grep( elements, function( elem, i ) {
                        return !!qualifier.call( elem, i, elem ) !== not;
                } );
        }

        // Single element
        if ( qualifier.nodeType ) {
                return jQuery.grep( elements, function( elem ) {
                        return ( elem === qualifier ) !== not;
                } );
        }

        // Arraylike of elements (jQuery, arguments, Array)
        if ( typeof qualifier !== "string" ) {
                return jQuery.grep( elements, function( elem ) {
                        return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
                } );
        }

        // Simple selector that can be filtered directly, removing non-Elements
        if ( risSimple.test( qualifier ) ) {
                return jQuery.filter( qualifier, elements, not );
        }

        // Complex selector, compare the two sets, removing non-Elements
        qualifier = jQuery.filter( qualifier, elements );
        return jQuery.grep( elements, function( elem ) {
                return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
        } );
}

jQuery.filter = function( expr, elems, not ) {
        var elem = elems[ 0 ];

        if ( not ) {
                expr = ":not(" + expr + ")";
        }

        if ( elems.length === 1 && elem.nodeType === 1 ) {
                return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
        }

        return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
                return elem.nodeType === 1;
        } ) );
};

jQuery.fn.extend( {
        find: function( selector ) {
                var i, ret,
                        len = this.length,
                        self = this;

                if ( typeof selector !== "string" ) {
                        return this.pushStack( jQuery( selector ).filter( function() {
                                for ( i = 0; i < len; i++ ) {
                                        if ( jQuery.contains( self[ i ], this ) ) {
                                                return true;
                                        }
                                }
                        } ) );
                }

                ret = this.pushStack( [] );

                for ( i = 0; i < len; i++ ) {
                        jQuery.find( selector, self[ i ], ret );
                }

                return len > 1 ? jQuery.uniqueSort( ret ) : ret;
        },
        filter: function( selector ) {
                return this.pushStack( winnow( this, selector || [], false ) );
        },
        not: function( selector ) {
                return this.pushStack( winnow( this, selector || [], true ) );
        },
        is: function( selector ) {
                return !!winnow(
                        this,

                        // If this is a positional/relative selector, check membership in the returned set
                        // so $("p:first").is("p:last") won't return true for a doc with two "p".
                        typeof selector === "string" && rneedsContext.test( selector ) ?
                                jQuery( selector ) :
                                selector || [],
                        false
                ).length;
        }
} );

} );