initial commit
This commit is contained in:
190
public/scripts/jquery/src/selector-native.js
vendored
Normal file
190
public/scripts/jquery/src/selector-native.js
vendored
Normal file
@ -0,0 +1,190 @@
|
||||
define( [
|
||||
"./core",
|
||||
"./var/document",
|
||||
"./var/documentElement",
|
||||
"./var/hasOwn",
|
||||
"./var/indexOf",
|
||||
"./var/slice",
|
||||
|
||||
// The following utils are attached directly to the jQuery object.
|
||||
"./selector/contains",
|
||||
"./selector/escapeSelector"
|
||||
], function( jQuery, document, documentElement, hasOwn, indexOf, slice ) {
|
||||
|
||||
"use strict";
|
||||
|
||||
/*
|
||||
* Optional limited 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 jQuery 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 the full
|
||||
* selector engine or customize this stub for the project's specific
|
||||
* needs.
|
||||
*/
|
||||
|
||||
var hasDuplicate, sortInput,
|
||||
sortStable = jQuery.expando.split( "" ).sort( sortOrder ).join( "" ) === jQuery.expando,
|
||||
matches = documentElement.matches ||
|
||||
documentElement.webkitMatchesSelector ||
|
||||
documentElement.msMatchesSelector;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
jQuery.extend( {
|
||||
|
||||
// This method cannot be shared with the main selector module
|
||||
// as it does in 4.x because of an edge case quirk of putting
|
||||
// disconnected elements in the preferred document before other
|
||||
// elements in the full selector module. This will be a minor
|
||||
// breaking change in 4.0.0.
|
||||
uniqueSort: uniqueSort,
|
||||
unique: uniqueSort,
|
||||
|
||||
find: function( selector, context, results, seed ) {
|
||||
var elem, nodeType,
|
||||
i = 0;
|
||||
|
||||
results = results || [];
|
||||
context = context || document;
|
||||
|
||||
// Same basic safeguard as in the full selector module
|
||||
if ( !selector || typeof selector !== "string" ) {
|
||||
return results;
|
||||
}
|
||||
|
||||
// Early return if context is not an element, document or document fragment
|
||||
if ( ( nodeType = context.nodeType ) !== 1 && nodeType !== 9 && nodeType !== 11 ) {
|
||||
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;
|
||||
},
|
||||
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.fn.uniqueSort = function() {
|
||||
return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );
|
||||
};
|
||||
|
||||
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 trac-13807)
|
||||
value = fn && hasOwn.call( jQuery.expr.attrHandle, name.toLowerCase() ) ?
|
||||
fn( elem, name, jQuery.isXMLDoc( elem ) ) :
|
||||
undefined;
|
||||
return value !== undefined ? value : elem.getAttribute( name );
|
||||
}
|
||||
} );
|
||||
|
||||
} );
|
Reference in New Issue
Block a user