| define( [ |
| "./core", |
| "./var/document", |
| "./var/documentElement", |
| "./var/hasOwn", |
| "./var/indexOf" |
| ], function( jQuery, document, documentElement, hasOwn, indexOf ) { |
| |
| "use strict"; |
| |
| /* |
| * 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 hasDuplicate, sortInput, |
| rhtmlSuffix = /HTML$/i, |
| sortStable = jQuery.expando.split( "" ).sort( sortOrder ).join( "" ) === jQuery.expando, |
| matches = documentElement.matches || |
| documentElement.webkitMatchesSelector || |
| documentElement.mozMatchesSelector || |
| documentElement.oMatchesSelector || |
| documentElement.msMatchesSelector, |
| |
| // CSS string/identifier serialization |
| // https://drafts.csswg.org/cssom/#common-serializing-idioms |
| rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g, |
| fcssescape = function( ch, asCodePoint ) { |
| if ( asCodePoint ) { |
| |
| // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER |
| if ( ch === "\0" ) { |
| return "\uFFFD"; |
| } |
| |
| // Control characters and (dependent upon position) numbers get escaped as code points |
| return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; |
| } |
| |
| // Other potentially-special ASCII characters get backslash-escaped |
| return "\\" + ch; |
| }; |
| |
| function sortOrder( a, b ) { |
| |
| // Flag for duplicate removal |
| if ( a === b ) { |
| hasDuplicate = true; |
| return 0; |
| } |
| |
| // Sort on method existence if only one input has compareDocumentPosition |
| var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; |
| if ( compare ) { |
| return compare; |
| } |
| |
| // Calculate position if both inputs belong to the same document |
| compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? |
| a.compareDocumentPosition( b ) : |
| |
| // Otherwise we know they are disconnected |
| 1; |
| |
| // Disconnected nodes |
| if ( compare & 1 ) { |
| |
| // Choose the first element that is related to our preferred document |
| if ( a === document || a.ownerDocument === document && |
| jQuery.contains( document, a ) ) { |
| return -1; |
| } |
| if ( b === document || b.ownerDocument === document && |
| jQuery.contains( document, b ) ) { |
| return 1; |
| } |
| |
| // Maintain original order |
| return sortInput ? |
| ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : |
| 0; |
| } |
| |
| return compare & 4 ? -1 : 1; |
| } |
| |
| function uniqueSort( results ) { |
| var elem, |
| duplicates = [], |
| j = 0, |
| i = 0; |
| |
| hasDuplicate = false; |
| sortInput = !sortStable && results.slice( 0 ); |
| results.sort( sortOrder ); |
| |
| if ( hasDuplicate ) { |
| while ( ( elem = results[ i++ ] ) ) { |
| if ( elem === results[ i ] ) { |
| j = duplicates.push( i ); |
| } |
| } |
| while ( j-- ) { |
| results.splice( duplicates[ j ], 1 ); |
| } |
| } |
| |
| // Clear input after sorting to release objects |
| // See https://github.com/jquery/sizzle/pull/225 |
| sortInput = null; |
| |
| return results; |
| } |
| |
| function escape( sel ) { |
| return ( sel + "" ).replace( rcssescape, fcssescape ); |
| } |
| |
| jQuery.extend( { |
| uniqueSort: uniqueSort, |
| unique: uniqueSort, |
| escapeSelector: escape, |
| 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; |
| }, |
| 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 ) { |
| var namespace = elem.namespaceURI, |
| documentElement = ( elem.ownerDocument || elem ).documentElement; |
| |
| // Assume HTML when documentElement doesn't yet exist, such as inside |
| // document fragments. |
| return !rhtmlSuffix.test( namespace || |
| documentElement && documentElement.nodeName || |
| "HTML" ); |
| }, |
| expr: { |
| attrHandle: {}, |
| match: { |
| bool: new RegExp( "^(?: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 ) { |
| var fn = jQuery.expr.attrHandle[ name.toLowerCase() ], |
| |
| // Don't get fooled by Object.prototype properties (jQuery #13807) |
| value = fn && hasOwn.call( jQuery.expr.attrHandle, name.toLowerCase() ) ? |
| fn( elem, name, jQuery.isXMLDoc( elem ) ) : |
| undefined; |
| return value !== undefined ? value : elem.getAttribute( name ); |
| } |
| } ); |
| |
| } ); |