@@ 4807-4899 (lines=93) @@ | ||
4804 | ||
4805 | var sortOrder, siblingCheck; |
|
4806 | ||
4807 | if ( document.documentElement.compareDocumentPosition ) { |
|
4808 | sortOrder = function( a, b ) { |
|
4809 | if ( a === b ) { |
|
4810 | hasDuplicate = true; |
|
4811 | return 0; |
|
4812 | } |
|
4813 | ||
4814 | if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { |
|
4815 | return a.compareDocumentPosition ? -1 : 1; |
|
4816 | } |
|
4817 | ||
4818 | return a.compareDocumentPosition(b) & 4 ? -1 : 1; |
|
4819 | }; |
|
4820 | ||
4821 | } else { |
|
4822 | sortOrder = function( a, b ) { |
|
4823 | // The nodes are identical, we can exit early |
|
4824 | if ( a === b ) { |
|
4825 | hasDuplicate = true; |
|
4826 | return 0; |
|
4827 | ||
4828 | // Fallback to using sourceIndex (in IE) if it's available on both nodes |
|
4829 | } else if ( a.sourceIndex && b.sourceIndex ) { |
|
4830 | return a.sourceIndex - b.sourceIndex; |
|
4831 | } |
|
4832 | ||
4833 | var al, bl, |
|
4834 | ap = [], |
|
4835 | bp = [], |
|
4836 | aup = a.parentNode, |
|
4837 | bup = b.parentNode, |
|
4838 | cur = aup; |
|
4839 | ||
4840 | // If the nodes are siblings (or identical) we can do a quick check |
|
4841 | if ( aup === bup ) { |
|
4842 | return siblingCheck( a, b ); |
|
4843 | ||
4844 | // If no parents were found then the nodes are disconnected |
|
4845 | } else if ( !aup ) { |
|
4846 | return -1; |
|
4847 | ||
4848 | } else if ( !bup ) { |
|
4849 | return 1; |
|
4850 | } |
|
4851 | ||
4852 | // Otherwise they're somewhere else in the tree so we need |
|
4853 | // to build up a full list of the parentNodes for comparison |
|
4854 | while ( cur ) { |
|
4855 | ap.unshift( cur ); |
|
4856 | cur = cur.parentNode; |
|
4857 | } |
|
4858 | ||
4859 | cur = bup; |
|
4860 | ||
4861 | while ( cur ) { |
|
4862 | bp.unshift( cur ); |
|
4863 | cur = cur.parentNode; |
|
4864 | } |
|
4865 | ||
4866 | al = ap.length; |
|
4867 | bl = bp.length; |
|
4868 | ||
4869 | // Start walking down the tree looking for a discrepancy |
|
4870 | for ( var i = 0; i < al && i < bl; i++ ) { |
|
4871 | if ( ap[i] !== bp[i] ) { |
|
4872 | return siblingCheck( ap[i], bp[i] ); |
|
4873 | } |
|
4874 | } |
|
4875 | ||
4876 | // We ended someplace up the tree so do a sibling check |
|
4877 | return i === al ? |
|
4878 | siblingCheck( a, bp[i], -1 ) : |
|
4879 | siblingCheck( ap[i], b, 1 ); |
|
4880 | }; |
|
4881 | ||
4882 | siblingCheck = function( a, b, ret ) { |
|
4883 | if ( a === b ) { |
|
4884 | return ret; |
|
4885 | } |
|
4886 | ||
4887 | var cur = a.nextSibling; |
|
4888 | ||
4889 | while ( cur ) { |
|
4890 | if ( cur === b ) { |
|
4891 | return -1; |
|
4892 | } |
|
4893 | ||
4894 | cur = cur.nextSibling; |
|
4895 | } |
|
4896 | ||
4897 | return 1; |
|
4898 | }; |
|
4899 | } |
|
4900 | ||
4901 | // Check to see if the browser returns elements by name when |
|
4902 | // querying by getElementById (and provide a workaround) |
@@ 4148-4235 (lines=88) @@ | ||
4145 | ||
4146 | var sortOrder, siblingCheck; |
|
4147 | ||
4148 | if ( document.documentElement.compareDocumentPosition ) { |
|
4149 | sortOrder = function( a, b ) { |
|
4150 | if ( a === b ) { |
|
4151 | hasDuplicate = true; |
|
4152 | return 0; |
|
4153 | } |
|
4154 | ||
4155 | if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { |
|
4156 | return a.compareDocumentPosition ? -1 : 1; |
|
4157 | } |
|
4158 | ||
4159 | return a.compareDocumentPosition(b) & 4 ? -1 : 1; |
|
4160 | }; |
|
4161 | ||
4162 | } else { |
|
4163 | sortOrder = function( a, b ) { |
|
4164 | var al, bl, |
|
4165 | ap = [], |
|
4166 | bp = [], |
|
4167 | aup = a.parentNode, |
|
4168 | bup = b.parentNode, |
|
4169 | cur = aup; |
|
4170 | ||
4171 | // The nodes are identical, we can exit early |
|
4172 | if ( a === b ) { |
|
4173 | hasDuplicate = true; |
|
4174 | return 0; |
|
4175 | ||
4176 | // If the nodes are siblings (or identical) we can do a quick check |
|
4177 | } else if ( aup === bup ) { |
|
4178 | return siblingCheck( a, b ); |
|
4179 | ||
4180 | // If no parents were found then the nodes are disconnected |
|
4181 | } else if ( !aup ) { |
|
4182 | return -1; |
|
4183 | ||
4184 | } else if ( !bup ) { |
|
4185 | return 1; |
|
4186 | } |
|
4187 | ||
4188 | // Otherwise they're somewhere else in the tree so we need |
|
4189 | // to build up a full list of the parentNodes for comparison |
|
4190 | while ( cur ) { |
|
4191 | ap.unshift( cur ); |
|
4192 | cur = cur.parentNode; |
|
4193 | } |
|
4194 | ||
4195 | cur = bup; |
|
4196 | ||
4197 | while ( cur ) { |
|
4198 | bp.unshift( cur ); |
|
4199 | cur = cur.parentNode; |
|
4200 | } |
|
4201 | ||
4202 | al = ap.length; |
|
4203 | bl = bp.length; |
|
4204 | ||
4205 | // Start walking down the tree looking for a discrepancy |
|
4206 | for ( var i = 0; i < al && i < bl; i++ ) { |
|
4207 | if ( ap[i] !== bp[i] ) { |
|
4208 | return siblingCheck( ap[i], bp[i] ); |
|
4209 | } |
|
4210 | } |
|
4211 | ||
4212 | // We ended someplace up the tree so do a sibling check |
|
4213 | return i === al ? |
|
4214 | siblingCheck( a, bp[i], -1 ) : |
|
4215 | siblingCheck( ap[i], b, 1 ); |
|
4216 | }; |
|
4217 | ||
4218 | siblingCheck = function( a, b, ret ) { |
|
4219 | if ( a === b ) { |
|
4220 | return ret; |
|
4221 | } |
|
4222 | ||
4223 | var cur = a.nextSibling; |
|
4224 | ||
4225 | while ( cur ) { |
|
4226 | if ( cur === b ) { |
|
4227 | return -1; |
|
4228 | } |
|
4229 | ||
4230 | cur = cur.nextSibling; |
|
4231 | } |
|
4232 | ||
4233 | return 1; |
|
4234 | }; |
|
4235 | } |
|
4236 | ||
4237 | // Utility function for retreiving the text value of an array of DOM nodes |
|
4238 | Sizzle.getText = function( elems ) { |