scratch – Rev 125

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

/*
 * Optional (non-Sizzle) selector module for custom builds.
 *
 * Note that this DOES NOT SUPPORT many documented jQuery
 * features in exchange for its smaller size:
 *
 * Attribute not equal selector
 * Positional selectors (:first; :eq(n); :odd; etc.)
 * Type selectors (:input; :checkbox; :button; etc.)
 * State-based selectors (:animated; :visible; :hidden; etc.)
 * :has(selector)
 * :not(complex selector)
 * custom selectors via Sizzle extensions
 * Leading combinators (e.g., $collection.find("> *"))
 * Reliable functionality on XML fragments
 * Requiring all parts of a selector to match elements under context
 *   (e.g., $div.find("div > *") now matches children of $div)
 * Matching against non-elements
 * Reliable sorting of disconnected nodes
 * querySelectorAll bug fixes (e.g., unreliable :focus on WebKit)
 *
 * If any of these are unacceptable tradeoffs, either use Sizzle or
 * customize this stub for the project's specific needs.
 */

var docElem = window.document.documentElement,
        selector_hasDuplicate,
        matches = docElem.matches ||
                docElem.webkitMatchesSelector ||
                docElem.mozMatchesSelector ||
                docElem.oMatchesSelector ||
                docElem.msMatchesSelector,
        selector_sortOrder = function( a, b ) {
                // Flag for duplicate removal
                if ( a === b ) {
                        selector_hasDuplicate = true;
                        return 0;
                }

                var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );

                if ( compare ) {
                        // Disconnected nodes
                        if ( compare & 1 ) {

                                // Choose the first element that is related to our document
                                if ( a === document || jQuery.contains(document, a) ) {
                                        return -1;
                                }
                                if ( b === document || jQuery.contains(document, b) ) {
                                        return 1;
                                }

                                // Maintain original order
                                return 0;
                        }

                        return compare & 4 ? -1 : 1;
                }

                // Not directly comparable, sort on existence of method
                return a.compareDocumentPosition ? -1 : 1;
        };

jQuery.extend({
        find: function( selector, context, results, seed ) {
                var elem, nodeType,
                        i = 0;

                results = results || [];
                context = context || document;

                // Same basic safeguard as Sizzle
                if ( !selector || typeof selector !== "string" ) {
                        return results;
                }

                // Early return if context is not an element or document
                if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
                        return [];
                }

                if ( seed ) {
                        while ( (elem = seed[i++]) ) {
                                if ( jQuery.find.matchesSelector(elem, selector) ) {
                                        results.push( elem );
                                }
                        }
                } else {
                        jQuery.merge( results, context.querySelectorAll(selector) );
                }

                return results;
        },
        unique: function( results ) {
                var elem,
                        duplicates = [],
                        i = 0,
                        j = 0;

                selector_hasDuplicate = false;
                results.sort( selector_sortOrder );

                if ( selector_hasDuplicate ) {
                        while ( (elem = results[i++]) ) {
                                if ( elem === results[ i ] ) {
                                        j = duplicates.push( i );
                                }
                        }
                        while ( j-- ) {
                                results.splice( duplicates[ j ], 1 );
                        }
                }

                return results;
        },
        text: function( elem ) {
                var node,
                        ret = "",
                        i = 0,
                        nodeType = elem.nodeType;

                if ( !nodeType ) {
                        // If no nodeType, this is expected to be an array
                        while ( (node = elem[i++]) ) {
                                // Do not traverse comment nodes
                                ret += jQuery.text( node );
                        }
                } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
                        // Use textContent for elements
                        return elem.textContent;
                } else if ( nodeType === 3 || nodeType === 4 ) {
                        return elem.nodeValue;
                }
                // Do not include comment or processing instruction nodes

                return ret;
        },
        contains: function( a, b ) {
                var adown = a.nodeType === 9 ? a.documentElement : a,
                        bup = b && b.parentNode;
                return a === bup || !!( bup && bup.nodeType === 1 && adown.contains(bup) );
        },
        isXMLDoc: function( elem ) {
                return (elem.ownerDocument || elem).documentElement.nodeName !== "HTML";
        },
        expr: {
                attrHandle: {},
                match: {
                        bool: /^(?:checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$/i,
                        needsContext: /^[\x20\t\r\n\f]*[>+~]/
                }
        }
});

jQuery.extend( jQuery.find, {
        matches: function( expr, elements ) {
                return jQuery.find( expr, null, null, elements );
        },
        matchesSelector: function( elem, expr ) {
                return matches.call( elem, expr );
        },
        attr: function( elem, name ) {
                return elem.getAttribute( name );
        }
});

});