From 7b7e9cc865a77fd37c69e65deb8503f64a21d9ac Mon Sep 17 00:00:00 2001 From: Thomas A Caswell Date: Wed, 1 Jul 2015 16:40:15 -0400 Subject: [PATCH 1/3] Docs build rebuilt and squashed for v0.10.0 --- .buildinfo | 4 + .nojekyll | 0 _images/index-1.png | Bin 0 -> 32402 bytes _images/index-2.png | Bin 0 -> 40576 bytes _images/index-3.png | Bin 0 -> 61272 bytes _images/index-4.png | Bin 0 -> 60866 bytes _modules/cycler.html | 645 ++ _modules/index.html | 85 + _sources/generated/cycler.Cycler.txt | 31 + _sources/generated/cycler.concat.txt | 6 + _sources/generated/cycler.cycler.txt | 6 + _sources/index.txt | 407 + _static/ajax-loader.gif | Bin 0 -> 673 bytes _static/alabaster.css | 593 ++ _static/basic.css | 599 ++ _static/comment-bright.png | Bin 0 -> 3500 bytes _static/comment-close.png | Bin 0 -> 3578 bytes _static/comment.png | Bin 0 -> 3445 bytes _static/doctools.js | 263 + _static/down-pressed.png | Bin 0 -> 347 bytes _static/down.png | Bin 0 -> 347 bytes _static/file.png | Bin 0 -> 358 bytes _static/jquery-1.11.1.js | 10308 +++++++++++++++++++++++++ _static/jquery.js | 4 + _static/minus.png | Bin 0 -> 173 bytes _static/plus.png | Bin 0 -> 173 bytes _static/pygments.css | 65 + _static/searchtools.js | 651 ++ _static/underscore-1.3.1.js | 999 +++ _static/underscore.js | 31 + _static/up-pressed.png | Bin 0 -> 345 bytes _static/up.png | Bin 0 -> 345 bytes _static/websupport.js | 808 ++ generated/cycler.Cycler.html | 269 + generated/cycler.concat.html | 130 + generated/cycler.cycler.html | 147 + genindex.html | 168 + index-1.hires.png | Bin 0 -> 84619 bytes index-1.pdf | Bin 0 -> 7189 bytes index-1.png | Bin 0 -> 32402 bytes index-1.py | 15 + index-2.hires.png | Bin 0 -> 111077 bytes index-2.pdf | Bin 0 -> 7304 bytes index-2.png | Bin 0 -> 40576 bytes index-2.py | 20 + index-3.hires.png | Bin 0 -> 178759 bytes index-3.pdf | Bin 0 -> 18594 bytes index-3.png | Bin 0 -> 61272 bytes index-3.py | 15 + index-4.hires.png | Bin 0 -> 177682 bytes index-4.pdf | Bin 0 -> 18635 bytes index-4.png | Bin 0 -> 60866 bytes index-4.py | 20 + index.html | 594 ++ objects.inv | 7 + search.html | 100 + searchindex.js | 1 + 57 files changed, 16991 insertions(+) create mode 100644 .buildinfo create mode 100644 .nojekyll create mode 100644 _images/index-1.png create mode 100644 _images/index-2.png create mode 100644 _images/index-3.png create mode 100644 _images/index-4.png create mode 100644 _modules/cycler.html create mode 100644 _modules/index.html create mode 100644 _sources/generated/cycler.Cycler.txt create mode 100644 _sources/generated/cycler.concat.txt create mode 100644 _sources/generated/cycler.cycler.txt create mode 100644 _sources/index.txt create mode 100644 _static/ajax-loader.gif create mode 100644 _static/alabaster.css create mode 100644 _static/basic.css create mode 100644 _static/comment-bright.png create mode 100644 _static/comment-close.png create mode 100644 _static/comment.png create mode 100644 _static/doctools.js create mode 100644 _static/down-pressed.png create mode 100644 _static/down.png create mode 100644 _static/file.png create mode 100644 _static/jquery-1.11.1.js create mode 100644 _static/jquery.js create mode 100644 _static/minus.png create mode 100644 _static/plus.png create mode 100644 _static/pygments.css create mode 100644 _static/searchtools.js create mode 100644 _static/underscore-1.3.1.js create mode 100644 _static/underscore.js create mode 100644 _static/up-pressed.png create mode 100644 _static/up.png create mode 100644 _static/websupport.js create mode 100644 generated/cycler.Cycler.html create mode 100644 generated/cycler.concat.html create mode 100644 generated/cycler.cycler.html create mode 100644 genindex.html create mode 100644 index-1.hires.png create mode 100644 index-1.pdf create mode 100644 index-1.png create mode 100644 index-1.py create mode 100644 index-2.hires.png create mode 100644 index-2.pdf create mode 100644 index-2.png create mode 100644 index-2.py create mode 100644 index-3.hires.png create mode 100644 index-3.pdf create mode 100644 index-3.png create mode 100644 index-3.py create mode 100644 index-4.hires.png create mode 100644 index-4.pdf create mode 100644 index-4.png create mode 100644 index-4.py create mode 100644 index.html create mode 100644 objects.inv create mode 100644 search.html create mode 100644 searchindex.js diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 0000000..d534690 --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 5ef30a5858939090ddda6db5807b68df +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/_images/index-1.png b/_images/index-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7b5044ba011a8552c24c958e16eccba179a1d8c2 GIT binary patch literal 32402 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 literal 0 HcmV?d00001 diff --git a/_images/index-2.png b/_images/index-2.png new file mode 100644 index 0000000000000000000000000000000000000000..370ccad37f9c7fe2b80b2524d7a01eef9f9e2350 GIT binary patch literal 40576 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 D@cuw2 literal 0 HcmV?d00001 diff --git a/_modules/cycler.html b/_modules/cycler.html new file mode 100644 index 0000000..e4c16f7 --- /dev/null +++ b/_modules/cycler.html @@ -0,0 +1,645 @@ + + + + + + + + cycler — cycler 0.10.0 documentation + + + + + + + + + + + + + + + + + + +

+
+
+
+ +

Source code for cycler

