Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
J
jquery
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
夏彬
jquery
Commits
b910b2ab
Commit
b910b2ab
authored
Feb 24, 2016
by
Timmy Willison
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Release: add external/sizzle to package
parent
56ead6ff
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
2183 additions
and
0 deletions
+2183
-0
LICENSE.txt
external/sizzle/LICENSE.txt
+36
-0
sizzle.js
external/sizzle/dist/sizzle.js
+2143
-0
sizzle.min.js
external/sizzle/dist/sizzle.min.js
+3
-0
sizzle.min.map
external/sizzle/dist/sizzle.min.map
+1
-0
No files found.
external/sizzle/LICENSE.txt
0 → 100644
View file @
b910b2ab
Copyright jQuery Foundation and other contributors, https://jquery.org/
This software consists of voluntary contributions made by many
individuals. For exact contribution history, see the revision history
available at https://github.com/jquery/sizzle
The following license applies to all parts of this software except as
documented below:
====
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
====
All files located in the node_modules and external directories are
externally maintained libraries used by this software which have their
own licenses; we recommend you read them, as their terms may differ from
the terms above.
external/sizzle/dist/sizzle.js
0 → 100644
View file @
b910b2ab
/*!
* Sizzle CSS Selector Engine v2.2.1
* http://sizzlejs.com/
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license
* http://jquery.org/license
*
* Date: 2015-10-17
*/
(
function
(
window
)
{
var
i
,
support
,
Expr
,
getText
,
isXML
,
tokenize
,
compile
,
select
,
outermostContext
,
sortInput
,
hasDuplicate
,
// Local document vars
setDocument
,
document
,
docElem
,
documentIsHTML
,
rbuggyQSA
,
rbuggyMatches
,
matches
,
contains
,
// Instance-specific data
expando
=
"sizzle"
+
1
*
new
Date
(),
preferredDoc
=
window
.
document
,
dirruns
=
0
,
done
=
0
,
classCache
=
createCache
(),
tokenCache
=
createCache
(),
compilerCache
=
createCache
(),
sortOrder
=
function
(
a
,
b
)
{
if
(
a
===
b
)
{
hasDuplicate
=
true
;
}
return
0
;
},
// General-purpose constants
MAX_NEGATIVE
=
1
<<
31
,
// Instance methods
hasOwn
=
({}).
hasOwnProperty
,
arr
=
[],
pop
=
arr
.
pop
,
push_native
=
arr
.
push
,
push
=
arr
.
push
,
slice
=
arr
.
slice
,
// Use a stripped-down indexOf as it's faster than native
// http://jsperf.com/thor-indexof-vs-for/5
indexOf
=
function
(
list
,
elem
)
{
var
i
=
0
,
len
=
list
.
length
;
for
(
;
i
<
len
;
i
++
)
{
if
(
list
[
i
]
===
elem
)
{
return
i
;
}
}
return
-
1
;
},
booleans
=
"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped"
,
// Regular expressions
// http://www.w3.org/TR/css3-selectors/#whitespace
whitespace
=
"[
\\
x20
\\
t
\\
r
\
\n
\\
f]"
,
// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
identifier
=
"(?:
\\\\
.|[
\\
w-]|[^
\\
x00-
\\
xa0])+"
,
// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
attributes
=
"
\\
["
+
whitespace
+
"*("
+
identifier
+
")(?:"
+
whitespace
+
// Operator (capture 2)
"*([*^$|!~]?=)"
+
whitespace
+
// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
"*(?:'((?:
\\\\
.|[^
\\\\
'])*)'|
\"
((?:
\\\\
.|[^
\\\\
\"
])*)
\"
|("
+
identifier
+
"))|)"
+
whitespace
+
"*
\\
]"
,
pseudos
=
":("
+
identifier
+
")(?:
\\
(("
+
// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
// 1. quoted (capture 3; capture 4 or capture 5)
"('((?:
\\\\
.|[^
\\\\
'])*)'|
\"
((?:
\\\\
.|[^
\\\\
\"
])*)
\"
)|"
+
// 2. simple (capture 6)
"((?:
\\\\
.|[^
\\\\
()[
\\
]]|"
+
attributes
+
")*)|"
+
// 3. anything else (capture 2)
".*"
+
")
\\
)|)"
,
// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
rwhitespace
=
new
RegExp
(
whitespace
+
"+"
,
"g"
),
rtrim
=
new
RegExp
(
"^"
+
whitespace
+
"+|((?:^|[^
\\\\
])(?:
\\\\
.)*)"
+
whitespace
+
"+$"
,
"g"
),
rcomma
=
new
RegExp
(
"^"
+
whitespace
+
"*,"
+
whitespace
+
"*"
),
rcombinators
=
new
RegExp
(
"^"
+
whitespace
+
"*([>+~]|"
+
whitespace
+
")"
+
whitespace
+
"*"
),
rattributeQuotes
=
new
RegExp
(
"="
+
whitespace
+
"*([^
\\
]'
\"
]*?)"
+
whitespace
+
"*
\\
]"
,
"g"
),
rpseudo
=
new
RegExp
(
pseudos
),
ridentifier
=
new
RegExp
(
"^"
+
identifier
+
"$"
),
matchExpr
=
{
"ID"
:
new
RegExp
(
"^#("
+
identifier
+
")"
),
"CLASS"
:
new
RegExp
(
"^
\\
.("
+
identifier
+
")"
),
"TAG"
:
new
RegExp
(
"^("
+
identifier
+
"|[*])"
),
"ATTR"
:
new
RegExp
(
"^"
+
attributes
),
"PSEUDO"
:
new
RegExp
(
"^"
+
pseudos
),
"CHILD"
:
new
RegExp
(
"^:(only|first|last|nth|nth-last)-(child|of-type)(?:
\\
("
+
whitespace
+
"*(even|odd|(([+-]|)(
\\
d*)n|)"
+
whitespace
+
"*(?:([+-]|)"
+
whitespace
+
"*(
\\
d+)|))"
+
whitespace
+
"*
\\
)|)"
,
"i"
),
"bool"
:
new
RegExp
(
"^(?:"
+
booleans
+
")$"
,
"i"
),
// For use in libraries implementing .is()
// We use this for POS matching in `select`
"needsContext"
:
new
RegExp
(
"^"
+
whitespace
+
"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:
\\
("
+
whitespace
+
"*((?:-
\\
d)?
\\
d*)"
+
whitespace
+
"*
\\
)|)(?=[^-]|$)"
,
"i"
)
},
rinputs
=
/^
(?:
input|select|textarea|button
)
$/i
,
rheader
=
/^h
\d
$/i
,
rnative
=
/^
[^
{
]
+
\{\s
*
\[
native
\w
/
,
// Easily-parseable/retrievable ID or TAG or CLASS selectors
rquickExpr
=
/^
(?:
#
([\w
-
]
+
)
|
(\w
+
)
|
\.([\w
-
]
+
))
$/
,
rsibling
=
/
[
+~
]
/
,
rescape
=
/'|
\\
/g
,
// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
runescape
=
new
RegExp
(
"
\\\\
([
\\
da-f]{1,6}"
+
whitespace
+
"?|("
+
whitespace
+
")|.)"
,
"ig"
),
funescape
=
function
(
_
,
escaped
,
escapedWhitespace
)
{
var
high
=
"0x"
+
escaped
-
0x10000
;
// NaN means non-codepoint
// Support: Firefox<24
// Workaround erroneous numeric interpretation of +"0x"
return
high
!==
high
||
escapedWhitespace
?
escaped
:
high
<
0
?
// BMP codepoint
String
.
fromCharCode
(
high
+
0x10000
)
:
// Supplemental Plane codepoint (surrogate pair)
String
.
fromCharCode
(
high
>>
10
|
0xD800
,
high
&
0x3FF
|
0xDC00
);
},
// Used for iframes
// See setDocument()
// Removing the function wrapper causes a "Permission Denied"
// error in IE
unloadHandler
=
function
()
{
setDocument
();
};
// Optimize for push.apply( _, NodeList )
try
{
push
.
apply
(
(
arr
=
slice
.
call
(
preferredDoc
.
childNodes
)),
preferredDoc
.
childNodes
);
// Support: Android<4.0
// Detect silently failing push.apply
arr
[
preferredDoc
.
childNodes
.
length
].
nodeType
;
}
catch
(
e
)
{
push
=
{
apply
:
arr
.
length
?
// Leverage slice if possible
function
(
target
,
els
)
{
push_native
.
apply
(
target
,
slice
.
call
(
els
)
);
}
:
// Support: IE<9
// Otherwise append directly
function
(
target
,
els
)
{
var
j
=
target
.
length
,
i
=
0
;
// Can't trust NodeList.length
while
(
(
target
[
j
++
]
=
els
[
i
++
])
)
{}
target
.
length
=
j
-
1
;
}
};
}
function
Sizzle
(
selector
,
context
,
results
,
seed
)
{
var
m
,
i
,
elem
,
nid
,
nidselect
,
match
,
groups
,
newSelector
,
newContext
=
context
&&
context
.
ownerDocument
,
// nodeType defaults to 9, since context defaults to document
nodeType
=
context
?
context
.
nodeType
:
9
;
results
=
results
||
[];
// Return early from calls with invalid selector or context
if
(
typeof
selector
!==
"string"
||
!
selector
||
nodeType
!==
1
&&
nodeType
!==
9
&&
nodeType
!==
11
)
{
return
results
;
}
// Try to shortcut find operations (as opposed to filters) in HTML documents
if
(
!
seed
)
{
if
(
(
context
?
context
.
ownerDocument
||
context
:
preferredDoc
)
!==
document
)
{
setDocument
(
context
);
}
context
=
context
||
document
;
if
(
documentIsHTML
)
{
// If the selector is sufficiently simple, try using a "get*By*" DOM method
// (excepting DocumentFragment context, where the methods don't exist)
if
(
nodeType
!==
11
&&
(
match
=
rquickExpr
.
exec
(
selector
))
)
{
// ID selector
if
(
(
m
=
match
[
1
])
)
{
// Document context
if
(
nodeType
===
9
)
{
if
(
(
elem
=
context
.
getElementById
(
m
))
)
{
// Support: IE, Opera, Webkit
// TODO: identify versions
// getElementById can match elements by name instead of ID
if
(
elem
.
id
===
m
)
{
results
.
push
(
elem
);
return
results
;
}
}
else
{
return
results
;
}
// Element context
}
else
{
// Support: IE, Opera, Webkit
// TODO: identify versions
// getElementById can match elements by name instead of ID
if
(
newContext
&&
(
elem
=
newContext
.
getElementById
(
m
))
&&
contains
(
context
,
elem
)
&&
elem
.
id
===
m
)
{
results
.
push
(
elem
);
return
results
;
}
}
// Type selector
}
else
if
(
match
[
2
]
)
{
push
.
apply
(
results
,
context
.
getElementsByTagName
(
selector
)
);
return
results
;
// Class selector
}
else
if
(
(
m
=
match
[
3
])
&&
support
.
getElementsByClassName
&&
context
.
getElementsByClassName
)
{
push
.
apply
(
results
,
context
.
getElementsByClassName
(
m
)
);
return
results
;
}
}
// Take advantage of querySelectorAll
if
(
support
.
qsa
&&
!
compilerCache
[
selector
+
" "
]
&&
(
!
rbuggyQSA
||
!
rbuggyQSA
.
test
(
selector
))
)
{
if
(
nodeType
!==
1
)
{
newContext
=
context
;
newSelector
=
selector
;
// qSA looks outside Element context, which is not what we want
// Thanks to Andrew Dupont for this workaround technique
// Support: IE <=8
// Exclude object elements
}
else
if
(
context
.
nodeName
.
toLowerCase
()
!==
"object"
)
{
// Capture the context ID, setting it first if necessary
if
(
(
nid
=
context
.
getAttribute
(
"id"
))
)
{
nid
=
nid
.
replace
(
rescape
,
"
\\
$&"
);
}
else
{
context
.
setAttribute
(
"id"
,
(
nid
=
expando
)
);
}
// Prefix every selector in the list
groups
=
tokenize
(
selector
);
i
=
groups
.
length
;
nidselect
=
ridentifier
.
test
(
nid
)
?
"#"
+
nid
:
"[id='"
+
nid
+
"']"
;
while
(
i
--
)
{
groups
[
i
]
=
nidselect
+
" "
+
toSelector
(
groups
[
i
]
);
}
newSelector
=
groups
.
join
(
","
);
// Expand context for sibling selectors
newContext
=
rsibling
.
test
(
selector
)
&&
testContext
(
context
.
parentNode
)
||
context
;
}
if
(
newSelector
)
{
try
{
push
.
apply
(
results
,
newContext
.
querySelectorAll
(
newSelector
)
);
return
results
;
}
catch
(
qsaError
)
{
}
finally
{
if
(
nid
===
expando
)
{
context
.
removeAttribute
(
"id"
);
}
}
}
}
}
}
// All others
return
select
(
selector
.
replace
(
rtrim
,
"$1"
),
context
,
results
,
seed
);
}
/**
* Create key-value caches of limited size
* @returns {function(string, object)} Returns the Object data after storing it on itself with
* property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
* deleting the oldest entry
*/
function
createCache
()
{
var
keys
=
[];
function
cache
(
key
,
value
)
{
// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
if
(
keys
.
push
(
key
+
" "
)
>
Expr
.
cacheLength
)
{
// Only keep the most recent entries
delete
cache
[
keys
.
shift
()
];
}
return
(
cache
[
key
+
" "
]
=
value
);
}
return
cache
;
}
/**
* Mark a function for special use by Sizzle
* @param {Function} fn The function to mark
*/
function
markFunction
(
fn
)
{
fn
[
expando
]
=
true
;
return
fn
;
}
/**
* Support testing using an element
* @param {Function} fn Passed the created div and expects a boolean result
*/
function
assert
(
fn
)
{
var
div
=
document
.
createElement
(
"div"
);
try
{
return
!!
fn
(
div
);
}
catch
(
e
)
{
return
false
;
}
finally
{
// Remove from its parent by default
if
(
div
.
parentNode
)
{
div
.
parentNode
.
removeChild
(
div
);
}
// release memory in IE
div
=
null
;
}
}
/**
* Adds the same handler for all of the specified attrs
* @param {String} attrs Pipe-separated list of attributes
* @param {Function} handler The method that will be applied
*/
function
addHandle
(
attrs
,
handler
)
{
var
arr
=
attrs
.
split
(
"|"
),
i
=
arr
.
length
;
while
(
i
--
)
{
Expr
.
attrHandle
[
arr
[
i
]
]
=
handler
;
}
}
/**
* Checks document order of two siblings
* @param {Element} a
* @param {Element} b
* @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
*/
function
siblingCheck
(
a
,
b
)
{
var
cur
=
b
&&
a
,
diff
=
cur
&&
a
.
nodeType
===
1
&&
b
.
nodeType
===
1
&&
(
~
b
.
sourceIndex
||
MAX_NEGATIVE
)
-
(
~
a
.
sourceIndex
||
MAX_NEGATIVE
);
// Use IE sourceIndex if available on both nodes
if
(
diff
)
{
return
diff
;
}
// Check if b follows a
if
(
cur
)
{
while
(
(
cur
=
cur
.
nextSibling
)
)
{
if
(
cur
===
b
)
{
return
-
1
;
}
}
}
return
a
?
1
:
-
1
;
}
/**
* Returns a function to use in pseudos for input types
* @param {String} type
*/
function
createInputPseudo
(
type
)
{
return
function
(
elem
)
{
var
name
=
elem
.
nodeName
.
toLowerCase
();
return
name
===
"input"
&&
elem
.
type
===
type
;
};
}
/**
* Returns a function to use in pseudos for buttons
* @param {String} type
*/
function
createButtonPseudo
(
type
)
{
return
function
(
elem
)
{
var
name
=
elem
.
nodeName
.
toLowerCase
();
return
(
name
===
"input"
||
name
===
"button"
)
&&
elem
.
type
===
type
;
};
}
/**
* Returns a function to use in pseudos for positionals
* @param {Function} fn
*/
function
createPositionalPseudo
(
fn
)
{
return
markFunction
(
function
(
argument
)
{
argument
=
+
argument
;
return
markFunction
(
function
(
seed
,
matches
)
{
var
j
,
matchIndexes
=
fn
(
[],
seed
.
length
,
argument
),
i
=
matchIndexes
.
length
;
// Match elements found at the specified indexes
while
(
i
--
)
{
if
(
seed
[
(
j
=
matchIndexes
[
i
])
]
)
{
seed
[
j
]
=
!
(
matches
[
j
]
=
seed
[
j
]);
}
}
});
});
}
/**
* Checks a node for validity as a Sizzle context
* @param {Element|Object=} context
* @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
*/
function
testContext
(
context
)
{
return
context
&&
typeof
context
.
getElementsByTagName
!==
"undefined"
&&
context
;
}
// Expose support vars for convenience
support
=
Sizzle
.
support
=
{};
/**
* Detects XML nodes
* @param {Element|Object} elem An element or a document
* @returns {Boolean} True iff elem is a non-HTML XML node
*/
isXML
=
Sizzle
.
isXML
=
function
(
elem
)
{
// documentElement is verified for cases where it doesn't yet exist
// (such as loading iframes in IE - #4833)
var
documentElement
=
elem
&&
(
elem
.
ownerDocument
||
elem
).
documentElement
;
return
documentElement
?
documentElement
.
nodeName
!==
"HTML"
:
false
;
};
/**
* Sets document-related variables once based on the current document
* @param {Element|Object} [doc] An element or document object to use to set the document
* @returns {Object} Returns the current document
*/
setDocument
=
Sizzle
.
setDocument
=
function
(
node
)
{
var
hasCompare
,
parent
,
doc
=
node
?
node
.
ownerDocument
||
node
:
preferredDoc
;
// Return early if doc is invalid or already selected
if
(
doc
===
document
||
doc
.
nodeType
!==
9
||
!
doc
.
documentElement
)
{
return
document
;
}
// Update global variables
document
=
doc
;
docElem
=
document
.
documentElement
;
documentIsHTML
=
!
isXML
(
document
);
// Support: IE 9-11, Edge
// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
if
(
(
parent
=
document
.
defaultView
)
&&
parent
.
top
!==
parent
)
{
// Support: IE 11
if
(
parent
.
addEventListener
)
{
parent
.
addEventListener
(
"unload"
,
unloadHandler
,
false
);
// Support: IE 9 - 10 only
}
else
if
(
parent
.
attachEvent
)
{
parent
.
attachEvent
(
"onunload"
,
unloadHandler
);
}
}
/* Attributes
---------------------------------------------------------------------- */
// Support: IE<8
// Verify that getAttribute really returns attributes and not properties
// (excepting IE8 booleans)
support
.
attributes
=
assert
(
function
(
div
)
{
div
.
className
=
"i"
;
return
!
div
.
getAttribute
(
"className"
);
});
/* getElement(s)By*
---------------------------------------------------------------------- */
// Check if getElementsByTagName("*") returns only elements
support
.
getElementsByTagName
=
assert
(
function
(
div
)
{
div
.
appendChild
(
document
.
createComment
(
""
)
);
return
!
div
.
getElementsByTagName
(
"*"
).
length
;
});
// Support: IE<9
support
.
getElementsByClassName
=
rnative
.
test
(
document
.
getElementsByClassName
);
// Support: IE<10
// Check if getElementById returns elements by name
// The broken getElementById methods don't pick up programatically-set names,
// so use a roundabout getElementsByName test
support
.
getById
=
assert
(
function
(
div
)
{
docElem
.
appendChild
(
div
).
id
=
expando
;
return
!
document
.
getElementsByName
||
!
document
.
getElementsByName
(
expando
).
length
;
});
// ID find and filter
if
(
support
.
getById
)
{
Expr
.
find
[
"ID"
]
=
function
(
id
,
context
)
{
if
(
typeof
context
.
getElementById
!==
"undefined"
&&
documentIsHTML
)
{
var
m
=
context
.
getElementById
(
id
);
return
m
?
[
m
]
:
[];
}
};
Expr
.
filter
[
"ID"
]
=
function
(
id
)
{
var
attrId
=
id
.
replace
(
runescape
,
funescape
);
return
function
(
elem
)
{
return
elem
.
getAttribute
(
"id"
)
===
attrId
;
};
};
}
else
{
// Support: IE6/7
// getElementById is not reliable as a find shortcut
delete
Expr
.
find
[
"ID"
];
Expr
.
filter
[
"ID"
]
=
function
(
id
)
{
var
attrId
=
id
.
replace
(
runescape
,
funescape
);
return
function
(
elem
)
{
var
node
=
typeof
elem
.
getAttributeNode
!==
"undefined"
&&
elem
.
getAttributeNode
(
"id"
);
return
node
&&
node
.
value
===
attrId
;
};
};
}
// Tag
Expr
.
find
[
"TAG"
]
=
support
.
getElementsByTagName
?
function
(
tag
,
context
)
{
if
(
typeof
context
.
getElementsByTagName
!==
"undefined"
)
{
return
context
.
getElementsByTagName
(
tag
);
// DocumentFragment nodes don't have gEBTN
}
else
if
(
support
.
qsa
)
{
return
context
.
querySelectorAll
(
tag
);
}
}
:
function
(
tag
,
context
)
{
var
elem
,
tmp
=
[],
i
=
0
,
// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
results
=
context
.
getElementsByTagName
(
tag
);
// Filter out possible comments
if
(
tag
===
"*"
)
{
while
(
(
elem
=
results
[
i
++
])
)
{
if
(
elem
.
nodeType
===
1
)
{
tmp
.
push
(
elem
);
}
}
return
tmp
;
}
return
results
;
};
// Class
Expr
.
find
[
"CLASS"
]
=
support
.
getElementsByClassName
&&
function
(
className
,
context
)
{
if
(
typeof
context
.
getElementsByClassName
!==
"undefined"
&&
documentIsHTML
)
{
return
context
.
getElementsByClassName
(
className
);
}
};
/* QSA/matchesSelector
---------------------------------------------------------------------- */
// QSA and matchesSelector support
// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
rbuggyMatches
=
[];
// qSa(:focus) reports false when true (Chrome 21)
// We allow this because of a bug in IE8/9 that throws an error
// whenever `document.activeElement` is accessed on an iframe
// So, we allow :focus to pass through QSA all the time to avoid the IE error
// See http://bugs.jquery.com/ticket/13378
rbuggyQSA
=
[];
if
(
(
support
.
qsa
=
rnative
.
test
(
document
.
querySelectorAll
))
)
{
// Build QSA regex
// Regex strategy adopted from Diego Perini
assert
(
function
(
div
)
{
// Select is set to empty string on purpose
// This is to test IE's treatment of not explicitly
// setting a boolean content attribute,
// since its presence should be enough
// http://bugs.jquery.com/ticket/12359
docElem
.
appendChild
(
div
).
innerHTML
=
"<a id='"
+
expando
+
"'></a>"
+
"<select id='"
+
expando
+
"-
\
r
\\
' msallowcapture=''>"
+
"<option selected=''></option></select>"
;
// Support: IE8, Opera 11-12.16
// Nothing should be selected when empty strings follow ^= or $= or *=
// The test attribute must be unknown in Opera but "safe" for WinRT
// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
if
(
div
.
querySelectorAll
(
"[msallowcapture^='']"
).
length
)
{
rbuggyQSA
.
push
(
"[*^$]="
+
whitespace
+
"*(?:''|
\"\"
)"
);
}
// Support: IE8
// Boolean attributes and "value" are not treated correctly
if
(
!
div
.
querySelectorAll
(
"[selected]"
).
length
)
{
rbuggyQSA
.
push
(
"
\\
["
+
whitespace
+
"*(?:value|"
+
booleans
+
")"
);
}
// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
if
(
!
div
.
querySelectorAll
(
"[id~="
+
expando
+
"-]"
).
length
)
{
rbuggyQSA
.
push
(
"~="
);
}
// Webkit/Opera - :checked should return selected option elements
// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
// IE8 throws error here and will not see later tests
if
(
!
div
.
querySelectorAll
(
":checked"
).
length
)
{
rbuggyQSA
.
push
(
":checked"
);
}
// Support: Safari 8+, iOS 8+
// https://bugs.webkit.org/show_bug.cgi?id=136851
// In-page `selector#id sibing-combinator selector` fails
if
(
!
div
.
querySelectorAll
(
"a#"
+
expando
+
"+*"
).
length
)
{
rbuggyQSA
.
push
(
".#.+[+~]"
);
}
});
assert
(
function
(
div
)
{
// Support: Windows 8 Native Apps
// The type and name attributes are restricted during .innerHTML assignment
var
input
=
document
.
createElement
(
"input"
);
input
.
setAttribute
(
"type"
,
"hidden"
);
div
.
appendChild
(
input
).
setAttribute
(
"name"
,
"D"
);
// Support: IE8
// Enforce case-sensitivity of name attribute
if
(
div
.
querySelectorAll
(
"[name=d]"
).
length
)
{
rbuggyQSA
.
push
(
"name"
+
whitespace
+
"*[*^$|!~]?="
);
}
// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
// IE8 throws error here and will not see later tests
if
(
!
div
.
querySelectorAll
(
":enabled"
).
length
)
{
rbuggyQSA
.
push
(
":enabled"
,
":disabled"
);
}
// Opera 10-11 does not throw on post-comma invalid pseudos
div
.
querySelectorAll
(
"*,:x"
);
rbuggyQSA
.
push
(
",.*:"
);
});
}
if
(
(
support
.
matchesSelector
=
rnative
.
test
(
(
matches
=
docElem
.
matches
||
docElem
.
webkitMatchesSelector
||
docElem
.
mozMatchesSelector
||
docElem
.
oMatchesSelector
||
docElem
.
msMatchesSelector
)
))
)
{
assert
(
function
(
div
)
{
// Check to see if it's possible to do matchesSelector
// on a disconnected node (IE 9)
support
.
disconnectedMatch
=
matches
.
call
(
div
,
"div"
);
// This should fail with an exception
// Gecko does not error, returns false instead
matches
.
call
(
div
,
"[s!='']:x"
);
rbuggyMatches
.
push
(
"!="
,
pseudos
);
});
}
rbuggyQSA
=
rbuggyQSA
.
length
&&
new
RegExp
(
rbuggyQSA
.
join
(
"|"
)
);
rbuggyMatches
=
rbuggyMatches
.
length
&&
new
RegExp
(
rbuggyMatches
.
join
(
"|"
)
);
/* Contains
---------------------------------------------------------------------- */
hasCompare
=
rnative
.
test
(
docElem
.
compareDocumentPosition
);
// Element contains another
// Purposefully self-exclusive
// As in, an element does not contain itself
contains
=
hasCompare
||
rnative
.
test
(
docElem
.
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
?
adown
.
contains
(
bup
)
:
a
.
compareDocumentPosition
&&
a
.
compareDocumentPosition
(
bup
)
&
16
));
}
:
function
(
a
,
b
)
{
if
(
b
)
{
while
(
(
b
=
b
.
parentNode
)
)
{
if
(
b
===
a
)
{
return
true
;
}
}
}
return
false
;
};
/* Sorting
---------------------------------------------------------------------- */
// Document order sorting
sortOrder
=
hasCompare
?
function
(
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
||
(
!
support
.
sortDetached
&&
b
.
compareDocumentPosition
(
a
)
===
compare
)
)
{
// Choose the first element that is related to our preferred document
if
(
a
===
document
||
a
.
ownerDocument
===
preferredDoc
&&
contains
(
preferredDoc
,
a
)
)
{
return
-
1
;
}
if
(
b
===
document
||
b
.
ownerDocument
===
preferredDoc
&&
contains
(
preferredDoc
,
b
)
)
{
return
1
;
}
// Maintain original order
return
sortInput
?
(
indexOf
(
sortInput
,
a
)
-
indexOf
(
sortInput
,
b
)
)
:
0
;
}
return
compare
&
4
?
-
1
:
1
;
}
:
function
(
a
,
b
)
{
// Exit early if the nodes are identical
if
(
a
===
b
)
{
hasDuplicate
=
true
;
return
0
;
}
var
cur
,
i
=
0
,
aup
=
a
.
parentNode
,
bup
=
b
.
parentNode
,
ap
=
[
a
],
bp
=
[
b
];
// Parentless nodes are either documents or disconnected
if
(
!
aup
||
!
bup
)
{
return
a
===
document
?
-
1
:
b
===
document
?
1
:
aup
?
-
1
:
bup
?
1
:
sortInput
?
(
indexOf
(
sortInput
,
a
)
-
indexOf
(
sortInput
,
b
)
)
:
0
;
// If the nodes are siblings, we can do a quick check
}
else
if
(
aup
===
bup
)
{
return
siblingCheck
(
a
,
b
);
}
// Otherwise we need full lists of their ancestors for comparison
cur
=
a
;
while
(
(
cur
=
cur
.
parentNode
)
)
{
ap
.
unshift
(
cur
);
}
cur
=
b
;
while
(
(
cur
=
cur
.
parentNode
)
)
{
bp
.
unshift
(
cur
);
}
// Walk down the tree looking for a discrepancy
while
(
ap
[
i
]
===
bp
[
i
]
)
{
i
++
;
}
return
i
?
// Do a sibling check if the nodes have a common ancestor
siblingCheck
(
ap
[
i
],
bp
[
i
]
)
:
// Otherwise nodes in our document sort first
ap
[
i
]
===
preferredDoc
?
-
1
:
bp
[
i
]
===
preferredDoc
?
1
:
0
;
};
return
document
;
};
Sizzle
.
matches
=
function
(
expr
,
elements
)
{
return
Sizzle
(
expr
,
null
,
null
,
elements
);
};
Sizzle
.
matchesSelector
=
function
(
elem
,
expr
)
{
// Set document vars if needed
if
(
(
elem
.
ownerDocument
||
elem
)
!==
document
)
{
setDocument
(
elem
);
}
// Make sure that attribute selectors are quoted
expr
=
expr
.
replace
(
rattributeQuotes
,
"='$1']"
);
if
(
support
.
matchesSelector
&&
documentIsHTML
&&
!
compilerCache
[
expr
+
" "
]
&&
(
!
rbuggyMatches
||
!
rbuggyMatches
.
test
(
expr
)
)
&&
(
!
rbuggyQSA
||
!
rbuggyQSA
.
test
(
expr
)
)
)
{
try
{
var
ret
=
matches
.
call
(
elem
,
expr
);
// IE 9's matchesSelector returns false on disconnected nodes
if
(
ret
||
support
.
disconnectedMatch
||
// As well, disconnected nodes are said to be in a document
// fragment in IE 9
elem
.
document
&&
elem
.
document
.
nodeType
!==
11
)
{
return
ret
;
}
}
catch
(
e
)
{}
}
return
Sizzle
(
expr
,
document
,
null
,
[
elem
]
).
length
>
0
;
};
Sizzle
.
contains
=
function
(
context
,
elem
)
{
// Set document vars if needed
if
(
(
context
.
ownerDocument
||
context
)
!==
document
)
{
setDocument
(
context
);
}
return
contains
(
context
,
elem
);
};
Sizzle
.
attr
=
function
(
elem
,
name
)
{
// Set document vars if needed
if
(
(
elem
.
ownerDocument
||
elem
)
!==
document
)
{
setDocument
(
elem
);
}
var
fn
=
Expr
.
attrHandle
[
name
.
toLowerCase
()
],
// Don't get fooled by Object.prototype properties (jQuery #13807)
val
=
fn
&&
hasOwn
.
call
(
Expr
.
attrHandle
,
name
.
toLowerCase
()
)
?
fn
(
elem
,
name
,
!
documentIsHTML
)
:
undefined
;
return
val
!==
undefined
?
val
:
support
.
attributes
||
!
documentIsHTML
?
elem
.
getAttribute
(
name
)
:
(
val
=
elem
.
getAttributeNode
(
name
))
&&
val
.
specified
?
val
.
value
:
null
;
};
Sizzle
.
error
=
function
(
msg
)
{
throw
new
Error
(
"Syntax error, unrecognized expression: "
+
msg
);
};
/**
* Document sorting and removing duplicates
* @param {ArrayLike} results
*/
Sizzle
.
uniqueSort
=
function
(
results
)
{
var
elem
,
duplicates
=
[],
j
=
0
,
i
=
0
;
// Unless we *know* we can detect duplicates, assume their presence
hasDuplicate
=
!
support
.
detectDuplicates
;
sortInput
=
!
support
.
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
;
};
/**
* Utility function for retrieving the text value of an array of DOM nodes
* @param {Array|Element} elem
*/
getText
=
Sizzle
.
getText
=
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
+=
getText
(
node
);
}
}
else
if
(
nodeType
===
1
||
nodeType
===
9
||
nodeType
===
11
)
{
// Use textContent for elements
// innerText usage removed for consistency of new lines (jQuery #11153)
if
(
typeof
elem
.
textContent
===
"string"
)
{
return
elem
.
textContent
;
}
else
{
// Traverse its children
for
(
elem
=
elem
.
firstChild
;
elem
;
elem
=
elem
.
nextSibling
)
{
ret
+=
getText
(
elem
);
}
}
}
else
if
(
nodeType
===
3
||
nodeType
===
4
)
{
return
elem
.
nodeValue
;
}
// Do not include comment or processing instruction nodes
return
ret
;
};
Expr
=
Sizzle
.
selectors
=
{
// Can be adjusted by the user
cacheLength
:
50
,
createPseudo
:
markFunction
,
match
:
matchExpr
,
attrHandle
:
{},
find
:
{},
relative
:
{
">"
:
{
dir
:
"parentNode"
,
first
:
true
},
" "
:
{
dir
:
"parentNode"
},
"+"
:
{
dir
:
"previousSibling"
,
first
:
true
},
"~"
:
{
dir
:
"previousSibling"
}
},
preFilter
:
{
"ATTR"
:
function
(
match
)
{
match
[
1
]
=
match
[
1
].
replace
(
runescape
,
funescape
);
// Move the given value to match[3] whether quoted or unquoted
match
[
3
]
=
(
match
[
3
]
||
match
[
4
]
||
match
[
5
]
||
""
).
replace
(
runescape
,
funescape
);
if
(
match
[
2
]
===
"~="
)
{
match
[
3
]
=
" "
+
match
[
3
]
+
" "
;
}
return
match
.
slice
(
0
,
4
);
},
"CHILD"
:
function
(
match
)
{
/* matches from matchExpr["CHILD"]
1 type (only|nth|...)
2 what (child|of-type)
3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
4 xn-component of xn+y argument ([+-]?\d*n|)
5 sign of xn-component
6 x of xn-component
7 sign of y-component
8 y of y-component
*/
match
[
1
]
=
match
[
1
].
toLowerCase
();
if
(
match
[
1
].
slice
(
0
,
3
)
===
"nth"
)
{
// nth-* requires argument
if
(
!
match
[
3
]
)
{
Sizzle
.
error
(
match
[
0
]
);
}
// numeric x and y parameters for Expr.filter.CHILD
// remember that false/true cast respectively to 0/1
match
[
4
]
=
+
(
match
[
4
]
?
match
[
5
]
+
(
match
[
6
]
||
1
)
:
2
*
(
match
[
3
]
===
"even"
||
match
[
3
]
===
"odd"
)
);
match
[
5
]
=
+
(
(
match
[
7
]
+
match
[
8
]
)
||
match
[
3
]
===
"odd"
);
// other types prohibit arguments
}
else
if
(
match
[
3
]
)
{
Sizzle
.
error
(
match
[
0
]
);
}
return
match
;
},
"PSEUDO"
:
function
(
match
)
{
var
excess
,
unquoted
=
!
match
[
6
]
&&
match
[
2
];
if
(
matchExpr
[
"CHILD"
].
test
(
match
[
0
]
)
)
{
return
null
;
}
// Accept quoted arguments as-is
if
(
match
[
3
]
)
{
match
[
2
]
=
match
[
4
]
||
match
[
5
]
||
""
;
// Strip excess characters from unquoted arguments
}
else
if
(
unquoted
&&
rpseudo
.
test
(
unquoted
)
&&
// Get excess from tokenize (recursively)
(
excess
=
tokenize
(
unquoted
,
true
))
&&
// advance to the next closing parenthesis
(
excess
=
unquoted
.
indexOf
(
")"
,
unquoted
.
length
-
excess
)
-
unquoted
.
length
)
)
{
// excess is a negative index
match
[
0
]
=
match
[
0
].
slice
(
0
,
excess
);
match
[
2
]
=
unquoted
.
slice
(
0
,
excess
);
}
// Return only captures needed by the pseudo filter method (type and argument)
return
match
.
slice
(
0
,
3
);
}
},
filter
:
{
"TAG"
:
function
(
nodeNameSelector
)
{
var
nodeName
=
nodeNameSelector
.
replace
(
runescape
,
funescape
).
toLowerCase
();
return
nodeNameSelector
===
"*"
?
function
()
{
return
true
;
}
:
function
(
elem
)
{
return
elem
.
nodeName
&&
elem
.
nodeName
.
toLowerCase
()
===
nodeName
;
};
},
"CLASS"
:
function
(
className
)
{
var
pattern
=
classCache
[
className
+
" "
];
return
pattern
||
(
pattern
=
new
RegExp
(
"(^|"
+
whitespace
+
")"
+
className
+
"("
+
whitespace
+
"|$)"
))
&&
classCache
(
className
,
function
(
elem
)
{
return
pattern
.
test
(
typeof
elem
.
className
===
"string"
&&
elem
.
className
||
typeof
elem
.
getAttribute
!==
"undefined"
&&
elem
.
getAttribute
(
"class"
)
||
""
);
});
},
"ATTR"
:
function
(
name
,
operator
,
check
)
{
return
function
(
elem
)
{
var
result
=
Sizzle
.
attr
(
elem
,
name
);
if
(
result
==
null
)
{
return
operator
===
"!="
;
}
if
(
!
operator
)
{
return
true
;
}
result
+=
""
;
return
operator
===
"="
?
result
===
check
:
operator
===
"!="
?
result
!==
check
:
operator
===
"^="
?
check
&&
result
.
indexOf
(
check
)
===
0
:
operator
===
"*="
?
check
&&
result
.
indexOf
(
check
)
>
-
1
:
operator
===
"$="
?
check
&&
result
.
slice
(
-
check
.
length
)
===
check
:
operator
===
"~="
?
(
" "
+
result
.
replace
(
rwhitespace
,
" "
)
+
" "
).
indexOf
(
check
)
>
-
1
:
operator
===
"|="
?
result
===
check
||
result
.
slice
(
0
,
check
.
length
+
1
)
===
check
+
"-"
:
false
;
};
},
"CHILD"
:
function
(
type
,
what
,
argument
,
first
,
last
)
{
var
simple
=
type
.
slice
(
0
,
3
)
!==
"nth"
,
forward
=
type
.
slice
(
-
4
)
!==
"last"
,
ofType
=
what
===
"of-type"
;
return
first
===
1
&&
last
===
0
?
// Shortcut for :nth-*(n)
function
(
elem
)
{
return
!!
elem
.
parentNode
;
}
:
function
(
elem
,
context
,
xml
)
{
var
cache
,
uniqueCache
,
outerCache
,
node
,
nodeIndex
,
start
,
dir
=
simple
!==
forward
?
"nextSibling"
:
"previousSibling"
,
parent
=
elem
.
parentNode
,
name
=
ofType
&&
elem
.
nodeName
.
toLowerCase
(),
useCache
=
!
xml
&&
!
ofType
,
diff
=
false
;
if
(
parent
)
{
// :(first|last|only)-(child|of-type)
if
(
simple
)
{
while
(
dir
)
{
node
=
elem
;
while
(
(
node
=
node
[
dir
])
)
{
if
(
ofType
?
node
.
nodeName
.
toLowerCase
()
===
name
:
node
.
nodeType
===
1
)
{
return
false
;
}
}
// Reverse direction for :only-* (if we haven't yet done so)
start
=
dir
=
type
===
"only"
&&
!
start
&&
"nextSibling"
;
}
return
true
;
}
start
=
[
forward
?
parent
.
firstChild
:
parent
.
lastChild
];
// non-xml :nth-child(...) stores cache data on `parent`
if
(
forward
&&
useCache
)
{
// Seek `elem` from a previously-cached index
// ...in a gzip-friendly way
node
=
parent
;
outerCache
=
node
[
expando
]
||
(
node
[
expando
]
=
{});
// Support: IE <9 only
// Defend against cloned attroperties (jQuery gh-1709)
uniqueCache
=
outerCache
[
node
.
uniqueID
]
||
(
outerCache
[
node
.
uniqueID
]
=
{});
cache
=
uniqueCache
[
type
]
||
[];
nodeIndex
=
cache
[
0
]
===
dirruns
&&
cache
[
1
];
diff
=
nodeIndex
&&
cache
[
2
];
node
=
nodeIndex
&&
parent
.
childNodes
[
nodeIndex
];
while
(
(
node
=
++
nodeIndex
&&
node
&&
node
[
dir
]
||
// Fallback to seeking `elem` from the start
(
diff
=
nodeIndex
=
0
)
||
start
.
pop
())
)
{
// When found, cache indexes on `parent` and break
if
(
node
.
nodeType
===
1
&&
++
diff
&&
node
===
elem
)
{
uniqueCache
[
type
]
=
[
dirruns
,
nodeIndex
,
diff
];
break
;
}
}
}
else
{
// Use previously-cached element index if available
if
(
useCache
)
{
// ...in a gzip-friendly way
node
=
elem
;
outerCache
=
node
[
expando
]
||
(
node
[
expando
]
=
{});
// Support: IE <9 only
// Defend against cloned attroperties (jQuery gh-1709)
uniqueCache
=
outerCache
[
node
.
uniqueID
]
||
(
outerCache
[
node
.
uniqueID
]
=
{});
cache
=
uniqueCache
[
type
]
||
[];
nodeIndex
=
cache
[
0
]
===
dirruns
&&
cache
[
1
];
diff
=
nodeIndex
;
}
// xml :nth-child(...)
// or :nth-last-child(...) or :nth(-last)?-of-type(...)
if
(
diff
===
false
)
{
// Use the same loop as above to seek `elem` from the start
while
(
(
node
=
++
nodeIndex
&&
node
&&
node
[
dir
]
||
(
diff
=
nodeIndex
=
0
)
||
start
.
pop
())
)
{
if
(
(
ofType
?
node
.
nodeName
.
toLowerCase
()
===
name
:
node
.
nodeType
===
1
)
&&
++
diff
)
{
// Cache the index of each encountered element
if
(
useCache
)
{
outerCache
=
node
[
expando
]
||
(
node
[
expando
]
=
{});
// Support: IE <9 only
// Defend against cloned attroperties (jQuery gh-1709)
uniqueCache
=
outerCache
[
node
.
uniqueID
]
||
(
outerCache
[
node
.
uniqueID
]
=
{});
uniqueCache
[
type
]
=
[
dirruns
,
diff
];
}
if
(
node
===
elem
)
{
break
;
}
}
}
}
}
// Incorporate the offset, then check against cycle size
diff
-=
last
;
return
diff
===
first
||
(
diff
%
first
===
0
&&
diff
/
first
>=
0
);
}
};
},
"PSEUDO"
:
function
(
pseudo
,
argument
)
{
// pseudo-class names are case-insensitive
// http://www.w3.org/TR/selectors/#pseudo-classes
// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
// Remember that setFilters inherits from pseudos
var
args
,
fn
=
Expr
.
pseudos
[
pseudo
]
||
Expr
.
setFilters
[
pseudo
.
toLowerCase
()
]
||
Sizzle
.
error
(
"unsupported pseudo: "
+
pseudo
);
// The user may use createPseudo to indicate that
// arguments are needed to create the filter function
// just as Sizzle does
if
(
fn
[
expando
]
)
{
return
fn
(
argument
);
}
// But maintain support for old signatures
if
(
fn
.
length
>
1
)
{
args
=
[
pseudo
,
pseudo
,
""
,
argument
];
return
Expr
.
setFilters
.
hasOwnProperty
(
pseudo
.
toLowerCase
()
)
?
markFunction
(
function
(
seed
,
matches
)
{
var
idx
,
matched
=
fn
(
seed
,
argument
),
i
=
matched
.
length
;
while
(
i
--
)
{
idx
=
indexOf
(
seed
,
matched
[
i
]
);
seed
[
idx
]
=
!
(
matches
[
idx
]
=
matched
[
i
]
);
}
})
:
function
(
elem
)
{
return
fn
(
elem
,
0
,
args
);
};
}
return
fn
;
}
},
pseudos
:
{
// Potentially complex pseudos
"not"
:
markFunction
(
function
(
selector
)
{
// Trim the selector passed to compile
// to avoid treating leading and trailing
// spaces as combinators
var
input
=
[],
results
=
[],
matcher
=
compile
(
selector
.
replace
(
rtrim
,
"$1"
)
);
return
matcher
[
expando
]
?
markFunction
(
function
(
seed
,
matches
,
context
,
xml
)
{
var
elem
,
unmatched
=
matcher
(
seed
,
null
,
xml
,
[]
),
i
=
seed
.
length
;
// Match elements unmatched by `matcher`
while
(
i
--
)
{
if
(
(
elem
=
unmatched
[
i
])
)
{
seed
[
i
]
=
!
(
matches
[
i
]
=
elem
);
}
}
})
:
function
(
elem
,
context
,
xml
)
{
input
[
0
]
=
elem
;
matcher
(
input
,
null
,
xml
,
results
);
// Don't keep the element (issue #299)
input
[
0
]
=
null
;
return
!
results
.
pop
();
};
}),
"has"
:
markFunction
(
function
(
selector
)
{
return
function
(
elem
)
{
return
Sizzle
(
selector
,
elem
).
length
>
0
;
};
}),
"contains"
:
markFunction
(
function
(
text
)
{
text
=
text
.
replace
(
runescape
,
funescape
);
return
function
(
elem
)
{
return
(
elem
.
textContent
||
elem
.
innerText
||
getText
(
elem
)
).
indexOf
(
text
)
>
-
1
;
};
}),
// "Whether an element is represented by a :lang() selector
// is based solely on the element's language value
// being equal to the identifier C,
// or beginning with the identifier C immediately followed by "-".
// The matching of C against the element's language value is performed case-insensitively.
// The identifier C does not have to be a valid language name."
// http://www.w3.org/TR/selectors/#lang-pseudo
"lang"
:
markFunction
(
function
(
lang
)
{
// lang value must be a valid identifier
if
(
!
ridentifier
.
test
(
lang
||
""
)
)
{
Sizzle
.
error
(
"unsupported lang: "
+
lang
);
}
lang
=
lang
.
replace
(
runescape
,
funescape
).
toLowerCase
();
return
function
(
elem
)
{
var
elemLang
;
do
{
if
(
(
elemLang
=
documentIsHTML
?
elem
.
lang
:
elem
.
getAttribute
(
"xml:lang"
)
||
elem
.
getAttribute
(
"lang"
))
)
{
elemLang
=
elemLang
.
toLowerCase
();
return
elemLang
===
lang
||
elemLang
.
indexOf
(
lang
+
"-"
)
===
0
;
}
}
while
(
(
elem
=
elem
.
parentNode
)
&&
elem
.
nodeType
===
1
);
return
false
;
};
}),
// Miscellaneous
"target"
:
function
(
elem
)
{
var
hash
=
window
.
location
&&
window
.
location
.
hash
;
return
hash
&&
hash
.
slice
(
1
)
===
elem
.
id
;
},
"root"
:
function
(
elem
)
{
return
elem
===
docElem
;
},
"focus"
:
function
(
elem
)
{
return
elem
===
document
.
activeElement
&&
(
!
document
.
hasFocus
||
document
.
hasFocus
())
&&
!!
(
elem
.
type
||
elem
.
href
||
~
elem
.
tabIndex
);
},
// Boolean properties
"enabled"
:
function
(
elem
)
{
return
elem
.
disabled
===
false
;
},
"disabled"
:
function
(
elem
)
{
return
elem
.
disabled
===
true
;
},
"checked"
:
function
(
elem
)
{
// In CSS3, :checked should return both checked and selected elements
// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
var
nodeName
=
elem
.
nodeName
.
toLowerCase
();
return
(
nodeName
===
"input"
&&
!!
elem
.
checked
)
||
(
nodeName
===
"option"
&&
!!
elem
.
selected
);
},
"selected"
:
function
(
elem
)
{
// Accessing this property makes selected-by-default
// options in Safari work properly
if
(
elem
.
parentNode
)
{
elem
.
parentNode
.
selectedIndex
;
}
return
elem
.
selected
===
true
;
},
// Contents
"empty"
:
function
(
elem
)
{
// http://www.w3.org/TR/selectors/#empty-pseudo
// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
// but not by others (comment: 8; processing instruction: 7; etc.)
// nodeType < 6 works because attributes (2) do not appear as children
for
(
elem
=
elem
.
firstChild
;
elem
;
elem
=
elem
.
nextSibling
)
{
if
(
elem
.
nodeType
<
6
)
{
return
false
;
}
}
return
true
;
},
"parent"
:
function
(
elem
)
{
return
!
Expr
.
pseudos
[
"empty"
](
elem
);
},
// Element/input types
"header"
:
function
(
elem
)
{
return
rheader
.
test
(
elem
.
nodeName
);
},
"input"
:
function
(
elem
)
{
return
rinputs
.
test
(
elem
.
nodeName
);
},
"button"
:
function
(
elem
)
{
var
name
=
elem
.
nodeName
.
toLowerCase
();
return
name
===
"input"
&&
elem
.
type
===
"button"
||
name
===
"button"
;
},
"text"
:
function
(
elem
)
{
var
attr
;
return
elem
.
nodeName
.
toLowerCase
()
===
"input"
&&
elem
.
type
===
"text"
&&
// Support: IE<8
// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
(
(
attr
=
elem
.
getAttribute
(
"type"
))
==
null
||
attr
.
toLowerCase
()
===
"text"
);
},
// Position-in-collection
"first"
:
createPositionalPseudo
(
function
()
{
return
[
0
];
}),
"last"
:
createPositionalPseudo
(
function
(
matchIndexes
,
length
)
{
return
[
length
-
1
];
}),
"eq"
:
createPositionalPseudo
(
function
(
matchIndexes
,
length
,
argument
)
{
return
[
argument
<
0
?
argument
+
length
:
argument
];
}),
"even"
:
createPositionalPseudo
(
function
(
matchIndexes
,
length
)
{
var
i
=
0
;
for
(
;
i
<
length
;
i
+=
2
)
{
matchIndexes
.
push
(
i
);
}
return
matchIndexes
;
}),
"odd"
:
createPositionalPseudo
(
function
(
matchIndexes
,
length
)
{
var
i
=
1
;
for
(
;
i
<
length
;
i
+=
2
)
{
matchIndexes
.
push
(
i
);
}
return
matchIndexes
;
}),
"lt"
:
createPositionalPseudo
(
function
(
matchIndexes
,
length
,
argument
)
{
var
i
=
argument
<
0
?
argument
+
length
:
argument
;
for
(
;
--
i
>=
0
;
)
{
matchIndexes
.
push
(
i
);
}
return
matchIndexes
;
}),
"gt"
:
createPositionalPseudo
(
function
(
matchIndexes
,
length
,
argument
)
{
var
i
=
argument
<
0
?
argument
+
length
:
argument
;
for
(
;
++
i
<
length
;
)
{
matchIndexes
.
push
(
i
);
}
return
matchIndexes
;
})
}
};
Expr
.
pseudos
[
"nth"
]
=
Expr
.
pseudos
[
"eq"
];
// Add button/input type pseudos
for
(
i
in
{
radio
:
true
,
checkbox
:
true
,
file
:
true
,
password
:
true
,
image
:
true
}
)
{
Expr
.
pseudos
[
i
]
=
createInputPseudo
(
i
);
}
for
(
i
in
{
submit
:
true
,
reset
:
true
}
)
{
Expr
.
pseudos
[
i
]
=
createButtonPseudo
(
i
);
}
// Easy API for creating new setFilters
function
setFilters
()
{}
setFilters
.
prototype
=
Expr
.
filters
=
Expr
.
pseudos
;
Expr
.
setFilters
=
new
setFilters
();
tokenize
=
Sizzle
.
tokenize
=
function
(
selector
,
parseOnly
)
{
var
matched
,
match
,
tokens
,
type
,
soFar
,
groups
,
preFilters
,
cached
=
tokenCache
[
selector
+
" "
];
if
(
cached
)
{
return
parseOnly
?
0
:
cached
.
slice
(
0
);
}
soFar
=
selector
;
groups
=
[];
preFilters
=
Expr
.
preFilter
;
while
(
soFar
)
{
// Comma and first run
if
(
!
matched
||
(
match
=
rcomma
.
exec
(
soFar
))
)
{
if
(
match
)
{
// Don't consume trailing commas as valid
soFar
=
soFar
.
slice
(
match
[
0
].
length
)
||
soFar
;
}
groups
.
push
(
(
tokens
=
[])
);
}
matched
=
false
;
// Combinators
if
(
(
match
=
rcombinators
.
exec
(
soFar
))
)
{
matched
=
match
.
shift
();
tokens
.
push
({
value
:
matched
,
// Cast descendant combinators to space
type
:
match
[
0
].
replace
(
rtrim
,
" "
)
});
soFar
=
soFar
.
slice
(
matched
.
length
);
}
// Filters
for
(
type
in
Expr
.
filter
)
{
if
(
(
match
=
matchExpr
[
type
].
exec
(
soFar
))
&&
(
!
preFilters
[
type
]
||
(
match
=
preFilters
[
type
](
match
)))
)
{
matched
=
match
.
shift
();
tokens
.
push
({
value
:
matched
,
type
:
type
,
matches
:
match
});
soFar
=
soFar
.
slice
(
matched
.
length
);
}
}
if
(
!
matched
)
{
break
;
}
}
// Return the length of the invalid excess
// if we're just parsing
// Otherwise, throw an error or return tokens
return
parseOnly
?
soFar
.
length
:
soFar
?
Sizzle
.
error
(
selector
)
:
// Cache the tokens
tokenCache
(
selector
,
groups
).
slice
(
0
);
};
function
toSelector
(
tokens
)
{
var
i
=
0
,
len
=
tokens
.
length
,
selector
=
""
;
for
(
;
i
<
len
;
i
++
)
{
selector
+=
tokens
[
i
].
value
;
}
return
selector
;
}
function
addCombinator
(
matcher
,
combinator
,
base
)
{
var
dir
=
combinator
.
dir
,
checkNonElements
=
base
&&
dir
===
"parentNode"
,
doneName
=
done
++
;
return
combinator
.
first
?
// Check against closest ancestor/preceding element
function
(
elem
,
context
,
xml
)
{
while
(
(
elem
=
elem
[
dir
])
)
{
if
(
elem
.
nodeType
===
1
||
checkNonElements
)
{
return
matcher
(
elem
,
context
,
xml
);
}
}
}
:
// Check against all ancestor/preceding elements
function
(
elem
,
context
,
xml
)
{
var
oldCache
,
uniqueCache
,
outerCache
,
newCache
=
[
dirruns
,
doneName
];
// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
if
(
xml
)
{
while
(
(
elem
=
elem
[
dir
])
)
{
if
(
elem
.
nodeType
===
1
||
checkNonElements
)
{
if
(
matcher
(
elem
,
context
,
xml
)
)
{
return
true
;
}
}
}
}
else
{
while
(
(
elem
=
elem
[
dir
])
)
{
if
(
elem
.
nodeType
===
1
||
checkNonElements
)
{
outerCache
=
elem
[
expando
]
||
(
elem
[
expando
]
=
{});
// Support: IE <9 only
// Defend against cloned attroperties (jQuery gh-1709)
uniqueCache
=
outerCache
[
elem
.
uniqueID
]
||
(
outerCache
[
elem
.
uniqueID
]
=
{});
if
(
(
oldCache
=
uniqueCache
[
dir
])
&&
oldCache
[
0
]
===
dirruns
&&
oldCache
[
1
]
===
doneName
)
{
// Assign to newCache so results back-propagate to previous elements
return
(
newCache
[
2
]
=
oldCache
[
2
]);
}
else
{
// Reuse newcache so results back-propagate to previous elements
uniqueCache
[
dir
]
=
newCache
;
// A match means we're done; a fail means we have to keep checking
if
(
(
newCache
[
2
]
=
matcher
(
elem
,
context
,
xml
))
)
{
return
true
;
}
}
}
}
}
};
}
function
elementMatcher
(
matchers
)
{
return
matchers
.
length
>
1
?
function
(
elem
,
context
,
xml
)
{
var
i
=
matchers
.
length
;
while
(
i
--
)
{
if
(
!
matchers
[
i
](
elem
,
context
,
xml
)
)
{
return
false
;
}
}
return
true
;
}
:
matchers
[
0
];
}
function
multipleContexts
(
selector
,
contexts
,
results
)
{
var
i
=
0
,
len
=
contexts
.
length
;
for
(
;
i
<
len
;
i
++
)
{
Sizzle
(
selector
,
contexts
[
i
],
results
);
}
return
results
;
}
function
condense
(
unmatched
,
map
,
filter
,
context
,
xml
)
{
var
elem
,
newUnmatched
=
[],
i
=
0
,
len
=
unmatched
.
length
,
mapped
=
map
!=
null
;
for
(
;
i
<
len
;
i
++
)
{
if
(
(
elem
=
unmatched
[
i
])
)
{
if
(
!
filter
||
filter
(
elem
,
context
,
xml
)
)
{
newUnmatched
.
push
(
elem
);
if
(
mapped
)
{
map
.
push
(
i
);
}
}
}
}
return
newUnmatched
;
}
function
setMatcher
(
preFilter
,
selector
,
matcher
,
postFilter
,
postFinder
,
postSelector
)
{
if
(
postFilter
&&
!
postFilter
[
expando
]
)
{
postFilter
=
setMatcher
(
postFilter
);
}
if
(
postFinder
&&
!
postFinder
[
expando
]
)
{
postFinder
=
setMatcher
(
postFinder
,
postSelector
);
}
return
markFunction
(
function
(
seed
,
results
,
context
,
xml
)
{
var
temp
,
i
,
elem
,
preMap
=
[],
postMap
=
[],
preexisting
=
results
.
length
,
// Get initial elements from seed or context
elems
=
seed
||
multipleContexts
(
selector
||
"*"
,
context
.
nodeType
?
[
context
]
:
context
,
[]
),
// Prefilter to get matcher input, preserving a map for seed-results synchronization
matcherIn
=
preFilter
&&
(
seed
||
!
selector
)
?
condense
(
elems
,
preMap
,
preFilter
,
context
,
xml
)
:
elems
,
matcherOut
=
matcher
?
// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
postFinder
||
(
seed
?
preFilter
:
preexisting
||
postFilter
)
?
// ...intermediate processing is necessary
[]
:
// ...otherwise use results directly
results
:
matcherIn
;
// Find primary matches
if
(
matcher
)
{
matcher
(
matcherIn
,
matcherOut
,
context
,
xml
);
}
// Apply postFilter
if
(
postFilter
)
{
temp
=
condense
(
matcherOut
,
postMap
);
postFilter
(
temp
,
[],
context
,
xml
);
// Un-match failing elements by moving them back to matcherIn
i
=
temp
.
length
;
while
(
i
--
)
{
if
(
(
elem
=
temp
[
i
])
)
{
matcherOut
[
postMap
[
i
]
]
=
!
(
matcherIn
[
postMap
[
i
]
]
=
elem
);
}
}
}
if
(
seed
)
{
if
(
postFinder
||
preFilter
)
{
if
(
postFinder
)
{
// Get the final matcherOut by condensing this intermediate into postFinder contexts
temp
=
[];
i
=
matcherOut
.
length
;
while
(
i
--
)
{
if
(
(
elem
=
matcherOut
[
i
])
)
{
// Restore matcherIn since elem is not yet a final match
temp
.
push
(
(
matcherIn
[
i
]
=
elem
)
);
}
}
postFinder
(
null
,
(
matcherOut
=
[]),
temp
,
xml
);
}
// Move matched elements from seed to results to keep them synchronized
i
=
matcherOut
.
length
;
while
(
i
--
)
{
if
(
(
elem
=
matcherOut
[
i
])
&&
(
temp
=
postFinder
?
indexOf
(
seed
,
elem
)
:
preMap
[
i
])
>
-
1
)
{
seed
[
temp
]
=
!
(
results
[
temp
]
=
elem
);
}
}
}
// Add elements to results, through postFinder if defined
}
else
{
matcherOut
=
condense
(
matcherOut
===
results
?
matcherOut
.
splice
(
preexisting
,
matcherOut
.
length
)
:
matcherOut
);
if
(
postFinder
)
{
postFinder
(
null
,
results
,
matcherOut
,
xml
);
}
else
{
push
.
apply
(
results
,
matcherOut
);
}
}
});
}
function
matcherFromTokens
(
tokens
)
{
var
checkContext
,
matcher
,
j
,
len
=
tokens
.
length
,
leadingRelative
=
Expr
.
relative
[
tokens
[
0
].
type
],
implicitRelative
=
leadingRelative
||
Expr
.
relative
[
" "
],
i
=
leadingRelative
?
1
:
0
,
// The foundational matcher ensures that elements are reachable from top-level context(s)
matchContext
=
addCombinator
(
function
(
elem
)
{
return
elem
===
checkContext
;
},
implicitRelative
,
true
),
matchAnyContext
=
addCombinator
(
function
(
elem
)
{
return
indexOf
(
checkContext
,
elem
)
>
-
1
;
},
implicitRelative
,
true
),
matchers
=
[
function
(
elem
,
context
,
xml
)
{
var
ret
=
(
!
leadingRelative
&&
(
xml
||
context
!==
outermostContext
)
)
||
(
(
checkContext
=
context
).
nodeType
?
matchContext
(
elem
,
context
,
xml
)
:
matchAnyContext
(
elem
,
context
,
xml
)
);
// Avoid hanging onto element (issue #299)
checkContext
=
null
;
return
ret
;
}
];
for
(
;
i
<
len
;
i
++
)
{
if
(
(
matcher
=
Expr
.
relative
[
tokens
[
i
].
type
])
)
{
matchers
=
[
addCombinator
(
elementMatcher
(
matchers
),
matcher
)
];
}
else
{
matcher
=
Expr
.
filter
[
tokens
[
i
].
type
].
apply
(
null
,
tokens
[
i
].
matches
);
// Return special upon seeing a positional matcher
if
(
matcher
[
expando
]
)
{
// Find the next relative operator (if any) for proper handling
j
=
++
i
;
for
(
;
j
<
len
;
j
++
)
{
if
(
Expr
.
relative
[
tokens
[
j
].
type
]
)
{
break
;
}
}
return
setMatcher
(
i
>
1
&&
elementMatcher
(
matchers
),
i
>
1
&&
toSelector
(
// If the preceding token was a descendant combinator, insert an implicit any-element `*`
tokens
.
slice
(
0
,
i
-
1
).
concat
({
value
:
tokens
[
i
-
2
].
type
===
" "
?
"*"
:
""
})
).
replace
(
rtrim
,
"$1"
),
matcher
,
i
<
j
&&
matcherFromTokens
(
tokens
.
slice
(
i
,
j
)
),
j
<
len
&&
matcherFromTokens
(
(
tokens
=
tokens
.
slice
(
j
))
),
j
<
len
&&
toSelector
(
tokens
)
);
}
matchers
.
push
(
matcher
);
}
}
return
elementMatcher
(
matchers
);
}
function
matcherFromGroupMatchers
(
elementMatchers
,
setMatchers
)
{
var
bySet
=
setMatchers
.
length
>
0
,
byElement
=
elementMatchers
.
length
>
0
,
superMatcher
=
function
(
seed
,
context
,
xml
,
results
,
outermost
)
{
var
elem
,
j
,
matcher
,
matchedCount
=
0
,
i
=
"0"
,
unmatched
=
seed
&&
[],
setMatched
=
[],
contextBackup
=
outermostContext
,
// We must always have either seed elements or outermost context
elems
=
seed
||
byElement
&&
Expr
.
find
[
"TAG"
](
"*"
,
outermost
),
// Use integer dirruns iff this is the outermost matcher
dirrunsUnique
=
(
dirruns
+=
contextBackup
==
null
?
1
:
Math
.
random
()
||
0.1
),
len
=
elems
.
length
;
if
(
outermost
)
{
outermostContext
=
context
===
document
||
context
||
outermost
;
}
// Add elements passing elementMatchers directly to results
// Support: IE<9, Safari
// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
for
(
;
i
!==
len
&&
(
elem
=
elems
[
i
])
!=
null
;
i
++
)
{
if
(
byElement
&&
elem
)
{
j
=
0
;
if
(
!
context
&&
elem
.
ownerDocument
!==
document
)
{
setDocument
(
elem
);
xml
=
!
documentIsHTML
;
}
while
(
(
matcher
=
elementMatchers
[
j
++
])
)
{
if
(
matcher
(
elem
,
context
||
document
,
xml
)
)
{
results
.
push
(
elem
);
break
;
}
}
if
(
outermost
)
{
dirruns
=
dirrunsUnique
;
}
}
// Track unmatched elements for set filters
if
(
bySet
)
{
// They will have gone through all possible matchers
if
(
(
elem
=
!
matcher
&&
elem
)
)
{
matchedCount
--
;
}
// Lengthen the array for every element, matched or not
if
(
seed
)
{
unmatched
.
push
(
elem
);
}
}
}
// `i` is now the count of elements visited above, and adding it to `matchedCount`
// makes the latter nonnegative.
matchedCount
+=
i
;
// Apply set filters to unmatched elements
// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
// no element matchers and no seed.
// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
// case, which will result in a "00" `matchedCount` that differs from `i` but is also
// numerically zero.
if
(
bySet
&&
i
!==
matchedCount
)
{
j
=
0
;
while
(
(
matcher
=
setMatchers
[
j
++
])
)
{
matcher
(
unmatched
,
setMatched
,
context
,
xml
);
}
if
(
seed
)
{
// Reintegrate element matches to eliminate the need for sorting
if
(
matchedCount
>
0
)
{
while
(
i
--
)
{
if
(
!
(
unmatched
[
i
]
||
setMatched
[
i
])
)
{
setMatched
[
i
]
=
pop
.
call
(
results
);
}
}
}
// Discard index placeholder values to get only actual matches
setMatched
=
condense
(
setMatched
);
}
// Add matches to results
push
.
apply
(
results
,
setMatched
);
// Seedless set matches succeeding multiple successful matchers stipulate sorting
if
(
outermost
&&
!
seed
&&
setMatched
.
length
>
0
&&
(
matchedCount
+
setMatchers
.
length
)
>
1
)
{
Sizzle
.
uniqueSort
(
results
);
}
}
// Override manipulation of globals by nested matchers
if
(
outermost
)
{
dirruns
=
dirrunsUnique
;
outermostContext
=
contextBackup
;
}
return
unmatched
;
};
return
bySet
?
markFunction
(
superMatcher
)
:
superMatcher
;
}
compile
=
Sizzle
.
compile
=
function
(
selector
,
match
/* Internal Use Only */
)
{
var
i
,
setMatchers
=
[],
elementMatchers
=
[],
cached
=
compilerCache
[
selector
+
" "
];
if
(
!
cached
)
{
// Generate a function of recursive functions that can be used to check each element
if
(
!
match
)
{
match
=
tokenize
(
selector
);
}
i
=
match
.
length
;
while
(
i
--
)
{
cached
=
matcherFromTokens
(
match
[
i
]
);
if
(
cached
[
expando
]
)
{
setMatchers
.
push
(
cached
);
}
else
{
elementMatchers
.
push
(
cached
);
}
}
// Cache the compiled function
cached
=
compilerCache
(
selector
,
matcherFromGroupMatchers
(
elementMatchers
,
setMatchers
)
);
// Save selector and tokenization
cached
.
selector
=
selector
;
}
return
cached
;
};
/**
* A low-level selection function that works with Sizzle's compiled
* selector functions
* @param {String|Function} selector A selector or a pre-compiled
* selector function built with Sizzle.compile
* @param {Element} context
* @param {Array} [results]
* @param {Array} [seed] A set of elements to match against
*/
select
=
Sizzle
.
select
=
function
(
selector
,
context
,
results
,
seed
)
{
var
i
,
tokens
,
token
,
type
,
find
,
compiled
=
typeof
selector
===
"function"
&&
selector
,
match
=
!
seed
&&
tokenize
(
(
selector
=
compiled
.
selector
||
selector
)
);
results
=
results
||
[];
// Try to minimize operations if there is only one selector in the list and no seed
// (the latter of which guarantees us context)
if
(
match
.
length
===
1
)
{
// Reduce context if the leading compound selector is an ID
tokens
=
match
[
0
]
=
match
[
0
].
slice
(
0
);
if
(
tokens
.
length
>
2
&&
(
token
=
tokens
[
0
]).
type
===
"ID"
&&
support
.
getById
&&
context
.
nodeType
===
9
&&
documentIsHTML
&&
Expr
.
relative
[
tokens
[
1
].
type
]
)
{
context
=
(
Expr
.
find
[
"ID"
](
token
.
matches
[
0
].
replace
(
runescape
,
funescape
),
context
)
||
[]
)[
0
];
if
(
!
context
)
{
return
results
;
// Precompiled matchers will still verify ancestry, so step up a level
}
else
if
(
compiled
)
{
context
=
context
.
parentNode
;
}
selector
=
selector
.
slice
(
tokens
.
shift
().
value
.
length
);
}
// Fetch a seed set for right-to-left matching
i
=
matchExpr
[
"needsContext"
].
test
(
selector
)
?
0
:
tokens
.
length
;
while
(
i
--
)
{
token
=
tokens
[
i
];
// Abort if we hit a combinator
if
(
Expr
.
relative
[
(
type
=
token
.
type
)
]
)
{
break
;
}
if
(
(
find
=
Expr
.
find
[
type
])
)
{
// Search, expanding context for leading sibling combinators
if
(
(
seed
=
find
(
token
.
matches
[
0
].
replace
(
runescape
,
funescape
),
rsibling
.
test
(
tokens
[
0
].
type
)
&&
testContext
(
context
.
parentNode
)
||
context
))
)
{
// If seed is empty or no tokens remain, we can return early
tokens
.
splice
(
i
,
1
);
selector
=
seed
.
length
&&
toSelector
(
tokens
);
if
(
!
selector
)
{
push
.
apply
(
results
,
seed
);
return
results
;
}
break
;
}
}
}
}
// Compile and execute a filtering function if one is not provided
// Provide `match` to avoid retokenization if we modified the selector above
(
compiled
||
compile
(
selector
,
match
)
)(
seed
,
context
,
!
documentIsHTML
,
results
,
!
context
||
rsibling
.
test
(
selector
)
&&
testContext
(
context
.
parentNode
)
||
context
);
return
results
;
};
// One-time assignments
// Sort stability
support
.
sortStable
=
expando
.
split
(
""
).
sort
(
sortOrder
).
join
(
""
)
===
expando
;
// Support: Chrome 14-35+
// Always assume duplicates if they aren't passed to the comparison function
support
.
detectDuplicates
=
!!
hasDuplicate
;
// Initialize against the default document
setDocument
();
// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
// Detached nodes confoundingly follow *each other*
support
.
sortDetached
=
assert
(
function
(
div1
)
{
// Should return 1, but returns 4 (following)
return
div1
.
compareDocumentPosition
(
document
.
createElement
(
"div"
)
)
&
1
;
});
// Support: IE<8
// Prevent attribute/property "interpolation"
// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
if
(
!
assert
(
function
(
div
)
{
div
.
innerHTML
=
"<a href='#'></a>"
;
return
div
.
firstChild
.
getAttribute
(
"href"
)
===
"#"
;
})
)
{
addHandle
(
"type|href|height|width"
,
function
(
elem
,
name
,
isXML
)
{
if
(
!
isXML
)
{
return
elem
.
getAttribute
(
name
,
name
.
toLowerCase
()
===
"type"
?
1
:
2
);
}
});
}
// Support: IE<9
// Use defaultValue in place of getAttribute("value")
if
(
!
support
.
attributes
||
!
assert
(
function
(
div
)
{
div
.
innerHTML
=
"<input/>"
;
div
.
firstChild
.
setAttribute
(
"value"
,
""
);
return
div
.
firstChild
.
getAttribute
(
"value"
)
===
""
;
})
)
{
addHandle
(
"value"
,
function
(
elem
,
name
,
isXML
)
{
if
(
!
isXML
&&
elem
.
nodeName
.
toLowerCase
()
===
"input"
)
{
return
elem
.
defaultValue
;
}
});
}
// Support: IE<9
// Use getAttributeNode to fetch booleans when getAttribute lies
if
(
!
assert
(
function
(
div
)
{
return
div
.
getAttribute
(
"disabled"
)
==
null
;
})
)
{
addHandle
(
booleans
,
function
(
elem
,
name
,
isXML
)
{
var
val
;
if
(
!
isXML
)
{
return
elem
[
name
]
===
true
?
name
.
toLowerCase
()
:
(
val
=
elem
.
getAttributeNode
(
name
))
&&
val
.
specified
?
val
.
value
:
null
;
}
});
}
// EXPOSE
if
(
typeof
define
===
"function"
&&
define
.
amd
)
{
define
(
function
()
{
return
Sizzle
;
});
// Sizzle requires that there be a global window in Common-JS like environments
}
else
if
(
typeof
module
!==
"undefined"
&&
module
.
exports
)
{
module
.
exports
=
Sizzle
;
}
else
{
window
.
Sizzle
=
Sizzle
;
}
// EXPOSE
})(
window
);
external/sizzle/dist/sizzle.min.js
0 → 100644
View file @
b910b2ab
/*! Sizzle v2.2.1 | (c) jQuery Foundation, Inc. | jquery.org/license */
!
function
(
a
){
var
b
,
c
,
d
,
e
,
f
,
g
,
h
,
i
,
j
,
k
,
l
,
m
,
n
,
o
,
p
,
q
,
r
,
s
,
t
,
u
=
"sizzle"
+
1
*
new
Date
,
v
=
a
.
document
,
w
=
0
,
x
=
0
,
y
=
ga
(),
z
=
ga
(),
A
=
ga
(),
B
=
function
(
a
,
b
){
return
a
===
b
&&
(
l
=!
0
),
0
},
C
=
1
<<
31
,
D
=
{}.
hasOwnProperty
,
E
=
[],
F
=
E
.
pop
,
G
=
E
.
push
,
H
=
E
.
push
,
I
=
E
.
slice
,
J
=
function
(
a
,
b
){
for
(
var
c
=
0
,
d
=
a
.
length
;
d
>
c
;
c
++
)
if
(
a
[
c
]
===
b
)
return
c
;
return
-
1
},
K
=
"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped"
,
L
=
"[
\\
x20
\\
t
\\
r
\
\n
\\
f]"
,
M
=
"(?:
\\\\
.|[
\\
w-]|[^
\\
x00-
\\
xa0])+"
,
N
=
"
\\
["
+
L
+
"*("
+
M
+
")(?:"
+
L
+
"*([*^$|!~]?=)"
+
L
+
"*(?:'((?:
\\\\
.|[^
\\\\
'])*)'|
\"
((?:
\\\\
.|[^
\\\\
\"
])*)
\"
|("
+
M
+
"))|)"
+
L
+
"*
\\
]"
,
O
=
":("
+
M
+
")(?:
\\
((('((?:
\\\\
.|[^
\\\\
'])*)'|
\"
((?:
\\\\
.|[^
\\\\
\"
])*)
\"
)|((?:
\\\\
.|[^
\\\\
()[
\\
]]|"
+
N
+
")*)|.*)
\\
)|)"
,
P
=
new
RegExp
(
L
+
"+"
,
"g"
),
Q
=
new
RegExp
(
"^"
+
L
+
"+|((?:^|[^
\\\\
])(?:
\\\\
.)*)"
+
L
+
"+$"
,
"g"
),
R
=
new
RegExp
(
"^"
+
L
+
"*,"
+
L
+
"*"
),
S
=
new
RegExp
(
"^"
+
L
+
"*([>+~]|"
+
L
+
")"
+
L
+
"*"
),
T
=
new
RegExp
(
"="
+
L
+
"*([^
\\
]'
\"
]*?)"
+
L
+
"*
\\
]"
,
"g"
),
U
=
new
RegExp
(
O
),
V
=
new
RegExp
(
"^"
+
M
+
"$"
),
W
=
{
ID
:
new
RegExp
(
"^#("
+
M
+
")"
),
CLASS
:
new
RegExp
(
"^
\\
.("
+
M
+
")"
),
TAG
:
new
RegExp
(
"^("
+
M
+
"|[*])"
),
ATTR
:
new
RegExp
(
"^"
+
N
),
PSEUDO
:
new
RegExp
(
"^"
+
O
),
CHILD
:
new
RegExp
(
"^:(only|first|last|nth|nth-last)-(child|of-type)(?:
\\
("
+
L
+
"*(even|odd|(([+-]|)(
\\
d*)n|)"
+
L
+
"*(?:([+-]|)"
+
L
+
"*(
\\
d+)|))"
+
L
+
"*
\\
)|)"
,
"i"
),
bool
:
new
RegExp
(
"^(?:"
+
K
+
")$"
,
"i"
),
needsContext
:
new
RegExp
(
"^"
+
L
+
"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:
\\
("
+
L
+
"*((?:-
\\
d)?
\\
d*)"
+
L
+
"*
\\
)|)(?=[^-]|$)"
,
"i"
)},
X
=
/^
(?:
input|select|textarea|button
)
$/i
,
Y
=
/^h
\d
$/i
,
Z
=
/^
[^
{
]
+
\{\s
*
\[
native
\w
/
,
$
=
/^
(?:
#
([\w
-
]
+
)
|
(\w
+
)
|
\.([\w
-
]
+
))
$/
,
_
=
/
[
+~
]
/
,
aa
=
/'|
\\
/g
,
ba
=
new
RegExp
(
"
\\\\
([
\\
da-f]{1,6}"
+
L
+
"?|("
+
L
+
")|.)"
,
"ig"
),
ca
=
function
(
a
,
b
,
c
){
var
d
=
"0x"
+
b
-
65536
;
return
d
!==
d
||
c
?
b
:
0
>
d
?
String
.
fromCharCode
(
d
+
65536
):
String
.
fromCharCode
(
d
>>
10
|
55296
,
1023
&
d
|
56320
)},
da
=
function
(){
m
()};
try
{
H
.
apply
(
E
=
I
.
call
(
v
.
childNodes
),
v
.
childNodes
),
E
[
v
.
childNodes
.
length
].
nodeType
}
catch
(
ea
){
H
=
{
apply
:
E
.
length
?
function
(
a
,
b
){
G
.
apply
(
a
,
I
.
call
(
b
))}:
function
(
a
,
b
){
var
c
=
a
.
length
,
d
=
0
;
while
(
a
[
c
++
]
=
b
[
d
++
]);
a
.
length
=
c
-
1
}}}
function
fa
(
a
,
b
,
d
,
e
){
var
f
,
h
,
j
,
k
,
l
,
o
,
r
,
s
,
w
=
b
&&
b
.
ownerDocument
,
x
=
b
?
b
.
nodeType
:
9
;
if
(
d
=
d
||
[],
"string"
!=
typeof
a
||!
a
||
1
!==
x
&&
9
!==
x
&&
11
!==
x
)
return
d
;
if
(
!
e
&&
((
b
?
b
.
ownerDocument
||
b
:
v
)
!==
n
&&
m
(
b
),
b
=
b
||
n
,
p
)){
if
(
11
!==
x
&&
(
o
=
$
.
exec
(
a
)))
if
(
f
=
o
[
1
]){
if
(
9
===
x
){
if
(
!
(
j
=
b
.
getElementById
(
f
)))
return
d
;
if
(
j
.
id
===
f
)
return
d
.
push
(
j
),
d
}
else
if
(
w
&&
(
j
=
w
.
getElementById
(
f
))
&&
t
(
b
,
j
)
&&
j
.
id
===
f
)
return
d
.
push
(
j
),
d
}
else
{
if
(
o
[
2
])
return
H
.
apply
(
d
,
b
.
getElementsByTagName
(
a
)),
d
;
if
((
f
=
o
[
3
])
&&
c
.
getElementsByClassName
&&
b
.
getElementsByClassName
)
return
H
.
apply
(
d
,
b
.
getElementsByClassName
(
f
)),
d
}
if
(
c
.
qsa
&&!
A
[
a
+
" "
]
&&
(
!
q
||!
q
.
test
(
a
))){
if
(
1
!==
x
)
w
=
b
,
s
=
a
;
else
if
(
"object"
!==
b
.
nodeName
.
toLowerCase
()){(
k
=
b
.
getAttribute
(
"id"
))?
k
=
k
.
replace
(
aa
,
"
\\
$&"
):
b
.
setAttribute
(
"id"
,
k
=
u
),
r
=
g
(
a
),
h
=
r
.
length
,
l
=
V
.
test
(
k
)?
"#"
+
k
:
"[id='"
+
k
+
"']"
;
while
(
h
--
)
r
[
h
]
=
l
+
" "
+
qa
(
r
[
h
]);
s
=
r
.
join
(
","
),
w
=
_
.
test
(
a
)
&&
oa
(
b
.
parentNode
)
||
b
}
if
(
s
)
try
{
return
H
.
apply
(
d
,
w
.
querySelectorAll
(
s
)),
d
}
catch
(
y
){}
finally
{
k
===
u
&&
b
.
removeAttribute
(
"id"
)}}}
return
i
(
a
.
replace
(
Q
,
"$1"
),
b
,
d
,
e
)}
function
ga
(){
var
a
=
[];
function
b
(
c
,
e
){
return
a
.
push
(
c
+
" "
)
>
d
.
cacheLength
&&
delete
b
[
a
.
shift
()],
b
[
c
+
" "
]
=
e
}
return
b
}
function
ha
(
a
){
return
a
[
u
]
=!
0
,
a
}
function
ia
(
a
){
var
b
=
n
.
createElement
(
"div"
);
try
{
return
!!
a
(
b
)}
catch
(
c
){
return
!
1
}
finally
{
b
.
parentNode
&&
b
.
parentNode
.
removeChild
(
b
),
b
=
null
}}
function
ja
(
a
,
b
){
var
c
=
a
.
split
(
"|"
),
e
=
c
.
length
;
while
(
e
--
)
d
.
attrHandle
[
c
[
e
]]
=
b
}
function
ka
(
a
,
b
){
var
c
=
b
&&
a
,
d
=
c
&&
1
===
a
.
nodeType
&&
1
===
b
.
nodeType
&&
(
~
b
.
sourceIndex
||
C
)
-
(
~
a
.
sourceIndex
||
C
);
if
(
d
)
return
d
;
if
(
c
)
while
(
c
=
c
.
nextSibling
)
if
(
c
===
b
)
return
-
1
;
return
a
?
1
:
-
1
}
function
la
(
a
){
return
function
(
b
){
var
c
=
b
.
nodeName
.
toLowerCase
();
return
"input"
===
c
&&
b
.
type
===
a
}}
function
ma
(
a
){
return
function
(
b
){
var
c
=
b
.
nodeName
.
toLowerCase
();
return
(
"input"
===
c
||
"button"
===
c
)
&&
b
.
type
===
a
}}
function
na
(
a
){
return
ha
(
function
(
b
){
return
b
=+
b
,
ha
(
function
(
c
,
d
){
var
e
,
f
=
a
([],
c
.
length
,
b
),
g
=
f
.
length
;
while
(
g
--
)
c
[
e
=
f
[
g
]]
&&
(
c
[
e
]
=!
(
d
[
e
]
=
c
[
e
]))})})}
function
oa
(
a
){
return
a
&&
"undefined"
!=
typeof
a
.
getElementsByTagName
&&
a
}
c
=
fa
.
support
=
{},
f
=
fa
.
isXML
=
function
(
a
){
var
b
=
a
&&
(
a
.
ownerDocument
||
a
).
documentElement
;
return
b
?
"HTML"
!==
b
.
nodeName
:
!
1
},
m
=
fa
.
setDocument
=
function
(
a
){
var
b
,
e
,
g
=
a
?
a
.
ownerDocument
||
a
:
v
;
return
g
!==
n
&&
9
===
g
.
nodeType
&&
g
.
documentElement
?(
n
=
g
,
o
=
n
.
documentElement
,
p
=!
f
(
n
),(
e
=
n
.
defaultView
)
&&
e
.
top
!==
e
&&
(
e
.
addEventListener
?
e
.
addEventListener
(
"unload"
,
da
,
!
1
):
e
.
attachEvent
&&
e
.
attachEvent
(
"onunload"
,
da
)),
c
.
attributes
=
ia
(
function
(
a
){
return
a
.
className
=
"i"
,
!
a
.
getAttribute
(
"className"
)}),
c
.
getElementsByTagName
=
ia
(
function
(
a
){
return
a
.
appendChild
(
n
.
createComment
(
""
)),
!
a
.
getElementsByTagName
(
"*"
).
length
}),
c
.
getElementsByClassName
=
Z
.
test
(
n
.
getElementsByClassName
),
c
.
getById
=
ia
(
function
(
a
){
return
o
.
appendChild
(
a
).
id
=
u
,
!
n
.
getElementsByName
||!
n
.
getElementsByName
(
u
).
length
}),
c
.
getById
?(
d
.
find
.
ID
=
function
(
a
,
b
){
if
(
"undefined"
!=
typeof
b
.
getElementById
&&
p
){
var
c
=
b
.
getElementById
(
a
);
return
c
?[
c
]:[]}},
d
.
filter
.
ID
=
function
(
a
){
var
b
=
a
.
replace
(
ba
,
ca
);
return
function
(
a
){
return
a
.
getAttribute
(
"id"
)
===
b
}}):(
delete
d
.
find
.
ID
,
d
.
filter
.
ID
=
function
(
a
){
var
b
=
a
.
replace
(
ba
,
ca
);
return
function
(
a
){
var
c
=
"undefined"
!=
typeof
a
.
getAttributeNode
&&
a
.
getAttributeNode
(
"id"
);
return
c
&&
c
.
value
===
b
}}),
d
.
find
.
TAG
=
c
.
getElementsByTagName
?
function
(
a
,
b
){
return
"undefined"
!=
typeof
b
.
getElementsByTagName
?
b
.
getElementsByTagName
(
a
):
c
.
qsa
?
b
.
querySelectorAll
(
a
):
void
0
}:
function
(
a
,
b
){
var
c
,
d
=
[],
e
=
0
,
f
=
b
.
getElementsByTagName
(
a
);
if
(
"*"
===
a
){
while
(
c
=
f
[
e
++
])
1
===
c
.
nodeType
&&
d
.
push
(
c
);
return
d
}
return
f
},
d
.
find
.
CLASS
=
c
.
getElementsByClassName
&&
function
(
a
,
b
){
return
"undefined"
!=
typeof
b
.
getElementsByClassName
&&
p
?
b
.
getElementsByClassName
(
a
):
void
0
},
r
=
[],
q
=
[],(
c
.
qsa
=
Z
.
test
(
n
.
querySelectorAll
))
&&
(
ia
(
function
(
a
){
o
.
appendChild
(
a
).
innerHTML
=
"<a id='"
+
u
+
"'></a><select id='"
+
u
+
"-
\
r
\\
' msallowcapture=''><option selected=''></option></select>"
,
a
.
querySelectorAll
(
"[msallowcapture^='']"
).
length
&&
q
.
push
(
"[*^$]="
+
L
+
"*(?:''|
\"\"
)"
),
a
.
querySelectorAll
(
"[selected]"
).
length
||
q
.
push
(
"
\\
["
+
L
+
"*(?:value|"
+
K
+
")"
),
a
.
querySelectorAll
(
"[id~="
+
u
+
"-]"
).
length
||
q
.
push
(
"~="
),
a
.
querySelectorAll
(
":checked"
).
length
||
q
.
push
(
":checked"
),
a
.
querySelectorAll
(
"a#"
+
u
+
"+*"
).
length
||
q
.
push
(
".#.+[+~]"
)}),
ia
(
function
(
a
){
var
b
=
n
.
createElement
(
"input"
);
b
.
setAttribute
(
"type"
,
"hidden"
),
a
.
appendChild
(
b
).
setAttribute
(
"name"
,
"D"
),
a
.
querySelectorAll
(
"[name=d]"
).
length
&&
q
.
push
(
"name"
+
L
+
"*[*^$|!~]?="
),
a
.
querySelectorAll
(
":enabled"
).
length
||
q
.
push
(
":enabled"
,
":disabled"
),
a
.
querySelectorAll
(
"*,:x"
),
q
.
push
(
",.*:"
)})),(
c
.
matchesSelector
=
Z
.
test
(
s
=
o
.
matches
||
o
.
webkitMatchesSelector
||
o
.
mozMatchesSelector
||
o
.
oMatchesSelector
||
o
.
msMatchesSelector
))
&&
ia
(
function
(
a
){
c
.
disconnectedMatch
=
s
.
call
(
a
,
"div"
),
s
.
call
(
a
,
"[s!='']:x"
),
r
.
push
(
"!="
,
O
)}),
q
=
q
.
length
&&
new
RegExp
(
q
.
join
(
"|"
)),
r
=
r
.
length
&&
new
RegExp
(
r
.
join
(
"|"
)),
b
=
Z
.
test
(
o
.
compareDocumentPosition
),
t
=
b
||
Z
.
test
(
o
.
contains
)?
function
(
a
,
b
){
var
c
=
9
===
a
.
nodeType
?
a
.
documentElement
:
a
,
d
=
b
&&
b
.
parentNode
;
return
a
===
d
||!
(
!
d
||
1
!==
d
.
nodeType
||!
(
c
.
contains
?
c
.
contains
(
d
):
a
.
compareDocumentPosition
&&
16
&
a
.
compareDocumentPosition
(
d
)))}:
function
(
a
,
b
){
if
(
b
)
while
(
b
=
b
.
parentNode
)
if
(
b
===
a
)
return
!
0
;
return
!
1
},
B
=
b
?
function
(
a
,
b
){
if
(
a
===
b
)
return
l
=!
0
,
0
;
var
d
=!
a
.
compareDocumentPosition
-!
b
.
compareDocumentPosition
;
return
d
?
d
:(
d
=
(
a
.
ownerDocument
||
a
)
===
(
b
.
ownerDocument
||
b
)?
a
.
compareDocumentPosition
(
b
):
1
,
1
&
d
||!
c
.
sortDetached
&&
b
.
compareDocumentPosition
(
a
)
===
d
?
a
===
n
||
a
.
ownerDocument
===
v
&&
t
(
v
,
a
)?
-
1
:
b
===
n
||
b
.
ownerDocument
===
v
&&
t
(
v
,
b
)?
1
:
k
?
J
(
k
,
a
)
-
J
(
k
,
b
):
0
:
4
&
d
?
-
1
:
1
)}:
function
(
a
,
b
){
if
(
a
===
b
)
return
l
=!
0
,
0
;
var
c
,
d
=
0
,
e
=
a
.
parentNode
,
f
=
b
.
parentNode
,
g
=
[
a
],
h
=
[
b
];
if
(
!
e
||!
f
)
return
a
===
n
?
-
1
:
b
===
n
?
1
:
e
?
-
1
:
f
?
1
:
k
?
J
(
k
,
a
)
-
J
(
k
,
b
):
0
;
if
(
e
===
f
)
return
ka
(
a
,
b
);
c
=
a
;
while
(
c
=
c
.
parentNode
)
g
.
unshift
(
c
);
c
=
b
;
while
(
c
=
c
.
parentNode
)
h
.
unshift
(
c
);
while
(
g
[
d
]
===
h
[
d
])
d
++
;
return
d
?
ka
(
g
[
d
],
h
[
d
]):
g
[
d
]
===
v
?
-
1
:
h
[
d
]
===
v
?
1
:
0
},
n
):
n
},
fa
.
matches
=
function
(
a
,
b
){
return
fa
(
a
,
null
,
null
,
b
)},
fa
.
matchesSelector
=
function
(
a
,
b
){
if
((
a
.
ownerDocument
||
a
)
!==
n
&&
m
(
a
),
b
=
b
.
replace
(
T
,
"='$1']"
),
c
.
matchesSelector
&&
p
&&!
A
[
b
+
" "
]
&&
(
!
r
||!
r
.
test
(
b
))
&&
(
!
q
||!
q
.
test
(
b
)))
try
{
var
d
=
s
.
call
(
a
,
b
);
if
(
d
||
c
.
disconnectedMatch
||
a
.
document
&&
11
!==
a
.
document
.
nodeType
)
return
d
}
catch
(
e
){}
return
fa
(
b
,
n
,
null
,[
a
]).
length
>
0
},
fa
.
contains
=
function
(
a
,
b
){
return
(
a
.
ownerDocument
||
a
)
!==
n
&&
m
(
a
),
t
(
a
,
b
)},
fa
.
attr
=
function
(
a
,
b
){(
a
.
ownerDocument
||
a
)
!==
n
&&
m
(
a
);
var
e
=
d
.
attrHandle
[
b
.
toLowerCase
()],
f
=
e
&&
D
.
call
(
d
.
attrHandle
,
b
.
toLowerCase
())?
e
(
a
,
b
,
!
p
):
void
0
;
return
void
0
!==
f
?
f
:
c
.
attributes
||!
p
?
a
.
getAttribute
(
b
):(
f
=
a
.
getAttributeNode
(
b
))
&&
f
.
specified
?
f
.
value
:
null
},
fa
.
error
=
function
(
a
){
throw
new
Error
(
"Syntax error, unrecognized expression: "
+
a
)},
fa
.
uniqueSort
=
function
(
a
){
var
b
,
d
=
[],
e
=
0
,
f
=
0
;
if
(
l
=!
c
.
detectDuplicates
,
k
=!
c
.
sortStable
&&
a
.
slice
(
0
),
a
.
sort
(
B
),
l
){
while
(
b
=
a
[
f
++
])
b
===
a
[
f
]
&&
(
e
=
d
.
push
(
f
));
while
(
e
--
)
a
.
splice
(
d
[
e
],
1
)}
return
k
=
null
,
a
},
e
=
fa
.
getText
=
function
(
a
){
var
b
,
c
=
""
,
d
=
0
,
f
=
a
.
nodeType
;
if
(
f
){
if
(
1
===
f
||
9
===
f
||
11
===
f
){
if
(
"string"
==
typeof
a
.
textContent
)
return
a
.
textContent
;
for
(
a
=
a
.
firstChild
;
a
;
a
=
a
.
nextSibling
)
c
+=
e
(
a
)}
else
if
(
3
===
f
||
4
===
f
)
return
a
.
nodeValue
}
else
while
(
b
=
a
[
d
++
])
c
+=
e
(
b
);
return
c
},
d
=
fa
.
selectors
=
{
cacheLength
:
50
,
createPseudo
:
ha
,
match
:
W
,
attrHandle
:{},
find
:{},
relative
:{
">"
:{
dir
:
"parentNode"
,
first
:
!
0
},
" "
:{
dir
:
"parentNode"
},
"+"
:{
dir
:
"previousSibling"
,
first
:
!
0
},
"~"
:{
dir
:
"previousSibling"
}},
preFilter
:{
ATTR
:
function
(
a
){
return
a
[
1
]
=
a
[
1
].
replace
(
ba
,
ca
),
a
[
3
]
=
(
a
[
3
]
||
a
[
4
]
||
a
[
5
]
||
""
).
replace
(
ba
,
ca
),
"~="
===
a
[
2
]
&&
(
a
[
3
]
=
" "
+
a
[
3
]
+
" "
),
a
.
slice
(
0
,
4
)},
CHILD
:
function
(
a
){
return
a
[
1
]
=
a
[
1
].
toLowerCase
(),
"nth"
===
a
[
1
].
slice
(
0
,
3
)?(
a
[
3
]
||
fa
.
error
(
a
[
0
]),
a
[
4
]
=+
(
a
[
4
]?
a
[
5
]
+
(
a
[
6
]
||
1
):
2
*
(
"even"
===
a
[
3
]
||
"odd"
===
a
[
3
])),
a
[
5
]
=+
(
a
[
7
]
+
a
[
8
]
||
"odd"
===
a
[
3
])):
a
[
3
]
&&
fa
.
error
(
a
[
0
]),
a
},
PSEUDO
:
function
(
a
){
var
b
,
c
=!
a
[
6
]
&&
a
[
2
];
return
W
.
CHILD
.
test
(
a
[
0
])?
null
:(
a
[
3
]?
a
[
2
]
=
a
[
4
]
||
a
[
5
]
||
""
:
c
&&
U
.
test
(
c
)
&&
(
b
=
g
(
c
,
!
0
))
&&
(
b
=
c
.
indexOf
(
")"
,
c
.
length
-
b
)
-
c
.
length
)
&&
(
a
[
0
]
=
a
[
0
].
slice
(
0
,
b
),
a
[
2
]
=
c
.
slice
(
0
,
b
)),
a
.
slice
(
0
,
3
))}},
filter
:{
TAG
:
function
(
a
){
var
b
=
a
.
replace
(
ba
,
ca
).
toLowerCase
();
return
"*"
===
a
?
function
(){
return
!
0
}:
function
(
a
){
return
a
.
nodeName
&&
a
.
nodeName
.
toLowerCase
()
===
b
}},
CLASS
:
function
(
a
){
var
b
=
y
[
a
+
" "
];
return
b
||
(
b
=
new
RegExp
(
"(^|"
+
L
+
")"
+
a
+
"("
+
L
+
"|$)"
))
&&
y
(
a
,
function
(
a
){
return
b
.
test
(
"string"
==
typeof
a
.
className
&&
a
.
className
||
"undefined"
!=
typeof
a
.
getAttribute
&&
a
.
getAttribute
(
"class"
)
||
""
)})},
ATTR
:
function
(
a
,
b
,
c
){
return
function
(
d
){
var
e
=
fa
.
attr
(
d
,
a
);
return
null
==
e
?
"!="
===
b
:
b
?(
e
+=
""
,
"="
===
b
?
e
===
c
:
"!="
===
b
?
e
!==
c
:
"^="
===
b
?
c
&&
0
===
e
.
indexOf
(
c
):
"*="
===
b
?
c
&&
e
.
indexOf
(
c
)
>-
1
:
"$="
===
b
?
c
&&
e
.
slice
(
-
c
.
length
)
===
c
:
"~="
===
b
?(
" "
+
e
.
replace
(
P
,
" "
)
+
" "
).
indexOf
(
c
)
>-
1
:
"|="
===
b
?
e
===
c
||
e
.
slice
(
0
,
c
.
length
+
1
)
===
c
+
"-"
:
!
1
):
!
0
}},
CHILD
:
function
(
a
,
b
,
c
,
d
,
e
){
var
f
=
"nth"
!==
a
.
slice
(
0
,
3
),
g
=
"last"
!==
a
.
slice
(
-
4
),
h
=
"of-type"
===
b
;
return
1
===
d
&&
0
===
e
?
function
(
a
){
return
!!
a
.
parentNode
}:
function
(
b
,
c
,
i
){
var
j
,
k
,
l
,
m
,
n
,
o
,
p
=
f
!==
g
?
"nextSibling"
:
"previousSibling"
,
q
=
b
.
parentNode
,
r
=
h
&&
b
.
nodeName
.
toLowerCase
(),
s
=!
i
&&!
h
,
t
=!
1
;
if
(
q
){
if
(
f
){
while
(
p
){
m
=
b
;
while
(
m
=
m
[
p
])
if
(
h
?
m
.
nodeName
.
toLowerCase
()
===
r
:
1
===
m
.
nodeType
)
return
!
1
;
o
=
p
=
"only"
===
a
&&!
o
&&
"nextSibling"
}
return
!
0
}
if
(
o
=
[
g
?
q
.
firstChild
:
q
.
lastChild
],
g
&&
s
){
m
=
q
,
l
=
m
[
u
]
||
(
m
[
u
]
=
{}),
k
=
l
[
m
.
uniqueID
]
||
(
l
[
m
.
uniqueID
]
=
{}),
j
=
k
[
a
]
||
[],
n
=
j
[
0
]
===
w
&&
j
[
1
],
t
=
n
&&
j
[
2
],
m
=
n
&&
q
.
childNodes
[
n
];
while
(
m
=++
n
&&
m
&&
m
[
p
]
||
(
t
=
n
=
0
)
||
o
.
pop
())
if
(
1
===
m
.
nodeType
&&++
t
&&
m
===
b
){
k
[
a
]
=
[
w
,
n
,
t
];
break
}}
else
if
(
s
&&
(
m
=
b
,
l
=
m
[
u
]
||
(
m
[
u
]
=
{}),
k
=
l
[
m
.
uniqueID
]
||
(
l
[
m
.
uniqueID
]
=
{}),
j
=
k
[
a
]
||
[],
n
=
j
[
0
]
===
w
&&
j
[
1
],
t
=
n
),
t
===!
1
)
while
(
m
=++
n
&&
m
&&
m
[
p
]
||
(
t
=
n
=
0
)
||
o
.
pop
())
if
((
h
?
m
.
nodeName
.
toLowerCase
()
===
r
:
1
===
m
.
nodeType
)
&&++
t
&&
(
s
&&
(
l
=
m
[
u
]
||
(
m
[
u
]
=
{}),
k
=
l
[
m
.
uniqueID
]
||
(
l
[
m
.
uniqueID
]
=
{}),
k
[
a
]
=
[
w
,
t
]),
m
===
b
))
break
;
return
t
-=
e
,
t
===
d
||
t
%
d
===
0
&&
t
/
d
>=
0
}}},
PSEUDO
:
function
(
a
,
b
){
var
c
,
e
=
d
.
pseudos
[
a
]
||
d
.
setFilters
[
a
.
toLowerCase
()]
||
fa
.
error
(
"unsupported pseudo: "
+
a
);
return
e
[
u
]?
e
(
b
):
e
.
length
>
1
?(
c
=
[
a
,
a
,
""
,
b
],
d
.
setFilters
.
hasOwnProperty
(
a
.
toLowerCase
())?
ha
(
function
(
a
,
c
){
var
d
,
f
=
e
(
a
,
b
),
g
=
f
.
length
;
while
(
g
--
)
d
=
J
(
a
,
f
[
g
]),
a
[
d
]
=!
(
c
[
d
]
=
f
[
g
])}):
function
(
a
){
return
e
(
a
,
0
,
c
)}):
e
}},
pseudos
:{
not
:
ha
(
function
(
a
){
var
b
=
[],
c
=
[],
d
=
h
(
a
.
replace
(
Q
,
"$1"
));
return
d
[
u
]?
ha
(
function
(
a
,
b
,
c
,
e
){
var
f
,
g
=
d
(
a
,
null
,
e
,[]),
h
=
a
.
length
;
while
(
h
--
)(
f
=
g
[
h
])
&&
(
a
[
h
]
=!
(
b
[
h
]
=
f
))}):
function
(
a
,
e
,
f
){
return
b
[
0
]
=
a
,
d
(
b
,
null
,
f
,
c
),
b
[
0
]
=
null
,
!
c
.
pop
()}}),
has
:
ha
(
function
(
a
){
return
function
(
b
){
return
fa
(
a
,
b
).
length
>
0
}}),
contains
:
ha
(
function
(
a
){
return
a
=
a
.
replace
(
ba
,
ca
),
function
(
b
){
return
(
b
.
textContent
||
b
.
innerText
||
e
(
b
)).
indexOf
(
a
)
>-
1
}}),
lang
:
ha
(
function
(
a
){
return
V
.
test
(
a
||
""
)
||
fa
.
error
(
"unsupported lang: "
+
a
),
a
=
a
.
replace
(
ba
,
ca
).
toLowerCase
(),
function
(
b
){
var
c
;
do
if
(
c
=
p
?
b
.
lang
:
b
.
getAttribute
(
"xml:lang"
)
||
b
.
getAttribute
(
"lang"
))
return
c
=
c
.
toLowerCase
(),
c
===
a
||
0
===
c
.
indexOf
(
a
+
"-"
);
while
((
b
=
b
.
parentNode
)
&&
1
===
b
.
nodeType
);
return
!
1
}}),
target
:
function
(
b
){
var
c
=
a
.
location
&&
a
.
location
.
hash
;
return
c
&&
c
.
slice
(
1
)
===
b
.
id
},
root
:
function
(
a
){
return
a
===
o
},
focus
:
function
(
a
){
return
a
===
n
.
activeElement
&&
(
!
n
.
hasFocus
||
n
.
hasFocus
())
&&!!
(
a
.
type
||
a
.
href
||~
a
.
tabIndex
)},
enabled
:
function
(
a
){
return
a
.
disabled
===!
1
},
disabled
:
function
(
a
){
return
a
.
disabled
===!
0
},
checked
:
function
(
a
){
var
b
=
a
.
nodeName
.
toLowerCase
();
return
"input"
===
b
&&!!
a
.
checked
||
"option"
===
b
&&!!
a
.
selected
},
selected
:
function
(
a
){
return
a
.
parentNode
&&
a
.
parentNode
.
selectedIndex
,
a
.
selected
===!
0
},
empty
:
function
(
a
){
for
(
a
=
a
.
firstChild
;
a
;
a
=
a
.
nextSibling
)
if
(
a
.
nodeType
<
6
)
return
!
1
;
return
!
0
},
parent
:
function
(
a
){
return
!
d
.
pseudos
.
empty
(
a
)},
header
:
function
(
a
){
return
Y
.
test
(
a
.
nodeName
)},
input
:
function
(
a
){
return
X
.
test
(
a
.
nodeName
)},
button
:
function
(
a
){
var
b
=
a
.
nodeName
.
toLowerCase
();
return
"input"
===
b
&&
"button"
===
a
.
type
||
"button"
===
b
},
text
:
function
(
a
){
var
b
;
return
"input"
===
a
.
nodeName
.
toLowerCase
()
&&
"text"
===
a
.
type
&&
(
null
==
(
b
=
a
.
getAttribute
(
"type"
))
||
"text"
===
b
.
toLowerCase
())},
first
:
na
(
function
(){
return
[
0
]}),
last
:
na
(
function
(
a
,
b
){
return
[
b
-
1
]}),
eq
:
na
(
function
(
a
,
b
,
c
){
return
[
0
>
c
?
c
+
b
:
c
]}),
even
:
na
(
function
(
a
,
b
){
for
(
var
c
=
0
;
b
>
c
;
c
+=
2
)
a
.
push
(
c
);
return
a
}),
odd
:
na
(
function
(
a
,
b
){
for
(
var
c
=
1
;
b
>
c
;
c
+=
2
)
a
.
push
(
c
);
return
a
}),
lt
:
na
(
function
(
a
,
b
,
c
){
for
(
var
d
=
0
>
c
?
c
+
b
:
c
;
--
d
>=
0
;)
a
.
push
(
d
);
return
a
}),
gt
:
na
(
function
(
a
,
b
,
c
){
for
(
var
d
=
0
>
c
?
c
+
b
:
c
;
++
d
<
b
;)
a
.
push
(
d
);
return
a
})}},
d
.
pseudos
.
nth
=
d
.
pseudos
.
eq
;
for
(
b
in
{
radio
:
!
0
,
checkbox
:
!
0
,
file
:
!
0
,
password
:
!
0
,
image
:
!
0
})
d
.
pseudos
[
b
]
=
la
(
b
);
for
(
b
in
{
submit
:
!
0
,
reset
:
!
0
})
d
.
pseudos
[
b
]
=
ma
(
b
);
function
pa
(){}
pa
.
prototype
=
d
.
filters
=
d
.
pseudos
,
d
.
setFilters
=
new
pa
,
g
=
fa
.
tokenize
=
function
(
a
,
b
){
var
c
,
e
,
f
,
g
,
h
,
i
,
j
,
k
=
z
[
a
+
" "
];
if
(
k
)
return
b
?
0
:
k
.
slice
(
0
);
h
=
a
,
i
=
[],
j
=
d
.
preFilter
;
while
(
h
){(
!
c
||
(
e
=
R
.
exec
(
h
)))
&&
(
e
&&
(
h
=
h
.
slice
(
e
[
0
].
length
)
||
h
),
i
.
push
(
f
=
[])),
c
=!
1
,(
e
=
S
.
exec
(
h
))
&&
(
c
=
e
.
shift
(),
f
.
push
({
value
:
c
,
type
:
e
[
0
].
replace
(
Q
,
" "
)}),
h
=
h
.
slice
(
c
.
length
));
for
(
g
in
d
.
filter
)
!
(
e
=
W
[
g
].
exec
(
h
))
||
j
[
g
]
&&!
(
e
=
j
[
g
](
e
))
||
(
c
=
e
.
shift
(),
f
.
push
({
value
:
c
,
type
:
g
,
matches
:
e
}),
h
=
h
.
slice
(
c
.
length
));
if
(
!
c
)
break
}
return
b
?
h
.
length
:
h
?
fa
.
error
(
a
):
z
(
a
,
i
).
slice
(
0
)};
function
qa
(
a
){
for
(
var
b
=
0
,
c
=
a
.
length
,
d
=
""
;
c
>
b
;
b
++
)
d
+=
a
[
b
].
value
;
return
d
}
function
ra
(
a
,
b
,
c
){
var
d
=
b
.
dir
,
e
=
c
&&
"parentNode"
===
d
,
f
=
x
++
;
return
b
.
first
?
function
(
b
,
c
,
f
){
while
(
b
=
b
[
d
])
if
(
1
===
b
.
nodeType
||
e
)
return
a
(
b
,
c
,
f
)}:
function
(
b
,
c
,
g
){
var
h
,
i
,
j
,
k
=
[
w
,
f
];
if
(
g
){
while
(
b
=
b
[
d
])
if
((
1
===
b
.
nodeType
||
e
)
&&
a
(
b
,
c
,
g
))
return
!
0
}
else
while
(
b
=
b
[
d
])
if
(
1
===
b
.
nodeType
||
e
){
if
(
j
=
b
[
u
]
||
(
b
[
u
]
=
{}),
i
=
j
[
b
.
uniqueID
]
||
(
j
[
b
.
uniqueID
]
=
{}),(
h
=
i
[
d
])
&&
h
[
0
]
===
w
&&
h
[
1
]
===
f
)
return
k
[
2
]
=
h
[
2
];
if
(
i
[
d
]
=
k
,
k
[
2
]
=
a
(
b
,
c
,
g
))
return
!
0
}}}
function
sa
(
a
){
return
a
.
length
>
1
?
function
(
b
,
c
,
d
){
var
e
=
a
.
length
;
while
(
e
--
)
if
(
!
a
[
e
](
b
,
c
,
d
))
return
!
1
;
return
!
0
}:
a
[
0
]}
function
ta
(
a
,
b
,
c
){
for
(
var
d
=
0
,
e
=
b
.
length
;
e
>
d
;
d
++
)
fa
(
a
,
b
[
d
],
c
);
return
c
}
function
ua
(
a
,
b
,
c
,
d
,
e
){
for
(
var
f
,
g
=
[],
h
=
0
,
i
=
a
.
length
,
j
=
null
!=
b
;
i
>
h
;
h
++
)(
f
=
a
[
h
])
&&
(
!
c
||
c
(
f
,
d
,
e
))
&&
(
g
.
push
(
f
),
j
&&
b
.
push
(
h
));
return
g
}
function
va
(
a
,
b
,
c
,
d
,
e
,
f
){
return
d
&&!
d
[
u
]
&&
(
d
=
va
(
d
)),
e
&&!
e
[
u
]
&&
(
e
=
va
(
e
,
f
)),
ha
(
function
(
f
,
g
,
h
,
i
){
var
j
,
k
,
l
,
m
=
[],
n
=
[],
o
=
g
.
length
,
p
=
f
||
ta
(
b
||
"*"
,
h
.
nodeType
?[
h
]:
h
,[]),
q
=!
a
||!
f
&&
b
?
p
:
ua
(
p
,
m
,
a
,
h
,
i
),
r
=
c
?
e
||
(
f
?
a
:
o
||
d
)?[]:
g
:
q
;
if
(
c
&&
c
(
q
,
r
,
h
,
i
),
d
){
j
=
ua
(
r
,
n
),
d
(
j
,[],
h
,
i
),
k
=
j
.
length
;
while
(
k
--
)(
l
=
j
[
k
])
&&
(
r
[
n
[
k
]]
=!
(
q
[
n
[
k
]]
=
l
))}
if
(
f
){
if
(
e
||
a
){
if
(
e
){
j
=
[],
k
=
r
.
length
;
while
(
k
--
)(
l
=
r
[
k
])
&&
j
.
push
(
q
[
k
]
=
l
);
e
(
null
,
r
=
[],
j
,
i
)}
k
=
r
.
length
;
while
(
k
--
)(
l
=
r
[
k
])
&&
(
j
=
e
?
J
(
f
,
l
):
m
[
k
])
>-
1
&&
(
f
[
j
]
=!
(
g
[
j
]
=
l
))}}
else
r
=
ua
(
r
===
g
?
r
.
splice
(
o
,
r
.
length
):
r
),
e
?
e
(
null
,
g
,
r
,
i
):
H
.
apply
(
g
,
r
)})}
function
wa
(
a
){
for
(
var
b
,
c
,
e
,
f
=
a
.
length
,
g
=
d
.
relative
[
a
[
0
].
type
],
h
=
g
||
d
.
relative
[
" "
],
i
=
g
?
1
:
0
,
k
=
ra
(
function
(
a
){
return
a
===
b
},
h
,
!
0
),
l
=
ra
(
function
(
a
){
return
J
(
b
,
a
)
>-
1
},
h
,
!
0
),
m
=
[
function
(
a
,
c
,
d
){
var
e
=!
g
&&
(
d
||
c
!==
j
)
||
((
b
=
c
).
nodeType
?
k
(
a
,
c
,
d
):
l
(
a
,
c
,
d
));
return
b
=
null
,
e
}];
f
>
i
;
i
++
)
if
(
c
=
d
.
relative
[
a
[
i
].
type
])
m
=
[
ra
(
sa
(
m
),
c
)];
else
{
if
(
c
=
d
.
filter
[
a
[
i
].
type
].
apply
(
null
,
a
[
i
].
matches
),
c
[
u
]){
for
(
e
=++
i
;
f
>
e
;
e
++
)
if
(
d
.
relative
[
a
[
e
].
type
])
break
;
return
va
(
i
>
1
&&
sa
(
m
),
i
>
1
&&
qa
(
a
.
slice
(
0
,
i
-
1
).
concat
({
value
:
" "
===
a
[
i
-
2
].
type
?
"*"
:
""
})).
replace
(
Q
,
"$1"
),
c
,
e
>
i
&&
wa
(
a
.
slice
(
i
,
e
)),
f
>
e
&&
wa
(
a
=
a
.
slice
(
e
)),
f
>
e
&&
qa
(
a
))}
m
.
push
(
c
)}
return
sa
(
m
)}
function
xa
(
a
,
b
){
var
c
=
b
.
length
>
0
,
e
=
a
.
length
>
0
,
f
=
function
(
f
,
g
,
h
,
i
,
k
){
var
l
,
o
,
q
,
r
=
0
,
s
=
"0"
,
t
=
f
&&
[],
u
=
[],
v
=
j
,
x
=
f
||
e
&&
d
.
find
.
TAG
(
"*"
,
k
),
y
=
w
+=
null
==
v
?
1
:
Math
.
random
()
||
.
1
,
z
=
x
.
length
;
for
(
k
&&
(
j
=
g
===
n
||
g
||
k
);
s
!==
z
&&
null
!=
(
l
=
x
[
s
]);
s
++
){
if
(
e
&&
l
){
o
=
0
,
g
||
l
.
ownerDocument
===
n
||
(
m
(
l
),
h
=!
p
);
while
(
q
=
a
[
o
++
])
if
(
q
(
l
,
g
||
n
,
h
)){
i
.
push
(
l
);
break
}
k
&&
(
w
=
y
)}
c
&&
((
l
=!
q
&&
l
)
&&
r
--
,
f
&&
t
.
push
(
l
))}
if
(
r
+=
s
,
c
&&
s
!==
r
){
o
=
0
;
while
(
q
=
b
[
o
++
])
q
(
t
,
u
,
g
,
h
);
if
(
f
){
if
(
r
>
0
)
while
(
s
--
)
t
[
s
]
||
u
[
s
]
||
(
u
[
s
]
=
F
.
call
(
i
));
u
=
ua
(
u
)}
H
.
apply
(
i
,
u
),
k
&&!
f
&&
u
.
length
>
0
&&
r
+
b
.
length
>
1
&&
fa
.
uniqueSort
(
i
)}
return
k
&&
(
w
=
y
,
j
=
v
),
t
};
return
c
?
ha
(
f
):
f
}
h
=
fa
.
compile
=
function
(
a
,
b
){
var
c
,
d
=
[],
e
=
[],
f
=
A
[
a
+
" "
];
if
(
!
f
){
b
||
(
b
=
g
(
a
)),
c
=
b
.
length
;
while
(
c
--
)
f
=
wa
(
b
[
c
]),
f
[
u
]?
d
.
push
(
f
):
e
.
push
(
f
);
f
=
A
(
a
,
xa
(
e
,
d
)),
f
.
selector
=
a
}
return
f
},
i
=
fa
.
select
=
function
(
a
,
b
,
e
,
f
){
var
i
,
j
,
k
,
l
,
m
,
n
=
"function"
==
typeof
a
&&
a
,
o
=!
f
&&
g
(
a
=
n
.
selector
||
a
);
if
(
e
=
e
||
[],
1
===
o
.
length
){
if
(
j
=
o
[
0
]
=
o
[
0
].
slice
(
0
),
j
.
length
>
2
&&
"ID"
===
(
k
=
j
[
0
]).
type
&&
c
.
getById
&&
9
===
b
.
nodeType
&&
p
&&
d
.
relative
[
j
[
1
].
type
]){
if
(
b
=
(
d
.
find
.
ID
(
k
.
matches
[
0
].
replace
(
ba
,
ca
),
b
)
||
[])[
0
],
!
b
)
return
e
;
n
&&
(
b
=
b
.
parentNode
),
a
=
a
.
slice
(
j
.
shift
().
value
.
length
)}
i
=
W
.
needsContext
.
test
(
a
)?
0
:
j
.
length
;
while
(
i
--
){
if
(
k
=
j
[
i
],
d
.
relative
[
l
=
k
.
type
])
break
;
if
((
m
=
d
.
find
[
l
])
&&
(
f
=
m
(
k
.
matches
[
0
].
replace
(
ba
,
ca
),
_
.
test
(
j
[
0
].
type
)
&&
oa
(
b
.
parentNode
)
||
b
))){
if
(
j
.
splice
(
i
,
1
),
a
=
f
.
length
&&
qa
(
j
),
!
a
)
return
H
.
apply
(
e
,
f
),
e
;
break
}}}
return
(
n
||
h
(
a
,
o
))(
f
,
b
,
!
p
,
e
,
!
b
||
_
.
test
(
a
)
&&
oa
(
b
.
parentNode
)
||
b
),
e
},
c
.
sortStable
=
u
.
split
(
""
).
sort
(
B
).
join
(
""
)
===
u
,
c
.
detectDuplicates
=!!
l
,
m
(),
c
.
sortDetached
=
ia
(
function
(
a
){
return
1
&
a
.
compareDocumentPosition
(
n
.
createElement
(
"div"
))}),
ia
(
function
(
a
){
return
a
.
innerHTML
=
"<a href='#'></a>"
,
"#"
===
a
.
firstChild
.
getAttribute
(
"href"
)})
||
ja
(
"type|href|height|width"
,
function
(
a
,
b
,
c
){
return
c
?
void
0
:
a
.
getAttribute
(
b
,
"type"
===
b
.
toLowerCase
()?
1
:
2
)}),
c
.
attributes
&&
ia
(
function
(
a
){
return
a
.
innerHTML
=
"<input/>"
,
a
.
firstChild
.
setAttribute
(
"value"
,
""
),
""
===
a
.
firstChild
.
getAttribute
(
"value"
)})
||
ja
(
"value"
,
function
(
a
,
b
,
c
){
return
c
||
"input"
!==
a
.
nodeName
.
toLowerCase
()?
void
0
:
a
.
defaultValue
}),
ia
(
function
(
a
){
return
null
==
a
.
getAttribute
(
"disabled"
)})
||
ja
(
K
,
function
(
a
,
b
,
c
){
var
d
;
return
c
?
void
0
:
a
[
b
]
===!
0
?
b
.
toLowerCase
():(
d
=
a
.
getAttributeNode
(
b
))
&&
d
.
specified
?
d
.
value
:
null
}),
"function"
==
typeof
define
&&
define
.
amd
?
define
(
function
(){
return
fa
}):
"undefined"
!=
typeof
module
&&
module
.
exports
?
module
.
exports
=
fa
:
a
.
Sizzle
=
fa
}(
window
);
//# sourceMappingURL=sizzle.min.map
\ No newline at end of file
external/sizzle/dist/sizzle.min.map
0 → 100644
View file @
b910b2ab
{"version":3,"file":"sizzle.min.js","sources":["sizzle.js"],"names":["window","i","support","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","document","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","matches","contains","expando","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","MAX_NEGATIVE","hasOwn","hasOwnProperty","arr","pop","push_native","push","slice","indexOf","list","elem","len","length","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rtrim","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","unloadHandler","apply","call","childNodes","nodeType","e","target","els","j","Sizzle","selector","context","results","seed","m","nid","nidselect","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","nodeName","toLowerCase","getAttribute","replace","setAttribute","toSelector","join","testContext","parentNode","querySelectorAll","qsaError","removeAttribute","keys","cache","key","value","cacheLength","shift","markFunction","fn","assert","div","createElement","removeChild","addHandle","attrs","handler","split","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","type","name","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","documentElement","node","hasCompare","parent","doc","defaultView","top","addEventListener","attachEvent","className","appendChild","createComment","getById","getElementsByName","find","filter","attrId","getAttributeNode","tag","tmp","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","ret","attr","val","undefined","specified","error","msg","Error","uniqueSort","duplicates","detectDuplicates","sortStable","sort","splice","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">","dir","first"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","last","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","start","useCache","lastChild","uniqueID","pseudo","args","setFilters","idx","matched","not","matcher","unmatched","has","text","innerText","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","disabled","checked","selected","selectedIndex","empty","header","button","eq","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","prototype","filters","parseOnly","tokens","soFar","preFilters","cached","addCombinator","combinator","base","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","map","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","elems","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","concat","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","Math","random","token","compiled","div1","defaultValue","define","amd","module","exports"],"mappings":"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"}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment