scratch – Diff between revs 58 and 125
?pathlinks?
Rev 58 | Rev 125 | |||
---|---|---|---|---|
1 | define( [ |
1 | define([ |
|
2 | "../core", |
2 | "../core", |
|
3 | "../var/indexOf", |
3 | "../var/indexOf", |
|
4 | "./var/rneedsContext", |
4 | "./var/rneedsContext", |
|
5 | "../selector" |
5 | "../selector" |
|
6 | ], function( jQuery, indexOf, rneedsContext ) { |
6 | ], function( jQuery, indexOf, rneedsContext ) { |
|
7 | |
- | ||
8 | "use strict"; |
- | ||
9 | |
7 | |
|
10 | var risSimple = /^.[^:#\[\.,]*$/; |
8 | var risSimple = /^.[^:#\[\.,]*$/; |
|
11 | |
9 | |
|
12 | // Implement the identical functionality for filter and not |
10 | // Implement the identical functionality for filter and not |
|
13 | function winnow( elements, qualifier, not ) { |
11 | function winnow( elements, qualifier, not ) { |
|
14 | if ( jQuery.isFunction( qualifier ) ) { |
12 | if ( jQuery.isFunction( qualifier ) ) { |
|
15 | return jQuery.grep( elements, function( elem, i ) { |
13 | return jQuery.grep( elements, function( elem, i ) { |
|
- | 14 | /* jshint -W018 */ |
||
16 | return !!qualifier.call( elem, i, elem ) !== not; |
15 | return !!qualifier.call( elem, i, elem ) !== not; |
|
17 | } ); |
16 | }); |
|
- | 17 | |
||
18 | } |
18 | } |
|
19 | |
- | ||
20 | // Single element |
19 | |
|
21 | if ( qualifier.nodeType ) { |
20 | if ( qualifier.nodeType ) { |
|
22 | return jQuery.grep( elements, function( elem ) { |
21 | return jQuery.grep( elements, function( elem ) { |
|
23 | return ( elem === qualifier ) !== not; |
22 | return ( elem === qualifier ) !== not; |
|
24 | } ); |
23 | }); |
|
25 | } |
- | ||
26 | |
- | ||
27 | // Arraylike of elements (jQuery, arguments, Array) |
- | ||
28 | if ( typeof qualifier !== "string" ) { |
- | ||
29 | return jQuery.grep( elements, function( elem ) { |
- | ||
30 | return ( indexOf.call( qualifier, elem ) > -1 ) !== not; |
- | ||
31 | } ); |
24 | |
|
32 | } |
25 | } |
|
33 | |
26 | |
|
34 | // Simple selector that can be filtered directly, removing non-Elements |
27 | if ( typeof qualifier === "string" ) { |
|
- | 28 | if ( risSimple.test( qualifier ) ) { |
||
- | 29 | return jQuery.filter( qualifier, elements, not ); |
||
- | 30 | } |
||
35 | if ( risSimple.test( qualifier ) ) { |
31 | |
|
36 | return jQuery.filter( qualifier, elements, not ); |
- | ||
37 | } |
- | ||
38 | |
32 | qualifier = jQuery.filter( qualifier, elements ); |
|
39 | // Complex selector, compare the two sets, removing non-Elements |
33 | } |
|
40 | qualifier = jQuery.filter( qualifier, elements ); |
34 | |
|
41 | return jQuery.grep( elements, function( elem ) { |
35 | return jQuery.grep( elements, function( elem ) { |
|
42 | return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1; |
36 | return ( indexOf.call( qualifier, elem ) >= 0 ) !== not; |
|
43 | } ); |
37 | }); |
|
44 | } |
38 | } |
|
45 | |
39 | |
|
46 | jQuery.filter = function( expr, elems, not ) { |
40 | jQuery.filter = function( expr, elems, not ) { |
|
47 | var elem = elems[ 0 ]; |
41 | var elem = elems[ 0 ]; |
|
48 | |
42 | |
|
49 | if ( not ) { |
43 | if ( not ) { |
|
50 | expr = ":not(" + expr + ")"; |
44 | expr = ":not(" + expr + ")"; |
|
51 | } |
45 | } |
|
52 | |
46 | |
|
53 | if ( elems.length === 1 && elem.nodeType === 1 ) { |
47 | return elems.length === 1 && elem.nodeType === 1 ? |
|
54 | return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; |
- | ||
55 | } |
- | ||
56 | |
48 | jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : |
|
57 | return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { |
49 | jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { |
|
58 | return elem.nodeType === 1; |
50 | return elem.nodeType === 1; |
|
59 | } ) ); |
51 | })); |
|
60 | }; |
52 | }; |
|
61 | |
53 | |
|
62 | jQuery.fn.extend( { |
54 | jQuery.fn.extend({ |
|
63 | find: function( selector ) { |
55 | find: function( selector ) { |
|
- | 56 | var i, |
||
64 | var i, ret, |
57 | len = this.length, |
|
65 | len = this.length, |
58 | ret = [], |
|
66 | self = this; |
59 | self = this; |
|
67 | |
60 | |
|
68 | if ( typeof selector !== "string" ) { |
61 | if ( typeof selector !== "string" ) { |
|
69 | return this.pushStack( jQuery( selector ).filter( function() { |
62 | return this.pushStack( jQuery( selector ).filter(function() { |
|
70 | for ( i = 0; i < len; i++ ) { |
63 | for ( i = 0; i < len; i++ ) { |
|
71 | if ( jQuery.contains( self[ i ], this ) ) { |
64 | if ( jQuery.contains( self[ i ], this ) ) { |
|
72 | return true; |
65 | return true; |
|
73 | } |
66 | } |
|
74 | } |
67 | } |
|
75 | } ) ); |
68 | }) ); |
|
76 | } |
69 | } |
|
77 | |
- | ||
78 | ret = this.pushStack( [] ); |
- | ||
79 | |
70 | |
|
80 | for ( i = 0; i < len; i++ ) { |
71 | for ( i = 0; i < len; i++ ) { |
|
81 | jQuery.find( selector, self[ i ], ret ); |
72 | jQuery.find( selector, self[ i ], ret ); |
|
82 | } |
73 | } |
|
- | 74 | |
||
83 | |
75 | // Needed because $( selector, context ) becomes $( context ).find( selector ) |
|
- | 76 | ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); |
||
- | 77 | ret.selector = this.selector ? this.selector + " " + selector : selector; |
||
84 | return len > 1 ? jQuery.uniqueSort( ret ) : ret; |
78 | return ret; |
|
85 | }, |
79 | }, |
|
86 | filter: function( selector ) { |
80 | filter: function( selector ) { |
|
87 | return this.pushStack( winnow( this, selector || [], false ) ); |
81 | return this.pushStack( winnow(this, selector || [], false) ); |
|
88 | }, |
82 | }, |
|
89 | not: function( selector ) { |
83 | not: function( selector ) { |
|
90 | return this.pushStack( winnow( this, selector || [], true ) ); |
84 | return this.pushStack( winnow(this, selector || [], true) ); |
|
91 | }, |
85 | }, |
|
92 | is: function( selector ) { |
86 | is: function( selector ) { |
|
93 | return !!winnow( |
87 | return !!winnow( |
|
94 | this, |
88 | this, |
|
95 | |
89 | |
|
96 | // If this is a positional/relative selector, check membership in the returned set |
90 | // If this is a positional/relative selector, check membership in the returned set |
|
97 | // so $("p:first").is("p:last") won't return true for a doc with two "p". |
91 | // so $("p:first").is("p:last") won't return true for a doc with two "p". |
|
98 | typeof selector === "string" && rneedsContext.test( selector ) ? |
92 | typeof selector === "string" && rneedsContext.test( selector ) ? |
|
99 | jQuery( selector ) : |
93 | jQuery( selector ) : |
|
100 | selector || [], |
94 | selector || [], |
|
101 | false |
95 | false |
|
102 | ).length; |
96 | ).length; |
|
103 | } |
97 | } |
|
104 | } ); |
98 | }); |
|
105 | |
99 | |
|
106 | } ); |
100 | }); |
|
107 | |
101 | |