+"""
+Cycler
+======
+
+Cycling through combinations of values, producing dictionaries.
+
+You can add cyclers::
+
+    from cycler import cycler
+    cc = (cycler(color=list('rgb')) +
+          cycler(linestyle=['-', '--', '-.']))
+    for d in cc:
+        print(d)
+
+Results in::
+
+    {'color': 'r', 'linestyle': '-'}
+    {'color': 'g', 'linestyle': '--'}
+    {'color': 'b', 'linestyle': '-.'}
+
+
+You can multiply cyclers::
+
+    from cycler import cycler
+    cc = (cycler(color=list('rgb')) *
+          cycler(linestyle=['-', '--', '-.']))
+    for d in cc:
+        print(d)
+
+Results in::
+
+    {'color': 'r', 'linestyle': '-'}
+    {'color': 'r', 'linestyle': '--'}
+    {'color': 'r', 'linestyle': '-.'}
+    {'color': 'g', 'linestyle': '-'}
+    {'color': 'g', 'linestyle': '--'}
+    {'color': 'g', 'linestyle': '-.'}
+    {'color': 'b', 'linestyle': '-'}
+    {'color': 'b', 'linestyle': '--'}
+    {'color': 'b', 'linestyle': '-.'}
+"""
+
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+import six
+from itertools import product, cycle
+from six.moves import zip, reduce
+from operator import mul, add
+import copy
+
+__version__ = '0.10.0'
+
+
+def _process_keys(left, right):
+    """
+    Helper function to compose cycler keys
+
+    Parameters
+    ----------
+    left, right : iterable of dictionaries or None
+        The cyclers to be composed
+    Returns
+    -------
+    keys : set
+        The keys in the composition of the two cyclers
+    """
+    l_peek = next(iter(left)) if left is not None else {}
+    r_peek = next(iter(right)) if right is not None else {}
+    l_key = set(l_peek.keys())
+    r_key = set(r_peek.keys())
+    if l_key & r_key:
+        raise ValueError("Can not compose overlapping cycles")
+    return l_key | r_key
+
+
+
[docs]class Cycler(object): + """ + Composable cycles + + This class has compositions methods: + + ``+`` + for 'inner' products (zip) + + ``+=`` + in-place ``+`` + + ``*`` + for outer products (itertools.product) and integer multiplication + + ``*=`` + in-place ``*`` + + and supports basic slicing via ``[]`` + + Parameters + ---------- + left : Cycler or None + The 'left' cycler + + right : Cycler or None + The 'right' cycler + + op : func or None + Function which composes the 'left' and 'right' cyclers. + + """ + def __call__(self): + return cycle(self) + +
[docs] def __init__(self, left, right=None, op=None): + """Semi-private init + + Do not use this directly, use `cycler` function instead. + """ + if isinstance(left, Cycler): + self._left = Cycler(left._left, left._right, left._op) + elif left is not None: + # Need to copy the dictionary or else that will be a residual + # mutable that could lead to strange errors + self._left = [copy.copy(v) for v in left] + else: + self._left = None + + if isinstance(right, Cycler): + self._right = Cycler(right._left, right._right, right._op) + elif right is not None: + # Need to copy the dictionary or else that will be a residual + # mutable that could lead to strange errors + self._right = [copy.copy(v) for v in right] + else: + self._right = None + + self._keys = _process_keys(self._left, self._right) + self._op = op
+ + @property + def keys(self): + """ + The keys this Cycler knows about + """ + return set(self._keys) + +
[docs] def change_key(self, old, new): + """ + Change a key in this cycler to a new name. + Modification is performed in-place. + + Does nothing if the old key is the same as the new key. + Raises a ValueError if the new key is already a key. + Raises a KeyError if the old key isn't a key. + + """ + if old == new: + return + if new in self._keys: + raise ValueError("Can't replace %s with %s, %s is already a key" % + (old, new, new)) + if old not in self._keys: + raise KeyError("Can't replace %s with %s, %s is not a key" % + (old, new, old)) + + self._keys.remove(old) + self._keys.add(new) + + if self._right is not None and old in self._right.keys: + self._right.change_key(old, new) + + # self._left should always be non-None + # if self._keys is non-empty. + elif isinstance(self._left, Cycler): + self._left.change_key(old, new) + else: + # It should be completely safe at this point to + # assume that the old key can be found in each + # iteration. + self._left = [{new: entry[old]} for entry in self._left]
+ + def _compose(self): + """ + Compose the 'left' and 'right' components of this cycle + with the proper operation (zip or product as of now) + """ + for a, b in self._op(self._left, self._right): + out = dict() + out.update(a) + out.update(b) + yield out + + @classmethod + def _from_iter(cls, label, itr): + """ + Class method to create 'base' Cycler objects + that do not have a 'right' or 'op' and for which + the 'left' object is not another Cycler. + + Parameters + ---------- + label : str + The property key. + + itr : iterable + Finite length iterable of the property values. + + Returns + ------- + cycler : Cycler + New 'base' `Cycler` + """ + ret = cls(None) + ret._left = list({label: v} for v in itr) + ret._keys = set([label]) + return ret + + def __getitem__(self, key): + # TODO : maybe add numpy style fancy slicing + if isinstance(key, slice): + trans = self.by_key() + return reduce(add, (_cycler(k, v[key]) + for k, v in six.iteritems(trans))) + else: + raise ValueError("Can only use slices with Cycler.__getitem__") + + def __iter__(self): + if self._right is None: + return iter(dict(l) for l in self._left) + + return self._compose() + + def __add__(self, other): + """ + Pair-wise combine two equal length cycles (zip) + + Parameters + ---------- + other : Cycler + The second Cycler + """ + if len(self) != len(other): + raise ValueError("Can only add equal length cycles, " + "not {0} and {1}".format(len(self), len(other))) + return Cycler(self, other, zip) + + def __mul__(self, other): + """ + Outer product of two cycles (`itertools.product`) or integer + multiplication. + + Parameters + ---------- + other : Cycler or int + The second Cycler or integer + """ + if isinstance(other, Cycler): + return Cycler(self, other, product) + elif isinstance(other, int): + trans = self.by_key() + return reduce(add, (_cycler(k, v*other) + for k, v in six.iteritems(trans))) + else: + return NotImplemented + + def __rmul__(self, other): + return self * other + + def __len__(self): + op_dict = {zip: min, product: mul} + if self._right is None: + return len(self._left) + l_len = len(self._left) + r_len = len(self._right) + return op_dict[self._op](l_len, r_len) + + def __iadd__(self, other): + """ + In-place pair-wise combine two equal length cycles (zip) + + Parameters + ---------- + other : Cycler + The second Cycler + """ + if not isinstance(other, Cycler): + raise TypeError("Cannot += with a non-Cycler object") + # True shallow copy of self is fine since this is in-place + old_self = copy.copy(self) + self._keys = _process_keys(old_self, other) + self._left = old_self + self._op = zip + self._right = Cycler(other._left, other._right, other._op) + return self + + def __imul__(self, other): + """ + In-place outer product of two cycles (`itertools.product`) + + Parameters + ---------- + other : Cycler + The second Cycler + """ + if not isinstance(other, Cycler): + raise TypeError("Cannot *= with a non-Cycler object") + # True shallow copy of self is fine since this is in-place + old_self = copy.copy(self) + self._keys = _process_keys(old_self, other) + self._left = old_self + self._op = product + self._right = Cycler(other._left, other._right, other._op) + return self + + def __eq__(self, other): + """ + Check equality + """ + if len(self) != len(other): + return False + if self.keys ^ other.keys: + return False + + return all(a == b for a, b in zip(self, other)) + + def __repr__(self): + op_map = {zip: '+', product: '*'} + if self._right is None: + lab = self.keys.pop() + itr = list(v[lab] for v in self) + return "cycler({lab!r}, {itr!r})".format(lab=lab, itr=itr) + else: + op = op_map.get(self._op, '?') + msg = "({left!r} {op} {right!r})" + return msg.format(left=self._left, op=op, right=self._right) + + def _repr_html_(self): + # an table showing the value of each key through a full cycle + output = "<table>" + sorted_keys = sorted(self.keys, key=repr) + for key in sorted_keys: + output += "<th>{key!r}</th>".format(key=key) + for d in iter(self): + output += "<tr>" + for k in sorted_keys: + output += "<td>{val!r}</td>".format(val=d[k]) + output += "</tr>" + output += "</table>" + return output + +
[docs] def by_key(self): + """Values by key + + This returns the transposed values of the cycler. Iterating + over a `Cycler` yields dicts with a single value for each key, + this method returns a `dict` of `list` which are the values + for the given key. + + The returned value can be used to create an equivalent `Cycler` + using only `+`. + + Returns + ------- + transpose : dict + dict of lists of the values for each key. + """ + + # TODO : sort out if this is a bottle neck, if there is a better way + # and if we care. + + keys = self.keys + # change this to dict comprehension when drop 2.6 + out = dict((k, list()) for k in keys) + + for d in self: + for k in keys: + out[k].append(d[k]) + return out
+ + # for back compatibility + _transpose = by_key + +
[docs] def simplify(self): + """Simplify the Cycler + + Returned as a composition using only sums (no multiplications) + + Returns + ------- + simple : Cycler + An equivalent cycler using only summation""" + # TODO: sort out if it is worth the effort to make sure this is + # balanced. Currently it is is + # (((a + b) + c) + d) vs + # ((a + b) + (c + d)) + # I would believe that there is some performance implications + + trans = self.by_key() + return reduce(add, (_cycler(k, v) for k, v in six.iteritems(trans)))
+ +
[docs] def concat(self, other): + """Concatenate this cycler and an other. + + The keys must match exactly. + + This returns a single Cycler which is equivalent to + `itertools.chain(self, other)` + + Examples + -------- + + >>> num = cycler('a', range(3)) + >>> let = cycler('a', 'abc') + >>> num.concat(let) + cycler('a', [0, 1, 2, 'a', 'b', 'c']) + + Parameters + ---------- + other : `Cycler` + The `Cycler` to concatenate to this one. + + Returns + ------- + ret : `Cycler` + The concatenated `Cycler` + """ + return concat(self, other)
+ + +
[docs]def concat(left, right): + """Concatenate two cyclers. + + The keys must match exactly. + + This returns a single Cycler which is equivalent to + `itertools.chain(left, right)` + + Examples + -------- + + >>> num = cycler('a', range(3)) + >>> let = cycler('a', 'abc') + >>> num.concat(let) + cycler('a', [0, 1, 2, 'a', 'b', 'c']) + + Parameters + ---------- + left, right : `Cycler` + The two `Cycler` instances to concatenate + + Returns + ------- + ret : `Cycler` + The concatenated `Cycler` + """ + if left.keys != right.keys: + msg = '\n\t'.join(["Keys do not match:", + "Intersection: {both!r}", + "Disjoint: {just_one!r}"]).format( + both=left.keys & right.keys, + just_one=left.keys ^ right.keys) + + raise ValueError(msg) + + _l = left.by_key() + _r = right.by_key() + return reduce(add, (_cycler(k, _l[k] + _r[k]) for k in left.keys))
+ + +
[docs]def cycler(*args, **kwargs): + """ + Create a new `Cycler` object from a single positional argument, + a pair of positional arguments, or the combination of keyword arguments. + + cycler(arg) + cycler(label1=itr1[, label2=iter2[, ...]]) + cycler(label, itr) + + Form 1 simply copies a given `Cycler` object. + + Form 2 composes a `Cycler` as an inner product of the + pairs of keyword arguments. In other words, all of the + iterables are cycled simultaneously, as if through zip(). + + Form 3 creates a `Cycler` from a label and an iterable. + This is useful for when the label cannot be a keyword argument + (e.g., an integer or a name that has a space in it). + + Parameters + ---------- + arg : Cycler + Copy constructor for Cycler (does a shallow copy of iterables). + + label : name + The property key. In the 2-arg form of the function, + the label can be any hashable object. In the keyword argument + form of the function, it must be a valid python identifier. + + itr : iterable + Finite length iterable of the property values. + Can be a single-property `Cycler` that would + be like a key change, but as a shallow copy. + + Returns + ------- + cycler : Cycler + New `Cycler` for the given property + + """ + if args and kwargs: + raise TypeError("cyl() can only accept positional OR keyword " + "arguments -- not both.") + + if len(args) == 1: + if not isinstance(args[0], Cycler): + raise TypeError("If only one positional argument given, it must " + " be a Cycler instance.") + return Cycler(args[0]) + elif len(args) == 2: + return _cycler(*args) + elif len(args) > 2: + raise TypeError("Only a single Cycler can be accepted as the lone " + "positional argument. Use keyword arguments instead.") + + if kwargs: + return reduce(add, (_cycler(k, v) for k, v in six.iteritems(kwargs))) + + raise TypeError("Must have at least a positional OR keyword arguments")
+ + +def _cycler(label, itr): + """ + Create a new `Cycler` object from a property name and + iterable of values. + + Parameters + ---------- + label : hashable + The property key. + + itr : iterable + Finite length iterable of the property values. + + Returns + ------- + cycler : Cycler + New `Cycler` for the given property + """ + if isinstance(itr, Cycler): + keys = itr.keys + if len(keys) != 1: + msg = "Can not create Cycler from a multi-property Cycler" + raise ValueError(msg) + + lab = keys.pop() + # Doesn't need to be a new list because + # _from_iter() will be creating that new list anyway. + itr = (v[lab] for v in itr) + + return Cycler._from_iter(label, itr) +
+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/index.html b/_modules/index.html new file mode 100644 index 0000000..eca944a --- /dev/null +++ b/_modules/index.html @@ -0,0 +1,85 @@ + + + + + + + + Overview: module code — cycler 0.10.0 documentation + + + + + + + + + + + + + + + + + +
+
+
+
+ +

All modules for which code is available

+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_sources/generated/cycler.Cycler.txt b/_sources/generated/cycler.Cycler.txt new file mode 100644 index 0000000..497b0b6 --- /dev/null +++ b/_sources/generated/cycler.Cycler.txt @@ -0,0 +1,31 @@ +cycler.Cycler +============= + +.. currentmodule:: cycler + +.. autoclass:: Cycler + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Cycler.__init__ + ~Cycler.change_key + ~Cycler.concat + ~Cycler.simplify + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Cycler.keys + + \ No newline at end of file diff --git a/_sources/generated/cycler.concat.txt b/_sources/generated/cycler.concat.txt new file mode 100644 index 0000000..69f54cf --- /dev/null +++ b/_sources/generated/cycler.concat.txt @@ -0,0 +1,6 @@ +cycler.concat +============= + +.. currentmodule:: cycler + +.. autofunction:: concat \ No newline at end of file diff --git a/_sources/generated/cycler.cycler.txt b/_sources/generated/cycler.cycler.txt new file mode 100644 index 0000000..70793f8 --- /dev/null +++ b/_sources/generated/cycler.cycler.txt @@ -0,0 +1,6 @@ +cycler.cycler +============= + +.. currentmodule:: cycler + +.. autofunction:: cycler \ No newline at end of file diff --git a/_sources/index.txt b/_sources/index.txt new file mode 100644 index 0000000..8b10f0d --- /dev/null +++ b/_sources/index.txt @@ -0,0 +1,407 @@ +.. currentmodule:: cycler + +=================== + Composable cycles +=================== + +.. htmlonly:: + + :Version: |version| + :Date: |today| + + +====== ==================================== +docs http://matplotlib.org/cycler +pypi https://pypi.python.org/pypi/Cycler +github https://github.com/matplotlib/cycler +====== ==================================== + + +:py:mod:`cycler` API +==================== + +.. autosummary:: + :toctree: generated/ + + cycler + Cycler + concat + +The public API of :py:mod:`cycler` consists of a class `Cycler`, a +factory function :func:`cycler`, and a concatenation function +:func:`concat`. The factory function provides a simple interface for +creating 'base' `Cycler` objects while the class takes care of the +composition and iteration logic. + + +`Cycler` Usage +============== + +Base +---- + +A single entry `Cycler` object can be used to easily +cycle over a single style. To create the `Cycler` use the :py:func:`cycler` +function to link a key/style/kwarg to series of values. The key must be +hashable (as it will eventually be used as the key in a :obj:`dict`). + +.. ipython:: python + + from __future__ import print_function + from cycler import cycler + + + color_cycle = cycler(color=['r', 'g', 'b']) + color_cycle + +The `Cycler` knows it's length and keys: + +.. ipython:: python + + + len(color_cycle) + color_cycle.keys + +Iterating over this object will yield a series of :obj:`dict` objects keyed on +the label + +.. ipython:: python + + for v in color_cycle: + print(v) + +`Cycler` objects can be passed as the argument to :func:`cycler` +which returns a new `Cycler` with a new label, but the same values. + +.. ipython:: python + + cycler(ec=color_cycle) + + +Iterating over a `Cycler` results in the finite list of entries, to +get an infinite cycle, call the `Cycler` object (a-la a generator) + +.. ipython:: python + + cc = color_cycle() + for j, c in zip(range(5), cc): + print(j, c) + + +Composition +----------- + +A single `Cycler` can just as easily be replaced by a single ``for`` +loop. The power of `Cycler` objects is that they can be composed to easily +create complex multi-key cycles. + +Addition +~~~~~~~~ + +Equal length `Cycler` s with different keys can be added to get the +'inner' product of two cycles + +.. ipython:: python + + lw_cycle = cycler(lw=range(1, 4)) + + wc = lw_cycle + color_cycle + +The result has the same length and has keys which are the union of the +two input `Cycler`'s. + +.. ipython:: python + + len(wc) + wc.keys + +and iterating over the result is the zip of the two input cycles + +.. ipython:: python + + for s in wc: + print(s) + +As with arithmetic, addition is commutative + +.. ipython:: python + + lw_c = lw_cycle + color_cycle + c_lw = color_cycle + lw_cycle + + for j, (a, b) in enumerate(zip(lw_c, c_lw)): + print('({j}) A: {A!r} B: {B!r}'.format(j=j, A=a, B=b)) + +For convenience, the :func:`cycler` function can have multiple +key-value pairs and will automatically compose them into a single +`Cycler` via addition + +.. ipython:: python + + wc = cycler(c=['r', 'g', 'b'], lw=range(3)) + + for s in wc: + print(s) + + +Multiplication +~~~~~~~~~~~~~~ + +Any pair of `Cycler` can be multiplied + +.. ipython:: python + + m_cycle = cycler(marker=['s', 'o']) + + m_c = m_cycle * color_cycle + +which gives the 'outer product' of the two cycles (same as +:func:`itertools.prod` ) + +.. ipython:: python + + len(m_c) + m_c.keys + for s in m_c: + print(s) + +Note that unlike addition, multiplication is not commutative (like +matrices) + +.. ipython:: python + + c_m = color_cycle * m_cycle + + for j, (a, b) in enumerate(zip(c_m, m_c)): + print('({j}) A: {A!r} B: {B!r}'.format(j=j, A=a, B=b)) + + + + +Integer Multiplication +~~~~~~~~~~~~~~~~~~~~~~ + +`Cycler` s can also be multiplied by integer values to increase the length. + +.. ipython:: python + + color_cycle * 2 + 2 * color_cycle + + +Concatenation +~~~~~~~~~~~~~ + +`Cycler` objects can be concatenated either via the :py:meth:`Cycler.concat` method + +.. ipython:: python + + color_cycle.concat(color_cycle) + +or the top-level :py:func:`concat` function + +.. ipython:: python + + from cycler import concat + concat(color_cycle, color_cycle) + + +Slicing +------- + +Cycles can be sliced with :obj:`slice` objects + +.. ipython:: python + + color_cycle[::-1] + color_cycle[:2] + color_cycle[1:] + +to return a sub-set of the cycle as a new `Cycler`. + +Inspecting the `Cycler` +----------------------- + +To inspect the values of the transposed `Cycler` use +the `Cycler.by_key` method: + +.. ipython:: python + + c_m.by_key() + +This `dict` can be mutated and used to create a new `Cycler` with +the updated values + +.. ipython:: python + + bk = c_m.by_key() + bk['color'] = ['green'] * len(c_m) + cycler(**bk) + + +Examples +-------- + +We can use `Cycler` instances to cycle over one or more ``kwarg`` to +`~matplotlib.axes.Axes.plot` : + +.. plot:: + :include-source: + + from cycler import cycler + from itertools import cycle + + fig, (ax1, ax2) = plt.subplots(1, 2, tight_layout=True, + figsize=(8, 4)) + x = np.arange(10) + + color_cycle = cycler(c=['r', 'g', 'b']) + + for i, sty in enumerate(color_cycle): + ax1.plot(x, x*(i+1), **sty) + + + for i, sty in zip(range(1, 5), cycle(color_cycle)): + ax2.plot(x, x*i, **sty) + + +.. plot:: + :include-source: + + from cycler import cycler + from itertools import cycle + + fig, (ax1, ax2) = plt.subplots(1, 2, tight_layout=True, + figsize=(8, 4)) + x = np.arange(10) + + color_cycle = cycler(c=['r', 'g', 'b']) + ls_cycle = cycler('ls', ['-', '--']) + lw_cycle = cycler('lw', range(1, 4)) + + sty_cycle = ls_cycle * (color_cycle + lw_cycle) + + for i, sty in enumerate(sty_cycle): + ax1.plot(x, x*(i+1), **sty) + + sty_cycle = (color_cycle + lw_cycle) * ls_cycle + + for i, sty in enumerate(sty_cycle): + ax2.plot(x, x*(i+1), **sty) + + +Persistent Cycles +----------------- + +It can be useful to associate a given label with a style via +dictionary lookup and to dynamically generate that mapping. This +can easily be accomplished using a `~collections.defaultdict` + +.. ipython:: python + + from cycler import cycler as cy + from collections import defaultdict + + cyl = cy('c', 'rgb') + cy('lw', range(1, 4)) + +To get a finite set of styles + +.. ipython:: python + + finite_cy_iter = iter(cyl) + dd_finite = defaultdict(lambda : next(finite_cy_iter)) + +or repeating + +.. ipython:: python + + loop_cy_iter = cyl() + dd_loop = defaultdict(lambda : next(loop_cy_iter)) + +This can be helpful when plotting complex data which has both a classification +and a label :: + + finite_cy_iter = iter(cyl) + styles = defaultdict(lambda : next(finite_cy_iter)) + for group, label, data in DataSet: + ax.plot(data, label=label, **styles[group]) + +which will result in every ``data`` with the same ``group`` being plotted with +the same style. + +Exceptions +---------- + + +A :obj:`ValueError` is raised if unequal length `Cycler` s are added together + +.. ipython:: python + :okexcept: + + cycler(c=['r', 'g', 'b']) + cycler(ls=['-', '--']) + +or if two cycles which have overlapping keys are composed + +.. ipython:: python + :okexcept: + + color_cycle = cycler(c=['r', 'g', 'b']) + + color_cycle + color_cycle + + +Motivation +========== + + +When plotting more than one line it is common to want to be able to cycle over one +or more artist styles. For simple cases than can be done with out too much trouble: + +.. plot:: + :include-source: + + fig, ax = plt.subplots(tight_layout=True) + x = np.linspace(0, 2*np.pi, 1024) + + for i, (lw, c) in enumerate(zip(range(4), ['r', 'g', 'b', 'k'])): + ax.plot(x, np.sin(x - i * np.pi / 4), + label=r'$\phi = {{{0}}} \pi / 4$'.format(i), + lw=lw + 1, + c=c) + + ax.set_xlim([0, 2*np.pi]) + ax.set_title(r'$y=\sin(\theta + \phi)$') + ax.set_ylabel(r'[arb]') + ax.set_xlabel(r'$\theta$ [rad]') + + ax.legend(loc=0) + +However, if you want to do something more complicated: + +.. plot:: + :include-source: + + fig, ax = plt.subplots(tight_layout=True) + x = np.linspace(0, 2*np.pi, 1024) + + for i, (lw, c) in enumerate(zip(range(4), ['r', 'g', 'b', 'k'])): + if i % 2: + ls = '-' + else: + ls = '--' + ax.plot(x, np.sin(x - i * np.pi / 4), + label=r'$\phi = {{{0}}} \pi / 4$'.format(i), + lw=lw + 1, + c=c, + ls=ls) + + ax.set_xlim([0, 2*np.pi]) + ax.set_title(r'$y=\sin(\theta + \phi)$') + ax.set_ylabel(r'[arb]') + ax.set_xlabel(r'$\theta$ [rad]') + + ax.legend(loc=0) + +the plotting logic can quickly become very involved. To address this and allow easy +cycling over arbitrary ``kwargs`` the `Cycler` class, a composable +kwarg iterator, was developed. diff --git a/_static/ajax-loader.gif b/_static/ajax-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..61faf8cab23993bd3e1560bff0668bd628642330 GIT binary patch literal 673 zcmZ?wbhEHb6krfw_{6~Q|Nno%(3)e{?)x>&1u}A`t?OF7Z|1gRivOgXi&7IyQd1Pl zGfOfQ60;I3a`F>X^fL3(@);C=vM_KlFfb_o=k{|A33hf2a5d61U}gjg=>Rd%XaNQW zW@Cw{|b%Y*pl8F?4B9 zlo4Fz*0kZGJabY|>}Okf0}CCg{u4`zEPY^pV?j2@h+|igy0+Kz6p;@SpM4s6)XEMg z#3Y4GX>Hjlml5ftdH$4x0JGdn8~MX(U~_^d!Hi)=HU{V%g+mi8#UGbE-*ao8f#h+S z2a0-5+vc7MU$e-NhmBjLIC1v|)9+Im8x1yacJ7{^tLX(ZhYi^rpmXm0`@ku9b53aN zEXH@Y3JaztblgpxbJt{AtE1ad1Ca>{v$rwwvK(>{m~Gf_=-Ro7Fk{#;i~+{{>QtvI yb2P8Zac~?~=sRA>$6{!(^3;ZP0TPFR(G_-UDU(8Jl0?(IXu$~#4A!880|o%~Al1tN literal 0 HcmV?d00001 diff --git a/_static/alabaster.css b/_static/alabaster.css new file mode 100644 index 0000000..bc420a4 --- /dev/null +++ b/_static/alabaster.css @@ -0,0 +1,593 @@ + + + + + + + + + + + + + + + + + +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif; + font-size: 17px; + background-color: white; + color: #000; + margin: 0; + padding: 0; +} + +div.document { + width: 940px; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.sphinxsidebar { + width: 220px; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #ffffff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +div.body > .section { + text-align: left; +} + +div.footer { + width: 940px; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + + +div.relations { + display: none; +} + + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebar { + font-size: 14px; + line-height: 1.5; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0; + margin: -10px 0 0 0px; + text-align: center; +} + +div.sphinxsidebarwrapper h1.logo { + margin-top: -10px; + text-align: center; + margin-bottom: 5px; + text-align: left; +} + +div.sphinxsidebarwrapper h1.logo-name { + margin-top: 0px; +} + +div.sphinxsidebarwrapper p.blurb { + margin-top: 0; + font-style: normal; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: 'Garamond', 'Georgia', serif; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar ul li.toctree-l1 > a { + font-size: 120%; +} + +div.sphinxsidebar ul li.toctree-l2 > a { + font-size: 110%; +} + +div.sphinxsidebar input { + border: 1px solid #CCC; + font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif; + font-size: 1em; +} + +div.sphinxsidebar hr { + border: none; + height: 1px; + color: #AAA; + background: #AAA; + + text-align: left; + margin-left: 0; + width: 50%; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: 'Garamond', 'Georgia', serif; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #DDD; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; + background: #EAEAEA; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + margin: 20px 0px; + padding: 10px 30px; + background-color: #FCC; + border: 1px solid #FAA; +} + +div.admonition tt.xref, div.admonition a tt { + border-bottom: 1px solid #fafafa; +} + +dd div.admonition { + margin-left: -60px; + padding-left: 60px; +} + +div.admonition p.admonition-title { + font-family: 'Garamond', 'Georgia', serif; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + background-color: white; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.note { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.seealso { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.topic { + background-color: #eee; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt, code { + font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +.hll { + background-color: #FFC; + margin: 0 -12px; + padding: 0 12px; + display: block; +} + +img.screenshot { +} + +tt.descname, tt.descclassname, code.descname, code.descclassname { + font-size: 0.95em; +} + +tt.descname, code.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #eee; + -webkit-box-shadow: 2px 2px 4px #eee; + box-shadow: 2px 2px 4px #eee; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #eee; + -webkit-box-shadow: 2px 2px 4px #eee; + box-shadow: 2px 2px 4px #eee; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #EEE; + background: #FDFDFD; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.field-list p { + margin-bottom: 0.8em; +} + +table.footnote td.label { + width: 0px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #EEE; + padding: 7px 30px; + margin: 15px 0px; + line-height: 1.3em; +} + +dl pre, blockquote pre, li pre { + margin-left: 0; + padding-left: 30px; +} + +dl dl pre { + margin-left: -90px; + padding-left: 90px; +} + +tt, code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, code.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid white; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt, a:hover code { + background: #EEE; +} + + +@media screen and (max-width: 870px) { + + div.sphinxsidebar { + display: none; + } + + div.document { + width: 100%; + + } + + div.documentwrapper { + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + } + + div.bodywrapper { + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + margin-left: 0; + } + + ul { + margin-left: 0; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .bodywrapper { + margin: 0; + } + + .footer { + width: auto; + } + + .github { + display: none; + } + + + +} + + + +@media screen and (max-width: 875px) { + + body { + margin: 0; + padding: 20px 30px; + } + + div.documentwrapper { + float: none; + background: white; + } + + div.sphinxsidebar { + display: block; + float: none; + width: 102.5%; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: #FFF; + } + + div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, + div.sphinxsidebar h3 a { + color: white; + } + + div.sphinxsidebar a { + color: #AAA; + } + + div.sphinxsidebar p.logo { + display: none; + } + + div.document { + width: 100%; + margin: 0; + } + + div.footer { + display: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + padding: 0; + } + + .rtd_doc_footer { + display: none; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .footer { + width: auto; + } + + .github { + display: none; + } +} + + +/* misc. */ + +.revsys-inline { + display: none!important; +} + +/* Make nested-list/multi-paragraph items look better in Releases changelog + * pages. Without this, docutils' magical list fuckery causes inconsistent + * formatting between different release sub-lists. + */ +div#changelog > div.section > ul > li > p:only-child { + margin-bottom: 0; +} + +/* Hide fugly table cell borders in ..bibliography:: directive output */ +table.docutils.citation, table.docutils.citation td, table.docutils.citation th { + border: none; + /* Below needed in some edge cases; if not applied, bottom shadows appear */ + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} \ No newline at end of file diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 0000000..c89fc7e --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,599 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox input[type="text"] { + width: 170px; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + width: 30px; +} + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable dl, table.indextable dd { + margin-top: 0; + margin-bottom: 0; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- general body styles --------------------------------------------------- */ + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.field-list ul { + padding-left: 1em; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.field-list td, table.field-list th { + border: 0 !important; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, .highlighted { + background-color: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +div.code-block-caption { + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +div.code-block-caption + div > div.highlight > pre { + margin-top: 0; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + padding: 1em 1em 0; +} + +div.literal-block-wrapper div.highlight { + margin: 0; +} + +code.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +code.descclassname { + background-color: transparent; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/comment-bright.png b/_static/comment-bright.png new file mode 100644 index 0000000000000000000000000000000000000000..551517b8c83b76f734ff791f847829a760ad1903 GIT binary patch literal 3500 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 A2LJ#7 literal 0 HcmV?d00001 diff --git a/_static/comment.png b/_static/comment.png new file mode 100644 index 0000000000000000000000000000000000000000..92feb52b8824c6b0f59b658b1196c61de9162a95 GIT binary patch literal 3445 zcmV-*4T|!KP)Oz@Z0f2-7z;ux~O9+4z06=<WDR*FRcSTFz- zW=q650N5=6FiBTtNC2?60Km==3$g$R3;-}uh=nNt1bYBr$Ri_o0EC$U6h`t_Jn<{8 z5a%iY0C<_QJh>z}MS)ugEpZ1|S1ukX&Pf+56gFW3VVXcL!g-k)GJ!M?;PcD?0HBc- z5#WRK{dmp}uFlRjj{U%*%WZ25jX z{P*?XzTzZ-GF^d31o+^>%=Ap99M6&ogks$0k4OBs3;+Bb(;~!4V!2o<6ys46agIcq zjPo+3B8fthDa9qy|77CdEc*jK-!%ZRYCZvbku9iQV*~a}ClFY4z~c7+0P?$U!PF=S z1Au6Q;m>#f??3%Vpd|o+W=WE9003S@Bra6Svp>fO002awfhw>;8}z{#EWidF!3EsG z3;bXU&9EIRU@z1_9W=mEXoiz;4lcq~xDGvV5BgyU zp1~-*fe8db$Osc*A=-!mVv1NJjtCc-h4>-CNCXm#Bp}I%6j35eku^v$Qi@a{RY)E3 zJ#qp$hg?Rwkvqr$GJ^buyhkyVfwECO)C{#lxu`c9ghrwZ&}4KmnvWKso6vH!8a<3Q zq36)6Xb;+tK10Vaz~~qUGsJ8#F2=(`u{bOVlVi)VBCHIn#u~6ztOL7=^<&SmcLWlF zMZgI*1b0FpVIDz9SWH+>*hr`#93(Um+6gxa1B6k+CnA%mOSC4s5&6UzVlpv@SV$}* z))J2sFA#f(L&P^E5{W}HC%KRUNwK6<(h|}}(r!{C=`5+6G)NjFlgZj-YqAG9lq?`C z$c5yc>d>VnA`E_*3F2Qp##d8RZb=H01_mm@+|Cqnc9PsG(F5HIG_C zt)aG3uTh7n6Et<2In9F>NlT@zqLtGcXcuVrX|L#Xx)I%#9!{6gSJKPrN9dR61N3(c z4Tcqi$B1Vr8Jidf7-t!G7_XR2rWwr)$3XQ?}=hpK0&Z&W{| zep&sA23f;Q!%st`QJ}G3cbou<7-yIK2z4nfCCCtN2-XOGSWo##{8Q{ATurxr~;I`ytDs%xbip}RzP zziy}Qn4Z2~fSycmr`~zJ=lUFdFa1>gZThG6M+{g7vkW8#+YHVaJjFF}Z#*3@$J_By zLtVo_L#1JrVVB{Ak-5=4qt!-@Mh}c>#$4kh<88)m#-k<%CLtzEP3leVno>={htGUuD;o7bD)w_sX$S}eAxwzy?UvgBH(S?;#HZiQMoS*2K2 zT3xe7t(~nU*1N5{rxB;QPLocnp4Ml>u<^FZwyC!nu;thW+pe~4wtZn|Vi#w(#jeBd zlf9FDx_yoPJqHbk*$%56S{;6Kv~mM9!g3B(KJ}#RZ#@)!hR|78Dq|Iq-afF%KE1Brn_fm;Im z_u$xr8UFki1L{Ox>G0o)(&RAZ;=|I=wN2l97;cLaHH6leTB-XXa*h%dBOEvi`+x zi?=Txl?TadvyiL>SuF~-LZ;|cS}4~l2eM~nS7yJ>iOM;atDY;(?aZ^v+mJV$@1Ote z62cPUlD4IWOIIx&SmwQ~YB{nzae3Pc;}r!fhE@iwJh+OsDs9zItL;~pu715HdQEGA zUct(O!LkCy1<%NCg+}G`0PgpNm-?d@-hMgNe6^V+j6x$b<6@S<$+<4_1hi}Ti zncS4LsjI}fWY1>OX6feMEuLErma3QLmkw?X+1j)X-&VBk_4Y;EFPF_I+q;9dL%E~B zJh;4Nr^(LEJ3myURP{Rblsw%57T)g973R8o)DE9*xN#~;4_o$q%o z4K@u`jhx2fBXC4{U8Qn{*%*B$Ge=nny$HAYq{=vy|sI0 z_vss+H_qMky?OB#|JK!>IX&II^LlUh#rO5!7TtbwC;iULyV-Xq?ybB}ykGP{?LpZ? z-G|jbTmIbG@7#ZCz;~eY(cDM(28Dyq{*m>M4?_iynUBkc4TkHUI6gT!;y-fz>HMcd z&t%Ugo)`Y2{>!cx7B7DI)$7;J(U{Spm-3gBzioV_{p!H$8L!*M!p0uH$#^p{Ui4P` z?ZJ24cOCDe-w#jZd?0@)|7iKK^;6KN`;!@ylm7$*nDhK&GcDTy000JJOGiWi{{a60 z|De66lK=n!32;bRa{vGf6951U69E94oEQKA00(qQO+^RV2nzr)JMUJvzW@LNr%6OX zR5;6Zk;`k`RTRfR-*ac2G}PGmXsUu>6ce?Lsn$m^3Q`48f|TwQ+_-Qh=t8Ra7nE)y zf@08(pjZ@22^EVjG*%30TJRMkBUC$WqZ73uoiv&J=APqX;!v%AH}`Vx`999MVjXwy z{f1-vh8P<=plv&cZ>p5jjX~Vt&W0e)wpw1RFRuRdDkwlKb01tp5 zP=trFN0gH^|L4jJkB{6sCV;Q!ewpg-D&4cza%GQ*b>R*=34#dW;ek`FEiB(vnw+U# zpOX5UMJBhIN&;D1!yQoIAySC!9zqJmmfoJqmQp}p&h*HTfMh~u9rKic2oz3sNM^#F zBIq*MRLbsMt%y{EHj8}LeqUUvoxf0=kqji62>ne+U`d#%J)abyK&Y`=eD%oA!36<)baZyK zXJh5im6umkS|_CSGXips$nI)oBHXojzBzyY_M5K*uvb0_9viuBVyV%5VtJ*Am1ag# zczbv4B?u8j68iOz<+)nDu^oWnL+$_G{PZOCcOGQ?!1VCefves~rfpaEZs-PdVYMiV z98ElaJ2}7f;htSXFY#Zv?__sQeckE^HV{ItO=)2hMQs=(_ Xn!ZpXD%P(H00000NkvXXu0mjf= 0 && !jQuery(node.parentNode).hasClass(className)) { + var span = document.createElement("span"); + span.className = className; + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this); + }); + } + } + return this.each(function() { + highlight(this); + }); +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated == 'undefined') + return string; + return (typeof translated == 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated == 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) == 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this == '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/_static/down-pressed.png b/_static/down-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..7c30d004b71b32bb2fc06b3bd4dc8278baab0946 GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~&H|6fVxZ#d zAk65bF}ngN$X?><>&kwMor^(NtW3yF87Slz;1l8sq&LUMQwy<>&kwMol#tg zK_ydLmzem(vK1>2TzUEGl*lj!N<7$PCrdoWV0 z$w0*Ap!bZ4if7h;-yfL#MC0e;t{xY+$l~DX2EWYIPet1cohf^BdG+jXhtuq&W-0|c zKPmlKv-7OTjb}T)7@fTGd9y~u4{g8An;)c2U=w=nwQ7}zVDc>n+a literal 0 HcmV?d00001 diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..254c60bfbe2715ae2edca48ebccfd074deb8031d GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJXMsm#F#`j)FbFd;%$g$s6l5>) z^mS#w%FV~i&ZxO9L3Zxqw8>dd4I&zcKG){Yx14xKr0

ZQJ$m%mv17-NAAj}g)$7-<-@JMA z_U+TRK=AR}yLa#2zkmPX!-tO_KYsf3>Hq)#%qnY_1Fd8&3GxeO2wSmci|LJf=|BO- zByV>Yl`U*PX977no-U3d5|XS39sLdkFt8q|+|QqL_#ErUf6I%zFA7b%b>3$hFGGFs zc72AL|61pRJ1(+5wNdg|xP#*`gQ~lOnTFKiIjl#S3)+QV=h{~`9{M=hx#5uZ&-tIF sG!8onYS_8EFr8v&@CavkqYey&g)1epR*Fkm0PSV)boFyt=akR{044O6bN~PV literal 0 HcmV?d00001 diff --git a/_static/jquery-1.11.1.js b/_static/jquery-1.11.1.js new file mode 100644 index 0000000..d4b67f7 --- /dev/null +++ b/_static/jquery-1.11.1.js @@ -0,0 +1,10308 @@ +/*! + * jQuery JavaScript Library v1.11.1 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-05-01T17:42Z + */ + +(function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper window is present, + // execute the factory and get jQuery + // For environments that do not inherently posses a window with a document + // (such as Node.js), expose a jQuery-making factory as module.exports + // This accentuates the need for the creation of a real window + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Can't do this because several apps including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +// Support: Firefox 18+ +// + +var deletedIds = []; + +var slice = deletedIds.slice; + +var concat = deletedIds.concat; + +var push = deletedIds.push; + +var indexOf = deletedIds.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var support = {}; + + + +var + version = "1.11.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android<4.1, IE<9 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: deletedIds.sort, + splice: deletedIds.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var src, copyIsArray, copy, name, options, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + /* jshint eqeqeq: false */ + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0; + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + isPlainObject: function( obj ) { + var key; + + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Support: IE<9 + // Handle iteration over inherited properties before own properties. + if ( support.ownLast ) { + for ( key in obj ) { + return hasOwn.call( obj, key ); + } + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call(obj) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && jQuery.trim( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var value, + i = 0, + length = obj.length, + isArray = isArraylike( obj ); + + if ( args ) { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } + } + + return obj; + }, + + // Support: Android<4.1, IE<9 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArraylike( Object(arr) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( indexOf ) { + return indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + while ( j < len ) { + first[ i++ ] = second[ j++ ]; + } + + // Support: IE<9 + // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists) + if ( len !== len ) { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var args, proxy, tmp; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: function() { + return +( new Date() ); + }, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +function isArraylike( obj ) { + var length = obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.nodeType === 1 && length ) { + return true; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v1.10.19 + * http://sizzlejs.com/ + * + * Copyright 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-04-18 + */ +(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" + -(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 + strundefined = typeof undefined, + 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 if we can't use a native one + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[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 + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + characterEncoding + ")(?:\\((" + + // 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 + 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( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "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 ); + }; + +// 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 match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( documentIsHTML && !seed ) { + + // Shortcuts + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document (jQuery #6963) + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // QSA path + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + 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 = attrs.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 !== strundefined && 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, + doc = node ? node.ownerDocument || node : preferredDoc, + parent = doc.defaultView; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + + // Support tests + documentIsHTML = !isXML( doc ); + + // Support: IE>8 + // If iframe document is assigned to "document" variable and if iframe has been reloaded, + // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 + // IE6-8 do not support the defaultView property so parent will be undefined + if ( parent && parent !== parent.top ) { + // IE11 does not have attachEvent, so all must suffer + if ( parent.addEventListener ) { + parent.addEventListener( "unload", function() { + setDocument(); + }, false ); + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", function() { + setDocument(); + }); + } + } + + /* 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( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Check if getElementsByClassName can be trusted + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { + div.innerHTML = "

"; + + // Support: Safari<4 + // Catch class over-caching + div.firstChild.className = "i"; + // Support: Opera<10 + // Catch gEBCN failure to find non-leading classes + return div.getElementsByClassName("i").length === 2; + }); + + // 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 !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [ 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 !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + 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 !== strundefined && 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( doc.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 + div.innerHTML = ""; + + // 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("[msallowclip^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // 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"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = doc.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 does not implement inclusive descendent + // 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 === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( 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 === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( 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 doc; +}; + +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 && + ( !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 !== strundefined && 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 + " " ).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, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + 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 + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && 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 ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // 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 ) { + (node[ expando ] || (node[ expando ] = {}))[ 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.call( 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 ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + 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, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir 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 ] = {}); + if ( (oldCache = outerCache[ 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 + outerCache[ 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.call( 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.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + 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; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, 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 ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + 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 no seed and only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root 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, + 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 +// 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 = ""; + 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 = ""; + 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; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + + +var rneedsContext = jQuery.expr.match.needsContext; + +var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + }); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + }); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not; + }); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + })); +}; + +jQuery.fn.extend({ + find: function( selector ) { + var i, + ret = [], + self = this, + len = self.length; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + filter: function( selector ) { + return this.pushStack( winnow(this, selector || [], false) ); + }, + not: function( selector ) { + return this.pushStack( winnow(this, selector || [], true) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +}); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + + // scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[1], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return typeof rootjQuery.ready !== "undefined" ? + rootjQuery.ready( selector ) : + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.extend({ + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +jQuery.fn.extend({ + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { + // Always skip document fragments + if ( cur.nodeType < 11 && (pos ? + pos.index(cur) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector(cur, selectors)) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.unique( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + if ( this.length > 1 ) { + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + ret = jQuery.unique( ret ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + } + + return this.pushStack( ret ); + }; +}); +var rnotwhite = (/\S+/g); + + + +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // First callback to fire (used internally by add and fireWith) + firingStart, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); + }, + // Remove all callbacks from the list + empty: function() { + list = []; + firingLength = 0; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( list && ( !fired || stack ) ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ](function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); + } + }); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + + } else if ( !(--remaining) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); + + +// The deferred used on DOM ready +var readyList; + +jQuery.fn.ready = function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; +}; + +jQuery.extend({ + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + jQuery( document ).off( "ready" ); + } + } +}); + +/** + * Clean-up method for dom ready events + */ +function detach() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + + } else { + document.detachEvent( "onreadystatechange", completed ); + window.detachEvent( "onload", completed ); + } +} + +/** + * The ready event handler and self cleanup method + */ +function completed() { + // readyState === "complete" is good enough for us to call the dom ready in oldIE + if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { + detach(); + jQuery.ready(); + } +} + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed, false ); + + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", completed ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", completed ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} + + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } + + // detach all dom ready events + detach(); + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); +}; + + +var strundefined = typeof undefined; + + + +// Support: IE<9 +// Iteration over object's inherited properties before its own +var i; +for ( i in jQuery( support ) ) { + break; +} +support.ownLast = i !== "0"; + +// Note: most support tests are defined in their respective modules. +// false until the test is run +support.inlineBlockNeedsLayout = false; + +// Execute ASAP in case we need to set body.style.zoom +jQuery(function() { + // Minified: var a,b,c,d + var val, div, body, container; + + body = document.getElementsByTagName( "body" )[ 0 ]; + if ( !body || !body.style ) { + // Return for frameset docs that don't have a body + return; + } + + // Setup + div = document.createElement( "div" ); + container = document.createElement( "div" ); + container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; + body.appendChild( container ).appendChild( div ); + + if ( typeof div.style.zoom !== strundefined ) { + // Support: IE<8 + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1"; + + support.inlineBlockNeedsLayout = val = div.offsetWidth === 3; + if ( val ) { + // Prevent IE 6 from affecting layout for positioned elements #11048 + // Prevent IE from shrinking the body in IE 7 mode #12869 + // Support: IE<8 + body.style.zoom = 1; + } + } + + body.removeChild( container ); +}); + + + + +(function() { + var div = document.createElement( "div" ); + + // Execute the test only if not already executed in another module. + if (support.deleteExpando == null) { + // Support: IE<9 + support.deleteExpando = true; + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + } + + // Null elements to avoid leaks in IE. + div = null; +})(); + + +/** + * Determines whether an object can have data + */ +jQuery.acceptData = function( elem ) { + var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ], + nodeType = +elem.nodeType || 1; + + // Do not set data on non-element DOM nodes because it will not be cleared (#8335). + return nodeType !== 1 && nodeType !== 9 ? + false : + + // Nodes accept data unless otherwise specified; rejection can be conditional + !noData || noData !== true && elem.getAttribute("classid") === noData; +}; + + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /([A-Z])/g; + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + +function internalData( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var ret, thisCache, + internalKey = jQuery.expando, + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + // Avoid exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( typeof name === "string" ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; +} + +function internalRemoveData( elem, name, pvt ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } else { + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = name.concat( jQuery.map( name, jQuery.camelCase ) ); + } + + i = name.length; + while ( i-- ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + /* jshint eqeqeq: false */ + } else if ( support.deleteExpando || cache != cache.window ) { + /* jshint eqeqeq: true */ + delete cache[ id ]; + + // When all else fails, null + } else { + cache[ id ] = null; + } +} + +jQuery.extend({ + cache: {}, + + // The following elements (space-suffixed to avoid Object.prototype collisions) + // throw uncatchable exceptions if you attempt to set expando properties + noData: { + "applet ": true, + "embed ": true, + // ...but Flash objects (which have this classid) *can* handle expandos + "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data ) { + return internalData( elem, name, data ); + }, + + removeData: function( elem, name ) { + return internalRemoveData( elem, name ); + }, + + // For internal use only. + _data: function( elem, name, data ) { + return internalData( elem, name, data, true ); + }, + + _removeData: function( elem, name ) { + return internalRemoveData( elem, name, true ); + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var i, name, data, + elem = this[0], + attrs = elem && elem.attributes; + + // Special expections of .data basically thwart jQuery.access, + // so implement the relevant behavior ourselves + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice(5) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + return arguments.length > 1 ? + + // Sets one value + this.each(function() { + jQuery.data( this, key, value ); + }) : + + // Gets one value + // Try to fetch any internally stored data first + elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined; + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + + +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery._removeData( elem, type + "queue" ); + jQuery._removeData( elem, key ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHidden = function( elem, el ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); + }; + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + length = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < length; i++ ) { + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; +}; +var rcheckableType = (/^(?:checkbox|radio)$/i); + + + +(function() { + // Minified: var a,b,c + var input = document.createElement( "input" ), + div = document.createElement( "div" ), + fragment = document.createDocumentFragment(); + + // Setup + div.innerHTML = "
a"; + + // IE strips leading whitespace when .innerHTML is used + support.leadingWhitespace = div.firstChild.nodeType === 3; + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + support.tbody = !div.getElementsByTagName( "tbody" ).length; + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + support.htmlSerialize = !!div.getElementsByTagName( "link" ).length; + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + support.html5Clone = + document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav>"; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + input.type = "checkbox"; + input.checked = true; + fragment.appendChild( input ); + support.appendChecked = input.checked; + + // Make sure textarea (and checkbox) defaultValue is properly cloned + // Support: IE6-IE11+ + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // #11217 - WebKit loses check when the name is after the checked attribute + fragment.appendChild( div ); + div.innerHTML = ""; + + // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 + // old WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<9 + // Opera does not clone events (and typeof div.attachEvent === undefined). + // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() + support.noCloneEvent = true; + if ( div.attachEvent ) { + div.attachEvent( "onclick", function() { + support.noCloneEvent = false; + }); + + div.cloneNode( true ).click(); + } + + // Execute the test only if not already executed in another module. + if (support.deleteExpando == null) { + // Support: IE<9 + support.deleteExpando = true; + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + } +})(); + + +(function() { + var i, eventName, + div = document.createElement( "div" ); + + // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event) + for ( i in { submit: true, change: true, focusin: true }) { + eventName = "on" + i; + + if ( !(support[ i + "Bubbles" ] = eventName in window) ) { + // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) + div.setAttribute( eventName, "t" ); + support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false; + } + } + + // Null elements to avoid leaks in IE. + div = null; +})(); + + +var rformElems = /^(?:input|select|textarea)$/i, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + var tmp, events, t, handleObjIn, + special, eventHandle, handleObj, + handlers, type, namespaces, origType, + elemData = jQuery._data( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !(events = elemData.events) ) { + events = elemData.events = {}; + } + if ( !(eventHandle = elemData.handle) ) { + eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !(handlers = events[ type ]) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + var j, handleObj, tmp, + origCount, t, events, + special, handlers, type, + namespaces, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery._removeData( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + var handle, ontype, cur, + bubbleType, special, tmp, i, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf(":") < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join("."); + event.namespace_re = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === (elem.ownerDocument || document) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && jQuery.acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && + jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + try { + elem[ type ](); + } catch ( e ) { + // IE<9 dies on focus/blur to hidden element (#1486,#12518) + // only reproducible on winXP IE8 native, not IE9 in IE8 mode + } + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, ret, handleObj, matched, j, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( (event.result = ret) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var sel, handleObj, matches, i, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + // Black-hole SVG instance trees (#13180) + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + /* jshint eqeqeq: false */ + for ( ; cur != this; cur = cur.parentNode || this ) { + /* jshint eqeqeq: true */ + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, handlers: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: IE<9 + // Fix target property (#1925) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Support: Chrome 23+, Safari? + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Support: IE<9 + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) + event.metaKey = !!event.metaKey; + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var body, eventDoc, doc, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + try { + this.focus(); + return false; + } catch ( e ) { + // Support: IE<9 + // If we error on focus to hidden element (#1486, #12518), + // let .trigger() run the handlers + } + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === strundefined ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + // Support: IE < 9, Android < 4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + if ( !e ) { + return; + } + + // If preventDefault exists, run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // Support: IE + // Otherwise set the returnValue property of the original event to false + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + if ( !e ) { + return; + } + // If stopPropagation exists, run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + + // Support: IE + // Set the cancelBubble property of the original event to true + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && e.stopImmediatePropagation ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "submitBubbles" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "submitBubbles", true ); + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "changeBubbles", true ); + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = jQuery._data( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + jQuery._data( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = jQuery._data( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + jQuery._removeData( doc, fix ); + } else { + jQuery._data( doc, fix, attaches ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var type, origFn; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + var elem = this[0]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +}); + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /\s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
", "
" ], + area: [ 1, "", "" ], + param: [ 1, "", "" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + col: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, + // unless wrapped in a div with non-breaking characters in front of it. + _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
", "
" ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +function getAll( context, tag ) { + var elems, elem, + i = 0, + found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) : + undefined; + + if ( !found ) { + for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { + if ( !tag || jQuery.nodeName( elem, tag ) ) { + found.push( elem ); + } else { + jQuery.merge( found, getAll( elem, tag ) ); + } + } + } + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], found ) : + found; +} + +// Used in buildFragment, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } +} + +// Support: IE<8 +// Manipulating tables requires a tbody +function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName("tbody")[0] || + elem.appendChild( elem.ownerDocument.createElement("tbody") ) : + elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + if ( match ) { + elem.type = match[1]; + } else { + elem.removeAttribute("type"); + } + return elem; +} + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var elem, + i = 0; + for ( ; (elem = elems[i]) != null; i++ ) { + jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); + } +} + +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function fixCloneNodeIssues( src, dest ) { + var nodeName, e, data; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + nodeName = dest.nodeName.toLowerCase(); + + // IE6-8 copies events bound via attachEvent when using cloneNode. + if ( !support.noCloneEvent && dest[ jQuery.expando ] ) { + data = jQuery._data( dest ); + + for ( e in data.events ) { + jQuery.removeEvent( dest, e, data.handle ); + } + + // Event data gets referenced instead of copied if the expando gets copied too + dest.removeAttribute( jQuery.expando ); + } + + // IE blanks contents when cloning scripts, and tries to evaluate newly-set text + if ( nodeName === "script" && dest.text !== src.text ) { + disableScript( dest ).text = src.text; + restoreScript( dest ); + + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + } else if ( nodeName === "object" ) { + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.defaultSelected = dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var destElements, node, clone, i, srcElements, + inPage = jQuery.contains( elem.ownerDocument, elem ); + + if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( (!support.noCloneEvent || !support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + // Fix all IE cloning issues + for ( i = 0; (node = srcElements[i]) != null; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + fixCloneNodeIssues( node, destElements[i] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0; (node = srcElements[i]) != null; i++ ) { + cloneCopyEvent( node, destElements[i] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + destElements = srcElements = node = null; + + // Return the cloned set + return clone; + }, + + buildFragment: function( elems, context, scripts, selection ) { + var j, elem, contains, + tmp, tag, tbody, wrap, + l = elems.length, + + // Ensure a safe fragment + safe = createSafeFragment( context ), + + nodes = [], + i = 0; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || safe.appendChild( context.createElement("div") ); + + // Deserialize a standard representation + tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + + tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; + + // Descend through wrappers to the right content + j = wrap[0]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Manually add leading whitespace removed by IE + if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); + } + + // Remove IE's autoinserted from table fragments + if ( !support.tbody ) { + + // String was a , *may* have spurious + elem = tag === "table" && !rtbody.test( elem ) ? + tmp.firstChild : + + // String was a bare or + wrap[1] === "
" && !rtbody.test( elem ) ? + tmp : + 0; + + j = elem && elem.childNodes.length; + while ( j-- ) { + if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { + elem.removeChild( tbody ); + } + } + } + + jQuery.merge( nodes, tmp.childNodes ); + + // Fix #12392 for WebKit and IE > 9 + tmp.textContent = ""; + + // Fix #12392 for oldIE + while ( tmp.firstChild ) { + tmp.removeChild( tmp.firstChild ); + } + + // Remember the top-level container for proper cleanup + tmp = safe.lastChild; + } + } + } + + // Fix #11356: Clear elements from fragment + if ( tmp ) { + safe.removeChild( tmp ); + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !support.appendChecked ) { + jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); + } + + i = 0; + while ( (elem = nodes[ i++ ]) ) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( safe.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( (elem = tmp[ j++ ]) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + tmp = null; + + return safe; + }, + + cleanData: function( elems, /* internal */ acceptData ) { + var elem, type, id, data, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = support.deleteExpando, + special = jQuery.event.special; + + for ( ; (elem = elems[i]) != null; i++ ) { + if ( acceptData || jQuery.acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; + + } else if ( typeof elem.removeAttribute !== strundefined ) { + elem.removeAttribute( internalKey ); + + } else { + elem[ internalKey ] = null; + } + + deletedIds.push( id ); + } + } + } + } + } +}); + +jQuery.fn.extend({ + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + append: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + }); + }, + + before: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + }); + }, + + after: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + }); + }, + + remove: function( selector, keepData /* Internal Use Only */ ) { + var elem, + elems = selector ? jQuery.filter( selector, this ) : this, + i = 0; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem ) ); + } + + if ( elem.parentNode ) { + if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { + setGlobalEval( getAll( elem, "script" ) ); + } + elem.parentNode.removeChild( elem ); + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + // If this is a select, ensure that it displays empty (#12336) + // Support: IE<9 + if ( elem.options && jQuery.nodeName( elem, "select" ) ) { + elem.options.length = 0; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map(function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1>" ); + + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var arg = arguments[ 0 ]; + + // Make the changes, replacing each context element with the new content + this.domManip( arguments, function( elem ) { + arg = this.parentNode; + + jQuery.cleanData( getAll( this ) ); + + if ( arg ) { + arg.replaceChild( elem, this ); + } + }); + + // Force removal if there was no new content (e.g., from empty arguments) + return arg && (arg.length || arg.nodeType) ? this : this.remove(); + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, callback ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var first, node, hasScripts, + scripts, doc, fragment, + i = 0, + l = this.length, + set = this, + iNoClone = l - 1, + value = args[0], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return this.each(function( index ) { + var self = set.eq( index ); + if ( isFunction ) { + args[0] = value.call( this, index, self.html() ); + } + self.domManip( args, callback ); + }); + } + + if ( l ) { + fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( this[i], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { + + if ( node.src ) { + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); + } + } + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + } + } + + return this; + } +}); + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone(true); + jQuery( insert[i] )[ original ]( elems ); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +}); + + +var iframe, + elemdisplay = {}; + +/** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ +// Called only from within defaultDisplay +function actualDisplay( name, doc ) { + var style, + elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + // getDefaultComputedStyle might be reliably used only on attached element + display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? + + // Use of this method is a temporary fix (more like optmization) until something better comes along, + // since it was removed from specification and supported only in FF + style.display : jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; +} + +/** + * Try to determine the default display value of an element + * @param {String} nodeName + */ +function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = (iframe || jQuery( "