mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
MINOR Removed wrong sapphire/thirdparty/greybox merge from trunk, needs to be copied from jsparty instead
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.4@93590 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
parent
7ab1932864
commit
625808d17a
504
thirdparty/greybox/LGPL.txt
vendored
504
thirdparty/greybox/LGPL.txt
vendored
@ -1,504 +0,0 @@
|
|||||||
GNU LESSER GENERAL PUBLIC LICENSE
|
|
||||||
Version 2.1, February 1999
|
|
||||||
|
|
||||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
|
||||||
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
[This is the first released version of the Lesser GPL. It also counts
|
|
||||||
as the successor of the GNU Library Public License, version 2, hence
|
|
||||||
the version number 2.1.]
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
|
|
||||||
The licenses for most software are designed to take away your
|
|
||||||
freedom to share and change it. By contrast, the GNU General Public
|
|
||||||
Licenses are intended to guarantee your freedom to share and change
|
|
||||||
free software--to make sure the software is free for all its users.
|
|
||||||
|
|
||||||
This license, the Lesser General Public License, applies to some
|
|
||||||
specially designated software packages--typically libraries--of the
|
|
||||||
Free Software Foundation and other authors who decide to use it. You
|
|
||||||
can use it too, but we suggest you first think carefully about whether
|
|
||||||
this license or the ordinary General Public License is the better
|
|
||||||
strategy to use in any particular case, based on the explanations below.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom of use,
|
|
||||||
not price. Our General Public Licenses are designed to make sure that
|
|
||||||
you have the freedom to distribute copies of free software (and charge
|
|
||||||
for this service if you wish); that you receive source code or can get
|
|
||||||
it if you want it; that you can change the software and use pieces of
|
|
||||||
it in new free programs; and that you are informed that you can do
|
|
||||||
these things.
|
|
||||||
|
|
||||||
To protect your rights, we need to make restrictions that forbid
|
|
||||||
distributors to deny you these rights or to ask you to surrender these
|
|
||||||
rights. These restrictions translate to certain responsibilities for
|
|
||||||
you if you distribute copies of the library or if you modify it.
|
|
||||||
|
|
||||||
For example, if you distribute copies of the library, whether gratis
|
|
||||||
or for a fee, you must give the recipients all the rights that we gave
|
|
||||||
you. You must make sure that they, too, receive or can get the source
|
|
||||||
code. If you link other code with the library, you must provide
|
|
||||||
complete object files to the recipients, so that they can relink them
|
|
||||||
with the library after making changes to the library and recompiling
|
|
||||||
it. And you must show them these terms so they know their rights.
|
|
||||||
|
|
||||||
We protect your rights with a two-step method: (1) we copyright the
|
|
||||||
library, and (2) we offer you this license, which gives you legal
|
|
||||||
permission to copy, distribute and/or modify the library.
|
|
||||||
|
|
||||||
To protect each distributor, we want to make it very clear that
|
|
||||||
there is no warranty for the free library. Also, if the library is
|
|
||||||
modified by someone else and passed on, the recipients should know
|
|
||||||
that what they have is not the original version, so that the original
|
|
||||||
author's reputation will not be affected by problems that might be
|
|
||||||
introduced by others.
|
|
||||||
|
|
||||||
Finally, software patents pose a constant threat to the existence of
|
|
||||||
any free program. We wish to make sure that a company cannot
|
|
||||||
effectively restrict the users of a free program by obtaining a
|
|
||||||
restrictive license from a patent holder. Therefore, we insist that
|
|
||||||
any patent license obtained for a version of the library must be
|
|
||||||
consistent with the full freedom of use specified in this license.
|
|
||||||
|
|
||||||
Most GNU software, including some libraries, is covered by the
|
|
||||||
ordinary GNU General Public License. This license, the GNU Lesser
|
|
||||||
General Public License, applies to certain designated libraries, and
|
|
||||||
is quite different from the ordinary General Public License. We use
|
|
||||||
this license for certain libraries in order to permit linking those
|
|
||||||
libraries into non-free programs.
|
|
||||||
|
|
||||||
When a program is linked with a library, whether statically or using
|
|
||||||
a shared library, the combination of the two is legally speaking a
|
|
||||||
combined work, a derivative of the original library. The ordinary
|
|
||||||
General Public License therefore permits such linking only if the
|
|
||||||
entire combination fits its criteria of freedom. The Lesser General
|
|
||||||
Public License permits more lax criteria for linking other code with
|
|
||||||
the library.
|
|
||||||
|
|
||||||
We call this license the "Lesser" General Public License because it
|
|
||||||
does Less to protect the user's freedom than the ordinary General
|
|
||||||
Public License. It also provides other free software developers Less
|
|
||||||
of an advantage over competing non-free programs. These disadvantages
|
|
||||||
are the reason we use the ordinary General Public License for many
|
|
||||||
libraries. However, the Lesser license provides advantages in certain
|
|
||||||
special circumstances.
|
|
||||||
|
|
||||||
For example, on rare occasions, there may be a special need to
|
|
||||||
encourage the widest possible use of a certain library, so that it becomes
|
|
||||||
a de-facto standard. To achieve this, non-free programs must be
|
|
||||||
allowed to use the library. A more frequent case is that a free
|
|
||||||
library does the same job as widely used non-free libraries. In this
|
|
||||||
case, there is little to gain by limiting the free library to free
|
|
||||||
software only, so we use the Lesser General Public License.
|
|
||||||
|
|
||||||
In other cases, permission to use a particular library in non-free
|
|
||||||
programs enables a greater number of people to use a large body of
|
|
||||||
free software. For example, permission to use the GNU C Library in
|
|
||||||
non-free programs enables many more people to use the whole GNU
|
|
||||||
operating system, as well as its variant, the GNU/Linux operating
|
|
||||||
system.
|
|
||||||
|
|
||||||
Although the Lesser General Public License is Less protective of the
|
|
||||||
users' freedom, it does ensure that the user of a program that is
|
|
||||||
linked with the Library has the freedom and the wherewithal to run
|
|
||||||
that program using a modified version of the Library.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow. Pay close attention to the difference between a
|
|
||||||
"work based on the library" and a "work that uses the library". The
|
|
||||||
former contains code derived from the library, whereas the latter must
|
|
||||||
be combined with the library in order to run.
|
|
||||||
|
|
||||||
GNU LESSER GENERAL PUBLIC LICENSE
|
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
||||||
|
|
||||||
0. This License Agreement applies to any software library or other
|
|
||||||
program which contains a notice placed by the copyright holder or
|
|
||||||
other authorized party saying it may be distributed under the terms of
|
|
||||||
this Lesser General Public License (also called "this License").
|
|
||||||
Each licensee is addressed as "you".
|
|
||||||
|
|
||||||
A "library" means a collection of software functions and/or data
|
|
||||||
prepared so as to be conveniently linked with application programs
|
|
||||||
(which use some of those functions and data) to form executables.
|
|
||||||
|
|
||||||
The "Library", below, refers to any such software library or work
|
|
||||||
which has been distributed under these terms. A "work based on the
|
|
||||||
Library" means either the Library or any derivative work under
|
|
||||||
copyright law: that is to say, a work containing the Library or a
|
|
||||||
portion of it, either verbatim or with modifications and/or translated
|
|
||||||
straightforwardly into another language. (Hereinafter, translation is
|
|
||||||
included without limitation in the term "modification".)
|
|
||||||
|
|
||||||
"Source code" for a work means the preferred form of the work for
|
|
||||||
making modifications to it. For a library, complete source code means
|
|
||||||
all the source code for all modules it contains, plus any associated
|
|
||||||
interface definition files, plus the scripts used to control compilation
|
|
||||||
and installation of the library.
|
|
||||||
|
|
||||||
Activities other than copying, distribution and modification are not
|
|
||||||
covered by this License; they are outside its scope. The act of
|
|
||||||
running a program using the Library is not restricted, and output from
|
|
||||||
such a program is covered only if its contents constitute a work based
|
|
||||||
on the Library (independent of the use of the Library in a tool for
|
|
||||||
writing it). Whether that is true depends on what the Library does
|
|
||||||
and what the program that uses the Library does.
|
|
||||||
|
|
||||||
1. You may copy and distribute verbatim copies of the Library's
|
|
||||||
complete source code as you receive it, in any medium, provided that
|
|
||||||
you conspicuously and appropriately publish on each copy an
|
|
||||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
|
||||||
all the notices that refer to this License and to the absence of any
|
|
||||||
warranty; and distribute a copy of this License along with the
|
|
||||||
Library.
|
|
||||||
|
|
||||||
You may charge a fee for the physical act of transferring a copy,
|
|
||||||
and you may at your option offer warranty protection in exchange for a
|
|
||||||
fee.
|
|
||||||
|
|
||||||
2. You may modify your copy or copies of the Library or any portion
|
|
||||||
of it, thus forming a work based on the Library, and copy and
|
|
||||||
distribute such modifications or work under the terms of Section 1
|
|
||||||
above, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) The modified work must itself be a software library.
|
|
||||||
|
|
||||||
b) You must cause the files modified to carry prominent notices
|
|
||||||
stating that you changed the files and the date of any change.
|
|
||||||
|
|
||||||
c) You must cause the whole of the work to be licensed at no
|
|
||||||
charge to all third parties under the terms of this License.
|
|
||||||
|
|
||||||
d) If a facility in the modified Library refers to a function or a
|
|
||||||
table of data to be supplied by an application program that uses
|
|
||||||
the facility, other than as an argument passed when the facility
|
|
||||||
is invoked, then you must make a good faith effort to ensure that,
|
|
||||||
in the event an application does not supply such function or
|
|
||||||
table, the facility still operates, and performs whatever part of
|
|
||||||
its purpose remains meaningful.
|
|
||||||
|
|
||||||
(For example, a function in a library to compute square roots has
|
|
||||||
a purpose that is entirely well-defined independent of the
|
|
||||||
application. Therefore, Subsection 2d requires that any
|
|
||||||
application-supplied function or table used by this function must
|
|
||||||
be optional: if the application does not supply it, the square
|
|
||||||
root function must still compute square roots.)
|
|
||||||
|
|
||||||
These requirements apply to the modified work as a whole. If
|
|
||||||
identifiable sections of that work are not derived from the Library,
|
|
||||||
and can be reasonably considered independent and separate works in
|
|
||||||
themselves, then this License, and its terms, do not apply to those
|
|
||||||
sections when you distribute them as separate works. But when you
|
|
||||||
distribute the same sections as part of a whole which is a work based
|
|
||||||
on the Library, the distribution of the whole must be on the terms of
|
|
||||||
this License, whose permissions for other licensees extend to the
|
|
||||||
entire whole, and thus to each and every part regardless of who wrote
|
|
||||||
it.
|
|
||||||
|
|
||||||
Thus, it is not the intent of this section to claim rights or contest
|
|
||||||
your rights to work written entirely by you; rather, the intent is to
|
|
||||||
exercise the right to control the distribution of derivative or
|
|
||||||
collective works based on the Library.
|
|
||||||
|
|
||||||
In addition, mere aggregation of another work not based on the Library
|
|
||||||
with the Library (or with a work based on the Library) on a volume of
|
|
||||||
a storage or distribution medium does not bring the other work under
|
|
||||||
the scope of this License.
|
|
||||||
|
|
||||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
|
||||||
License instead of this License to a given copy of the Library. To do
|
|
||||||
this, you must alter all the notices that refer to this License, so
|
|
||||||
that they refer to the ordinary GNU General Public License, version 2,
|
|
||||||
instead of to this License. (If a newer version than version 2 of the
|
|
||||||
ordinary GNU General Public License has appeared, then you can specify
|
|
||||||
that version instead if you wish.) Do not make any other change in
|
|
||||||
these notices.
|
|
||||||
|
|
||||||
Once this change is made in a given copy, it is irreversible for
|
|
||||||
that copy, so the ordinary GNU General Public License applies to all
|
|
||||||
subsequent copies and derivative works made from that copy.
|
|
||||||
|
|
||||||
This option is useful when you wish to copy part of the code of
|
|
||||||
the Library into a program that is not a library.
|
|
||||||
|
|
||||||
4. You may copy and distribute the Library (or a portion or
|
|
||||||
derivative of it, under Section 2) in object code or executable form
|
|
||||||
under the terms of Sections 1 and 2 above provided that you accompany
|
|
||||||
it with the complete corresponding machine-readable source code, which
|
|
||||||
must be distributed under the terms of Sections 1 and 2 above on a
|
|
||||||
medium customarily used for software interchange.
|
|
||||||
|
|
||||||
If distribution of object code is made by offering access to copy
|
|
||||||
from a designated place, then offering equivalent access to copy the
|
|
||||||
source code from the same place satisfies the requirement to
|
|
||||||
distribute the source code, even though third parties are not
|
|
||||||
compelled to copy the source along with the object code.
|
|
||||||
|
|
||||||
5. A program that contains no derivative of any portion of the
|
|
||||||
Library, but is designed to work with the Library by being compiled or
|
|
||||||
linked with it, is called a "work that uses the Library". Such a
|
|
||||||
work, in isolation, is not a derivative work of the Library, and
|
|
||||||
therefore falls outside the scope of this License.
|
|
||||||
|
|
||||||
However, linking a "work that uses the Library" with the Library
|
|
||||||
creates an executable that is a derivative of the Library (because it
|
|
||||||
contains portions of the Library), rather than a "work that uses the
|
|
||||||
library". The executable is therefore covered by this License.
|
|
||||||
Section 6 states terms for distribution of such executables.
|
|
||||||
|
|
||||||
When a "work that uses the Library" uses material from a header file
|
|
||||||
that is part of the Library, the object code for the work may be a
|
|
||||||
derivative work of the Library even though the source code is not.
|
|
||||||
Whether this is true is especially significant if the work can be
|
|
||||||
linked without the Library, or if the work is itself a library. The
|
|
||||||
threshold for this to be true is not precisely defined by law.
|
|
||||||
|
|
||||||
If such an object file uses only numerical parameters, data
|
|
||||||
structure layouts and accessors, and small macros and small inline
|
|
||||||
functions (ten lines or less in length), then the use of the object
|
|
||||||
file is unrestricted, regardless of whether it is legally a derivative
|
|
||||||
work. (Executables containing this object code plus portions of the
|
|
||||||
Library will still fall under Section 6.)
|
|
||||||
|
|
||||||
Otherwise, if the work is a derivative of the Library, you may
|
|
||||||
distribute the object code for the work under the terms of Section 6.
|
|
||||||
Any executables containing that work also fall under Section 6,
|
|
||||||
whether or not they are linked directly with the Library itself.
|
|
||||||
|
|
||||||
6. As an exception to the Sections above, you may also combine or
|
|
||||||
link a "work that uses the Library" with the Library to produce a
|
|
||||||
work containing portions of the Library, and distribute that work
|
|
||||||
under terms of your choice, provided that the terms permit
|
|
||||||
modification of the work for the customer's own use and reverse
|
|
||||||
engineering for debugging such modifications.
|
|
||||||
|
|
||||||
You must give prominent notice with each copy of the work that the
|
|
||||||
Library is used in it and that the Library and its use are covered by
|
|
||||||
this License. You must supply a copy of this License. If the work
|
|
||||||
during execution displays copyright notices, you must include the
|
|
||||||
copyright notice for the Library among them, as well as a reference
|
|
||||||
directing the user to the copy of this License. Also, you must do one
|
|
||||||
of these things:
|
|
||||||
|
|
||||||
a) Accompany the work with the complete corresponding
|
|
||||||
machine-readable source code for the Library including whatever
|
|
||||||
changes were used in the work (which must be distributed under
|
|
||||||
Sections 1 and 2 above); and, if the work is an executable linked
|
|
||||||
with the Library, with the complete machine-readable "work that
|
|
||||||
uses the Library", as object code and/or source code, so that the
|
|
||||||
user can modify the Library and then relink to produce a modified
|
|
||||||
executable containing the modified Library. (It is understood
|
|
||||||
that the user who changes the contents of definitions files in the
|
|
||||||
Library will not necessarily be able to recompile the application
|
|
||||||
to use the modified definitions.)
|
|
||||||
|
|
||||||
b) Use a suitable shared library mechanism for linking with the
|
|
||||||
Library. A suitable mechanism is one that (1) uses at run time a
|
|
||||||
copy of the library already present on the user's computer system,
|
|
||||||
rather than copying library functions into the executable, and (2)
|
|
||||||
will operate properly with a modified version of the library, if
|
|
||||||
the user installs one, as long as the modified version is
|
|
||||||
interface-compatible with the version that the work was made with.
|
|
||||||
|
|
||||||
c) Accompany the work with a written offer, valid for at
|
|
||||||
least three years, to give the same user the materials
|
|
||||||
specified in Subsection 6a, above, for a charge no more
|
|
||||||
than the cost of performing this distribution.
|
|
||||||
|
|
||||||
d) If distribution of the work is made by offering access to copy
|
|
||||||
from a designated place, offer equivalent access to copy the above
|
|
||||||
specified materials from the same place.
|
|
||||||
|
|
||||||
e) Verify that the user has already received a copy of these
|
|
||||||
materials or that you have already sent this user a copy.
|
|
||||||
|
|
||||||
For an executable, the required form of the "work that uses the
|
|
||||||
Library" must include any data and utility programs needed for
|
|
||||||
reproducing the executable from it. However, as a special exception,
|
|
||||||
the materials to be distributed need not include anything that is
|
|
||||||
normally distributed (in either source or binary form) with the major
|
|
||||||
components (compiler, kernel, and so on) of the operating system on
|
|
||||||
which the executable runs, unless that component itself accompanies
|
|
||||||
the executable.
|
|
||||||
|
|
||||||
It may happen that this requirement contradicts the license
|
|
||||||
restrictions of other proprietary libraries that do not normally
|
|
||||||
accompany the operating system. Such a contradiction means you cannot
|
|
||||||
use both them and the Library together in an executable that you
|
|
||||||
distribute.
|
|
||||||
|
|
||||||
7. You may place library facilities that are a work based on the
|
|
||||||
Library side-by-side in a single library together with other library
|
|
||||||
facilities not covered by this License, and distribute such a combined
|
|
||||||
library, provided that the separate distribution of the work based on
|
|
||||||
the Library and of the other library facilities is otherwise
|
|
||||||
permitted, and provided that you do these two things:
|
|
||||||
|
|
||||||
a) Accompany the combined library with a copy of the same work
|
|
||||||
based on the Library, uncombined with any other library
|
|
||||||
facilities. This must be distributed under the terms of the
|
|
||||||
Sections above.
|
|
||||||
|
|
||||||
b) Give prominent notice with the combined library of the fact
|
|
||||||
that part of it is a work based on the Library, and explaining
|
|
||||||
where to find the accompanying uncombined form of the same work.
|
|
||||||
|
|
||||||
8. You may not copy, modify, sublicense, link with, or distribute
|
|
||||||
the Library except as expressly provided under this License. Any
|
|
||||||
attempt otherwise to copy, modify, sublicense, link with, or
|
|
||||||
distribute the Library is void, and will automatically terminate your
|
|
||||||
rights under this License. However, parties who have received copies,
|
|
||||||
or rights, from you under this License will not have their licenses
|
|
||||||
terminated so long as such parties remain in full compliance.
|
|
||||||
|
|
||||||
9. You are not required to accept this License, since you have not
|
|
||||||
signed it. However, nothing else grants you permission to modify or
|
|
||||||
distribute the Library or its derivative works. These actions are
|
|
||||||
prohibited by law if you do not accept this License. Therefore, by
|
|
||||||
modifying or distributing the Library (or any work based on the
|
|
||||||
Library), you indicate your acceptance of this License to do so, and
|
|
||||||
all its terms and conditions for copying, distributing or modifying
|
|
||||||
the Library or works based on it.
|
|
||||||
|
|
||||||
10. Each time you redistribute the Library (or any work based on the
|
|
||||||
Library), the recipient automatically receives a license from the
|
|
||||||
original licensor to copy, distribute, link with or modify the Library
|
|
||||||
subject to these terms and conditions. You may not impose any further
|
|
||||||
restrictions on the recipients' exercise of the rights granted herein.
|
|
||||||
You are not responsible for enforcing compliance by third parties with
|
|
||||||
this License.
|
|
||||||
|
|
||||||
11. If, as a consequence of a court judgment or allegation of patent
|
|
||||||
infringement or for any other reason (not limited to patent issues),
|
|
||||||
conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot
|
|
||||||
distribute so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you
|
|
||||||
may not distribute the Library at all. For example, if a patent
|
|
||||||
license would not permit royalty-free redistribution of the Library by
|
|
||||||
all those who receive copies directly or indirectly through you, then
|
|
||||||
the only way you could satisfy both it and this License would be to
|
|
||||||
refrain entirely from distribution of the Library.
|
|
||||||
|
|
||||||
If any portion of this section is held invalid or unenforceable under any
|
|
||||||
particular circumstance, the balance of the section is intended to apply,
|
|
||||||
and the section as a whole is intended to apply in other circumstances.
|
|
||||||
|
|
||||||
It is not the purpose of this section to induce you to infringe any
|
|
||||||
patents or other property right claims or to contest validity of any
|
|
||||||
such claims; this section has the sole purpose of protecting the
|
|
||||||
integrity of the free software distribution system which is
|
|
||||||
implemented by public license practices. Many people have made
|
|
||||||
generous contributions to the wide range of software distributed
|
|
||||||
through that system in reliance on consistent application of that
|
|
||||||
system; it is up to the author/donor to decide if he or she is willing
|
|
||||||
to distribute software through any other system and a licensee cannot
|
|
||||||
impose that choice.
|
|
||||||
|
|
||||||
This section is intended to make thoroughly clear what is believed to
|
|
||||||
be a consequence of the rest of this License.
|
|
||||||
|
|
||||||
12. If the distribution and/or use of the Library is restricted in
|
|
||||||
certain countries either by patents or by copyrighted interfaces, the
|
|
||||||
original copyright holder who places the Library under this License may add
|
|
||||||
an explicit geographical distribution limitation excluding those countries,
|
|
||||||
so that distribution is permitted only in or among countries not thus
|
|
||||||
excluded. In such case, this License incorporates the limitation as if
|
|
||||||
written in the body of this License.
|
|
||||||
|
|
||||||
13. The Free Software Foundation may publish revised and/or new
|
|
||||||
versions of the Lesser General Public License from time to time.
|
|
||||||
Such new versions will be similar in spirit to the present version,
|
|
||||||
but may differ in detail to address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the Library
|
|
||||||
specifies a version number of this License which applies to it and
|
|
||||||
"any later version", you have the option of following the terms and
|
|
||||||
conditions either of that version or of any later version published by
|
|
||||||
the Free Software Foundation. If the Library does not specify a
|
|
||||||
license version number, you may choose any version ever published by
|
|
||||||
the Free Software Foundation.
|
|
||||||
|
|
||||||
14. If you wish to incorporate parts of the Library into other free
|
|
||||||
programs whose distribution conditions are incompatible with these,
|
|
||||||
write to the author to ask for permission. For software which is
|
|
||||||
copyrighted by the Free Software Foundation, write to the Free
|
|
||||||
Software Foundation; we sometimes make exceptions for this. Our
|
|
||||||
decision will be guided by the two goals of preserving the free status
|
|
||||||
of all derivatives of our free software and of promoting the sharing
|
|
||||||
and reuse of software generally.
|
|
||||||
|
|
||||||
NO WARRANTY
|
|
||||||
|
|
||||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
|
||||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
|
||||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
|
||||||
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
|
||||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
|
||||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
|
||||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
|
||||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
|
||||||
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
|
||||||
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
|
||||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
|
||||||
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
|
||||||
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
|
||||||
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
|
||||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
|
||||||
DAMAGES.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
How to Apply These Terms to Your New Libraries
|
|
||||||
|
|
||||||
If you develop a new library, and you want it to be of the greatest
|
|
||||||
possible use to the public, we recommend making it free software that
|
|
||||||
everyone can redistribute and change. You can do so by permitting
|
|
||||||
redistribution under these terms (or, alternatively, under the terms of the
|
|
||||||
ordinary General Public License).
|
|
||||||
|
|
||||||
To apply these terms, attach the following notices to the library. It is
|
|
||||||
safest to attach them to the start of each source file to most effectively
|
|
||||||
convey the exclusion of warranty; and each file should have at least the
|
|
||||||
"copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the library's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2.1 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or your
|
|
||||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
|
||||||
necessary. Here is a sample; alter the names:
|
|
||||||
|
|
||||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
|
||||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
|
||||||
|
|
||||||
<signature of Ty Coon>, 1 April 1990
|
|
||||||
Ty Coon, President of Vice
|
|
||||||
|
|
||||||
That's all there is to it!
|
|
||||||
|
|
||||||
|
|
BIN
thirdparty/greybox/close.gif
vendored
BIN
thirdparty/greybox/close.gif
vendored
Binary file not shown.
Before Width: | Height: | Size: 200 B |
56
thirdparty/greybox/greybox.css
vendored
56
thirdparty/greybox/greybox.css
vendored
@ -1,56 +0,0 @@
|
|||||||
|
|
||||||
html, body {
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
min-height: 100%;
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#GB_overlay {
|
|
||||||
position: absolute;
|
|
||||||
z-index:100;
|
|
||||||
top: 0px;
|
|
||||||
left: 0px;
|
|
||||||
background-color:#000;
|
|
||||||
filter:alpha(opacity=60);
|
|
||||||
-moz-opacity: 0.6;
|
|
||||||
opacity: 0.6;
|
|
||||||
}
|
|
||||||
|
|
||||||
#GB_window {
|
|
||||||
top: 50%;
|
|
||||||
left: 50%;
|
|
||||||
position: fixed;
|
|
||||||
background: #fff;
|
|
||||||
border: 5px solid #aaa;
|
|
||||||
overflow: auto;
|
|
||||||
width: 400px;
|
|
||||||
height: 400px;
|
|
||||||
z-index: 150;
|
|
||||||
}
|
|
||||||
|
|
||||||
#GB_frame {
|
|
||||||
border: 0;
|
|
||||||
overflow: auto;
|
|
||||||
width: 100%;
|
|
||||||
height: 378px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#GB_caption {
|
|
||||||
font: 12px bold helvetica, verdana, sans-serif;
|
|
||||||
color: #fff;
|
|
||||||
background: #888;
|
|
||||||
padding: 2px 0 2px 5px;
|
|
||||||
margin: 0;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
#GB_window img {
|
|
||||||
position: absolute;
|
|
||||||
top: 2px;
|
|
||||||
right: 5px;
|
|
||||||
cursor: pointer;
|
|
||||||
cursor: hand;
|
|
||||||
}
|
|
||||||
|
|
147
thirdparty/greybox/greybox.js
vendored
147
thirdparty/greybox/greybox.js
vendored
@ -1,147 +0,0 @@
|
|||||||
/* Greybox Redux
|
|
||||||
* Required: http://jquery.com/
|
|
||||||
* Written by: John Resig
|
|
||||||
* Reworked by: Benjamin Yu (http://foofiles.com/, http://badpopcorn.com/)
|
|
||||||
* Based on code by: 4mir Salihefendic (http://amix.dk)
|
|
||||||
* License: LGPL (read more in LGPL.txt)
|
|
||||||
*
|
|
||||||
* @name Greybox
|
|
||||||
* @cat Plugins/Greybox
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
Defaults, all configurable via options:
|
|
||||||
{
|
|
||||||
close_img: "close.gif",
|
|
||||||
height: 400,
|
|
||||||
width: 400,
|
|
||||||
animation: false,
|
|
||||||
overlay_clickable: true,
|
|
||||||
overflow: "auto",
|
|
||||||
callback: null,
|
|
||||||
caption: ""
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
(function() {
|
|
||||||
var settings = {};
|
|
||||||
|
|
||||||
GB_getPageScrollTop = function(){
|
|
||||||
var yScrolltop;
|
|
||||||
var xScrollleft;
|
|
||||||
if (self.pageYOffset || self.pageXOffset) {
|
|
||||||
yScrolltop = self.pageYOffset;
|
|
||||||
xScrollleft = self.pageXOffset;
|
|
||||||
} else if(document.documentElement&& document.documentElement.scrollTop
|
|
||||||
|| document.documentElement.scrollLeft ){ // Explorer 6 Strict
|
|
||||||
yScrolltop = document.documentElement.scrollTop;
|
|
||||||
xScrollleft = document.documentElement.scrollLeft;
|
|
||||||
} else if (document.body) {// all other Explorers
|
|
||||||
yScrolltop = document.body.scrollTop;
|
|
||||||
xScrollleft = document.body.scrollLeft;
|
|
||||||
}
|
|
||||||
arrayPageScroll = new Array(xScrollleft,yScrolltop);
|
|
||||||
return arrayPageScroll;
|
|
||||||
}
|
|
||||||
|
|
||||||
GB_overlay_size = function() {
|
|
||||||
try {
|
|
||||||
if(window.innerHeight && window.scrollMaxY
|
|
||||||
|| window.innerWidth && window.scrollMaxX) {
|
|
||||||
h = window.innerHeight + window.scrollMaxY;
|
|
||||||
w = window.innerWidth + window.scrollMaxX;
|
|
||||||
var deff = document.documentElement;
|
|
||||||
var wff = (deff&&deff.clientWidth)
|
|
||||||
|| document.body.clientWidth || window.innerWidth || self.innerWidth;
|
|
||||||
var hff = (deff&&deff.clientHeight) || document.body.clientHeight
|
|
||||||
|| window.innerHeight || self.innerHeight;
|
|
||||||
w -= (window.innerWidth - wff);
|
|
||||||
h -= (window.innerHeight - hff);
|
|
||||||
} else if(document.body.scrollHeight > document.body.offsetHeight
|
|
||||||
|| document.body.scrollWidth > document.body.offsetWidth) {
|
|
||||||
// all but Explorer Mac
|
|
||||||
h = document.body.scrollHeight;
|
|
||||||
w = document.body.scrollWidth;
|
|
||||||
} else {
|
|
||||||
// Explorer Mac.would also work in Explorer 6 Strict, Mozilla and Safari
|
|
||||||
var left_top = GB_getPageScrollTop();
|
|
||||||
h = left_top[1] + settings.height;
|
|
||||||
w = left_top[0] + settings.width;
|
|
||||||
if( h < document.body.offsetHeight) {
|
|
||||||
h = document.body.offsetHeight;
|
|
||||||
}
|
|
||||||
if( w < document.body.offsetWidth) {
|
|
||||||
w = document.body.offsetWidth;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch(err) {
|
|
||||||
w = jQuery(document.body).width();
|
|
||||||
h = jQuery(document.body).height();
|
|
||||||
}
|
|
||||||
jQuery("#GB_overlay").css({"height":h+"px", "width":w +"px"});
|
|
||||||
}
|
|
||||||
|
|
||||||
GB_position = function() {
|
|
||||||
var boxWidth = settings.width;
|
|
||||||
var boxHeight = settings.height;
|
|
||||||
jQuery('#GB_window').css({
|
|
||||||
marginLeft: '-' + parseInt(boxWidth / 2) + 'px',
|
|
||||||
width: boxWidth + 'px',
|
|
||||||
height: settings.height+"px"
|
|
||||||
});
|
|
||||||
if( !(jQuery.browser.msie && typeof(XMLHttpRequest) == 'function')) {
|
|
||||||
// take away IE6
|
|
||||||
jQuery('#GB_window').css({marginTop: '-' + parseInt(boxHeight / 2)+'px'});
|
|
||||||
}
|
|
||||||
jQuery("#GB_frame").css("height",settings.height - 32 +"px");
|
|
||||||
}
|
|
||||||
|
|
||||||
jQuery.GB_hide = function() {
|
|
||||||
jQuery("#GB_window,#GB_overlay").remove();
|
|
||||||
if(settings.callback && typeof(settings.callback) == 'function') {
|
|
||||||
settings.callback.apply();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
jQuery.GB_show = function(url, options) {
|
|
||||||
settings = jQuery.extend({
|
|
||||||
close_img: "close.gif",
|
|
||||||
height: 400,
|
|
||||||
width: 400,
|
|
||||||
animation: false,
|
|
||||||
overlay_clickable: true,
|
|
||||||
overflow: "auto",
|
|
||||||
callback: null,
|
|
||||||
caption: ""
|
|
||||||
}, options || {});
|
|
||||||
|
|
||||||
jQuery(document.body)
|
|
||||||
.append(
|
|
||||||
"<div id='GB_overlay'></div>" +
|
|
||||||
"<div id='GB_window'><div id='GB_caption'></div>" +
|
|
||||||
"<img src='" + settings.close_img + "' alt='Close window'/></div>");
|
|
||||||
jQuery("#GB_window img").click(jQuery.GB_hide);
|
|
||||||
if(settings.overlay_clickable) {
|
|
||||||
jQuery("#GB_overlay").click(jQuery.GB_hide);
|
|
||||||
}
|
|
||||||
|
|
||||||
jQuery("#GB_window")
|
|
||||||
.append("<iframe id='GB_frame' src='"+url+"'></iframe>");
|
|
||||||
jQuery("#GB_frame").overflow(settings.overflow);
|
|
||||||
|
|
||||||
jQuery("#GB_caption").html(settings.caption);
|
|
||||||
|
|
||||||
GB_overlay_size();
|
|
||||||
jQuery(window).resize(GB_overlay_size);
|
|
||||||
jQuery(window).scroll(GB_overlay_size);
|
|
||||||
jQuery("#GB_overlay").show();
|
|
||||||
|
|
||||||
GB_position();
|
|
||||||
|
|
||||||
if(settings.animation) {
|
|
||||||
jQuery("#GB_window").slideDown("slow");
|
|
||||||
} else {
|
|
||||||
jQuery("#GB_window").show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
})();
|
|
6
thirdparty/greybox/ie-hacks.css
vendored
6
thirdparty/greybox/ie-hacks.css
vendored
@ -1,6 +0,0 @@
|
|||||||
#GB_window {
|
|
||||||
position: absolute;
|
|
||||||
margin-top: expression(0 - parseInt(this.offsetHeight / 2) +
|
|
||||||
(boxMargin = document.documentElement &&
|
|
||||||
document.documentElement.scrollTop || document.body.scrollTop) + 'px');
|
|
||||||
}
|
|
1923
thirdparty/greybox/jquery-1.0.2.js
vendored
1923
thirdparty/greybox/jquery-1.0.2.js
vendored
@ -1,1923 +0,0 @@
|
|||||||
/* prevent execution of jQuery if included more then once */
|
|
||||||
if(typeof window.jQuery == "undefined") {
|
|
||||||
/*
|
|
||||||
* jQuery 1.0.2 - New Wave Javascript
|
|
||||||
*
|
|
||||||
* Copyright (c) 2006 John Resig (jquery.com)
|
|
||||||
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
|
||||||
* and GPL (GPL-LICENSE.txt) licenses.
|
|
||||||
*
|
|
||||||
* $Date: 2006-10-09 20:23:18 -0400 (Mon, 09 Oct 2006) $
|
|
||||||
* $Rev: 413 $
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Global undefined variable
|
|
||||||
window.undefined = window.undefined;
|
|
||||||
jQuery = function(a,c) {
|
|
||||||
|
|
||||||
// Shortcut for document ready (because $(document).each() is silly)
|
|
||||||
if ( a && typeof a == "function" && jQuery.fn.ready )
|
|
||||||
return jQuery(document).ready(a);
|
|
||||||
|
|
||||||
// Make sure that a selection was provided
|
|
||||||
a = a || jQuery.context || document;
|
|
||||||
|
|
||||||
// Watch for when a jQuery object is passed as the selector
|
|
||||||
if ( a.jquery )
|
|
||||||
return jQuery( jQuery.merge( a, [] ) );
|
|
||||||
|
|
||||||
// Watch for when a jQuery object is passed at the context
|
|
||||||
if ( c && c.jquery )
|
|
||||||
return jQuery( c ).find(a);
|
|
||||||
|
|
||||||
// If the context is global, return a new object
|
|
||||||
if ( window == this )
|
|
||||||
return new jQuery(a,c);
|
|
||||||
|
|
||||||
// Handle HTML strings
|
|
||||||
var m = /^[^<]*(<.+>)[^>]*$/.exec(a);
|
|
||||||
if ( m ) a = jQuery.clean( [ m[1] ] );
|
|
||||||
|
|
||||||
// Watch for when an array is passed in
|
|
||||||
this.get( a.constructor == Array || a.length && !a.nodeType && a[0] != undefined && a[0].nodeType ?
|
|
||||||
// Assume that it is an array of DOM Elements
|
|
||||||
jQuery.merge( a, [] ) :
|
|
||||||
|
|
||||||
// Find the matching elements and save them for later
|
|
||||||
jQuery.find( a, c ) );
|
|
||||||
|
|
||||||
// See if an extra function was provided
|
|
||||||
var fn = arguments[ arguments.length - 1 ];
|
|
||||||
|
|
||||||
// If so, execute it in context
|
|
||||||
if ( fn && typeof fn == "function" )
|
|
||||||
this.each(fn);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Map over the $ in case of overwrite
|
|
||||||
if ( typeof $ != "undefined" )
|
|
||||||
jQuery._$ = $;
|
|
||||||
|
|
||||||
// Map the jQuery namespace to the '$' one
|
|
||||||
var $ = jQuery;
|
|
||||||
|
|
||||||
jQuery.fn = jQuery.prototype = {
|
|
||||||
jquery: "1.0.2",
|
|
||||||
|
|
||||||
size: function() {
|
|
||||||
return this.length;
|
|
||||||
},
|
|
||||||
|
|
||||||
get: function( num ) {
|
|
||||||
// Watch for when an array (of elements) is passed in
|
|
||||||
if ( num && num.constructor == Array ) {
|
|
||||||
|
|
||||||
// Use a tricky hack to make the jQuery object
|
|
||||||
// look and feel like an array
|
|
||||||
this.length = 0;
|
|
||||||
[].push.apply( this, num );
|
|
||||||
|
|
||||||
return this;
|
|
||||||
} else
|
|
||||||
return num == undefined ?
|
|
||||||
|
|
||||||
// Return a 'clean' array
|
|
||||||
jQuery.merge( this, [] ) :
|
|
||||||
|
|
||||||
// Return just the object
|
|
||||||
this[num];
|
|
||||||
},
|
|
||||||
each: function( fn, args ) {
|
|
||||||
return jQuery.each( this, fn, args );
|
|
||||||
},
|
|
||||||
index: function( obj ) {
|
|
||||||
var pos = -1;
|
|
||||||
this.each(function(i){
|
|
||||||
if ( this == obj ) pos = i;
|
|
||||||
});
|
|
||||||
return pos;
|
|
||||||
},
|
|
||||||
|
|
||||||
attr: function( key, value, type ) {
|
|
||||||
// Check to see if we're setting style values
|
|
||||||
return key.constructor != String || value != undefined ?
|
|
||||||
this.each(function(){
|
|
||||||
// See if we're setting a hash of styles
|
|
||||||
if ( value == undefined )
|
|
||||||
// Set all the styles
|
|
||||||
for ( var prop in key )
|
|
||||||
jQuery.attr(
|
|
||||||
type ? this.style : this,
|
|
||||||
prop, key[prop]
|
|
||||||
);
|
|
||||||
|
|
||||||
// See if we're setting a single key/value style
|
|
||||||
else
|
|
||||||
jQuery.attr(
|
|
||||||
type ? this.style : this,
|
|
||||||
key, value
|
|
||||||
);
|
|
||||||
}) :
|
|
||||||
|
|
||||||
// Look for the case where we're accessing a style value
|
|
||||||
jQuery[ type || "attr" ]( this[0], key );
|
|
||||||
},
|
|
||||||
|
|
||||||
css: function( key, value ) {
|
|
||||||
return this.attr( key, value, "curCSS" );
|
|
||||||
},
|
|
||||||
text: function(e) {
|
|
||||||
e = e || this;
|
|
||||||
var t = "";
|
|
||||||
for ( var j = 0; j < e.length; j++ ) {
|
|
||||||
var r = e[j].childNodes;
|
|
||||||
for ( var i = 0; i < r.length; i++ )
|
|
||||||
if ( r[i].nodeType != 8 )
|
|
||||||
t += r[i].nodeType != 1 ?
|
|
||||||
r[i].nodeValue : jQuery.fn.text([ r[i] ]);
|
|
||||||
}
|
|
||||||
return t;
|
|
||||||
},
|
|
||||||
|
|
||||||
wrap: function() {
|
|
||||||
// The elements to wrap the target around
|
|
||||||
var a = jQuery.clean(arguments);
|
|
||||||
|
|
||||||
// Wrap each of the matched elements individually
|
|
||||||
return this.each(function(){
|
|
||||||
// Clone the structure that we're using to wrap
|
|
||||||
var b = a[0].cloneNode(true);
|
|
||||||
|
|
||||||
// Insert it before the element to be wrapped
|
|
||||||
this.parentNode.insertBefore( b, this );
|
|
||||||
|
|
||||||
// Find the deepest point in the wrap structure
|
|
||||||
while ( b.firstChild )
|
|
||||||
b = b.firstChild;
|
|
||||||
|
|
||||||
// Move the matched element to within the wrap structure
|
|
||||||
b.appendChild( this );
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
append: function() {
|
|
||||||
return this.domManip(arguments, true, 1, function(a){
|
|
||||||
this.appendChild( a );
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
prepend: function() {
|
|
||||||
return this.domManip(arguments, true, -1, function(a){
|
|
||||||
this.insertBefore( a, this.firstChild );
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
before: function() {
|
|
||||||
return this.domManip(arguments, false, 1, function(a){
|
|
||||||
this.parentNode.insertBefore( a, this );
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
after: function() {
|
|
||||||
return this.domManip(arguments, false, -1, function(a){
|
|
||||||
this.parentNode.insertBefore( a, this.nextSibling );
|
|
||||||
});
|
|
||||||
},
|
|
||||||
end: function() {
|
|
||||||
return this.get( this.stack.pop() );
|
|
||||||
},
|
|
||||||
find: function(t) {
|
|
||||||
return this.pushStack( jQuery.map( this, function(a){
|
|
||||||
return jQuery.find(t,a);
|
|
||||||
}), arguments );
|
|
||||||
},
|
|
||||||
clone: function(deep) {
|
|
||||||
return this.pushStack( jQuery.map( this, function(a){
|
|
||||||
return a.cloneNode( deep != undefined ? deep : true );
|
|
||||||
}), arguments );
|
|
||||||
},
|
|
||||||
|
|
||||||
filter: function(t) {
|
|
||||||
return this.pushStack(
|
|
||||||
t.constructor == Array &&
|
|
||||||
jQuery.map(this,function(a){
|
|
||||||
for ( var i = 0; i < t.length; i++ )
|
|
||||||
if ( jQuery.filter(t[i],[a]).r.length )
|
|
||||||
return a;
|
|
||||||
}) ||
|
|
||||||
|
|
||||||
t.constructor == Boolean &&
|
|
||||||
( t ? this.get() : [] ) ||
|
|
||||||
|
|
||||||
typeof t == "function" &&
|
|
||||||
jQuery.grep( this, t ) ||
|
|
||||||
|
|
||||||
jQuery.filter(t,this).r, arguments );
|
|
||||||
},
|
|
||||||
|
|
||||||
not: function(t) {
|
|
||||||
return this.pushStack( t.constructor == String ?
|
|
||||||
jQuery.filter(t,this,false).r :
|
|
||||||
jQuery.grep(this,function(a){ return a != t; }), arguments );
|
|
||||||
},
|
|
||||||
|
|
||||||
add: function(t) {
|
|
||||||
return this.pushStack( jQuery.merge( this, t.constructor == String ?
|
|
||||||
jQuery.find(t) : t.constructor == Array ? t : [t] ), arguments );
|
|
||||||
},
|
|
||||||
is: function(expr) {
|
|
||||||
return expr ? jQuery.filter(expr,this).r.length > 0 : false;
|
|
||||||
},
|
|
||||||
domManip: function(args, table, dir, fn){
|
|
||||||
var clone = this.size() > 1;
|
|
||||||
var a = jQuery.clean(args);
|
|
||||||
|
|
||||||
return this.each(function(){
|
|
||||||
var obj = this;
|
|
||||||
|
|
||||||
if ( table && this.nodeName.toUpperCase() == "TABLE" && a[0].nodeName.toUpperCase() != "THEAD" ) {
|
|
||||||
var tbody = this.getElementsByTagName("tbody");
|
|
||||||
|
|
||||||
if ( !tbody.length ) {
|
|
||||||
obj = document.createElement("tbody");
|
|
||||||
this.appendChild( obj );
|
|
||||||
} else
|
|
||||||
obj = tbody[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
for ( var i = ( dir < 0 ? a.length - 1 : 0 );
|
|
||||||
i != ( dir < 0 ? dir : a.length ); i += dir ) {
|
|
||||||
fn.apply( obj, [ clone ? a[i].cloneNode(true) : a[i] ] );
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
pushStack: function(a,args) {
|
|
||||||
var fn = args && args[args.length-1];
|
|
||||||
var fn2 = args && args[args.length-2];
|
|
||||||
|
|
||||||
if ( fn && fn.constructor != Function ) fn = null;
|
|
||||||
if ( fn2 && fn2.constructor != Function ) fn2 = null;
|
|
||||||
|
|
||||||
if ( !fn ) {
|
|
||||||
if ( !this.stack ) this.stack = [];
|
|
||||||
this.stack.push( this.get() );
|
|
||||||
this.get( a );
|
|
||||||
} else {
|
|
||||||
var old = this.get();
|
|
||||||
this.get( a );
|
|
||||||
|
|
||||||
if ( fn2 && a.length || !fn2 )
|
|
||||||
this.each( fn2 || fn ).get( old );
|
|
||||||
else
|
|
||||||
this.get( old ).each( fn );
|
|
||||||
}
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
jQuery.extend = jQuery.fn.extend = function(obj,prop) {
|
|
||||||
if ( !prop ) { prop = obj; obj = this; }
|
|
||||||
for ( var i in prop ) obj[i] = prop[i];
|
|
||||||
return obj;
|
|
||||||
};
|
|
||||||
|
|
||||||
jQuery.extend({
|
|
||||||
init: function(){
|
|
||||||
jQuery.initDone = true;
|
|
||||||
|
|
||||||
jQuery.each( jQuery.macros.axis, function(i,n){
|
|
||||||
jQuery.fn[ i ] = function(a) {
|
|
||||||
var ret = jQuery.map(this,n);
|
|
||||||
if ( a && a.constructor == String )
|
|
||||||
ret = jQuery.filter(a,ret).r;
|
|
||||||
return this.pushStack( ret, arguments );
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
jQuery.each( jQuery.macros.to, function(i,n){
|
|
||||||
jQuery.fn[ i ] = function(){
|
|
||||||
var a = arguments;
|
|
||||||
return this.each(function(){
|
|
||||||
for ( var j = 0; j < a.length; j++ )
|
|
||||||
jQuery(a[j])[n]( this );
|
|
||||||
});
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
jQuery.each( jQuery.macros.each, function(i,n){
|
|
||||||
jQuery.fn[ i ] = function() {
|
|
||||||
return this.each( n, arguments );
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
jQuery.each( jQuery.macros.filter, function(i,n){
|
|
||||||
jQuery.fn[ n ] = function(num,fn) {
|
|
||||||
return this.filter( ":" + n + "(" + num + ")", fn );
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
jQuery.each( jQuery.macros.attr, function(i,n){
|
|
||||||
n = n || i;
|
|
||||||
jQuery.fn[ i ] = function(h) {
|
|
||||||
return h == undefined ?
|
|
||||||
this.length ? this[0][n] : null :
|
|
||||||
this.attr( n, h );
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
jQuery.each( jQuery.macros.css, function(i,n){
|
|
||||||
jQuery.fn[ n ] = function(h) {
|
|
||||||
return h == undefined ?
|
|
||||||
( this.length ? jQuery.css( this[0], n ) : null ) :
|
|
||||||
this.css( n, h );
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
},
|
|
||||||
each: function( obj, fn, args ) {
|
|
||||||
if ( obj.length == undefined )
|
|
||||||
for ( var i in obj )
|
|
||||||
fn.apply( obj[i], args || [i, obj[i]] );
|
|
||||||
else
|
|
||||||
for ( var i = 0; i < obj.length; i++ )
|
|
||||||
fn.apply( obj[i], args || [i, obj[i]] );
|
|
||||||
return obj;
|
|
||||||
},
|
|
||||||
|
|
||||||
className: {
|
|
||||||
add: function(o,c){
|
|
||||||
if (jQuery.className.has(o,c)) return;
|
|
||||||
o.className += ( o.className ? " " : "" ) + c;
|
|
||||||
},
|
|
||||||
remove: function(o,c){
|
|
||||||
if( !c ) {
|
|
||||||
o.className = "";
|
|
||||||
} else {
|
|
||||||
var classes = o.className.split(" ");
|
|
||||||
for(var i=0; i<classes.length; i++) {
|
|
||||||
if(classes[i] == c) {
|
|
||||||
classes.splice(i, 1);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
o.className = classes.join(' ');
|
|
||||||
}
|
|
||||||
},
|
|
||||||
has: function(e,a) {
|
|
||||||
if ( e.className != undefined )
|
|
||||||
e = e.className;
|
|
||||||
return new RegExp("(^|\\s)" + a + "(\\s|$)").test(e);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
swap: function(e,o,f) {
|
|
||||||
for ( var i in o ) {
|
|
||||||
e.style["old"+i] = e.style[i];
|
|
||||||
e.style[i] = o[i];
|
|
||||||
}
|
|
||||||
f.apply( e, [] );
|
|
||||||
for ( var i in o )
|
|
||||||
e.style[i] = e.style["old"+i];
|
|
||||||
},
|
|
||||||
|
|
||||||
css: function(e,p) {
|
|
||||||
if ( p == "height" || p == "width" ) {
|
|
||||||
var old = {}, oHeight, oWidth, d = ["Top","Bottom","Right","Left"];
|
|
||||||
|
|
||||||
for ( var i in d ) {
|
|
||||||
old["padding" + d[i]] = 0;
|
|
||||||
old["border" + d[i] + "Width"] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
jQuery.swap( e, old, function() {
|
|
||||||
if (jQuery.css(e,"display") != "none") {
|
|
||||||
oHeight = e.offsetHeight;
|
|
||||||
oWidth = e.offsetWidth;
|
|
||||||
} else {
|
|
||||||
e = jQuery(e.cloneNode(true)).css({
|
|
||||||
visibility: "hidden", position: "absolute", display: "block", right: "0", left: "0"
|
|
||||||
}).appendTo(e.parentNode)[0];
|
|
||||||
|
|
||||||
var parPos = jQuery.css(e.parentNode,"position");
|
|
||||||
if ( parPos == "" || parPos == "static" )
|
|
||||||
e.parentNode.style.position = "relative";
|
|
||||||
|
|
||||||
oHeight = e.clientHeight;
|
|
||||||
oWidth = e.clientWidth;
|
|
||||||
|
|
||||||
if ( parPos == "" || parPos == "static" )
|
|
||||||
e.parentNode.style.position = "static";
|
|
||||||
|
|
||||||
e.parentNode.removeChild(e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return p == "height" ? oHeight : oWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
return jQuery.curCSS( e, p );
|
|
||||||
},
|
|
||||||
|
|
||||||
curCSS: function(elem, prop, force) {
|
|
||||||
var ret;
|
|
||||||
|
|
||||||
if (prop == 'opacity' && jQuery.browser.msie)
|
|
||||||
return jQuery.attr(elem.style, 'opacity');
|
|
||||||
|
|
||||||
if (!force && elem.style[prop]) {
|
|
||||||
|
|
||||||
ret = elem.style[prop];
|
|
||||||
|
|
||||||
} else if (elem.currentStyle) {
|
|
||||||
|
|
||||||
var newProp = prop.replace(/\-(\w)/g,function(m,c){return c.toUpperCase();});
|
|
||||||
ret = elem.currentStyle[prop] || elem.currentStyle[newProp];
|
|
||||||
|
|
||||||
} else if (document.defaultView && document.defaultView.getComputedStyle) {
|
|
||||||
|
|
||||||
prop = prop.replace(/([A-Z])/g,"-$1").toLowerCase();
|
|
||||||
var cur = document.defaultView.getComputedStyle(elem, null);
|
|
||||||
|
|
||||||
if ( cur )
|
|
||||||
ret = cur.getPropertyValue(prop);
|
|
||||||
else if ( prop == 'display' )
|
|
||||||
ret = 'none';
|
|
||||||
else
|
|
||||||
jQuery.swap(elem, { display: 'block' }, function() {
|
|
||||||
ret = document.defaultView.getComputedStyle(this,null).getPropertyValue(prop);
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
},
|
|
||||||
|
|
||||||
clean: function(a) {
|
|
||||||
var r = [];
|
|
||||||
for ( var i = 0; i < a.length; i++ ) {
|
|
||||||
if ( a[i].constructor == String ) {
|
|
||||||
// trim whitespace, otherwise indexOf won't work as expected
|
|
||||||
a[i] = jQuery.trim(a[i]);
|
|
||||||
|
|
||||||
var table = "";
|
|
||||||
|
|
||||||
if ( !a[i].indexOf("<thead") || !a[i].indexOf("<tbody") ) {
|
|
||||||
table = "thead";
|
|
||||||
a[i] = "<table>" + a[i] + "</table>";
|
|
||||||
} else if ( !a[i].indexOf("<tr") ) {
|
|
||||||
table = "tr";
|
|
||||||
a[i] = "<table>" + a[i] + "</table>";
|
|
||||||
} else if ( !a[i].indexOf("<td") || !a[i].indexOf("<th") ) {
|
|
||||||
table = "td";
|
|
||||||
a[i] = "<table><tbody><tr>" + a[i] + "</tr></tbody></table>";
|
|
||||||
}
|
|
||||||
|
|
||||||
var div = document.createElement("div");
|
|
||||||
div.innerHTML = a[i];
|
|
||||||
|
|
||||||
if ( table ) {
|
|
||||||
div = div.firstChild;
|
|
||||||
if ( table != "thead" ) div = div.firstChild;
|
|
||||||
if ( table == "td" ) div = div.firstChild;
|
|
||||||
}
|
|
||||||
|
|
||||||
for ( var j = 0; j < div.childNodes.length; j++ )
|
|
||||||
r.push( div.childNodes[j] );
|
|
||||||
} else if ( a[i].jquery || a[i].length && !a[i].nodeType )
|
|
||||||
for ( var k = 0; k < a[i].length; k++ )
|
|
||||||
r.push( a[i][k] );
|
|
||||||
else if ( a[i] !== null )
|
|
||||||
r.push( a[i].nodeType ? a[i] : document.createTextNode(a[i].toString()) );
|
|
||||||
}
|
|
||||||
return r;
|
|
||||||
},
|
|
||||||
|
|
||||||
expr: {
|
|
||||||
"": "m[2]== '*'||a.nodeName.toUpperCase()==m[2].toUpperCase()",
|
|
||||||
"#": "a.getAttribute('id')&&a.getAttribute('id')==m[2]",
|
|
||||||
":": {
|
|
||||||
// Position Checks
|
|
||||||
lt: "i<m[3]-0",
|
|
||||||
gt: "i>m[3]-0",
|
|
||||||
nth: "m[3]-0==i",
|
|
||||||
eq: "m[3]-0==i",
|
|
||||||
first: "i==0",
|
|
||||||
last: "i==r.length-1",
|
|
||||||
even: "i%2==0",
|
|
||||||
odd: "i%2",
|
|
||||||
|
|
||||||
// Child Checks
|
|
||||||
"nth-child": "jQuery.sibling(a,m[3]).cur",
|
|
||||||
"first-child": "jQuery.sibling(a,0).cur",
|
|
||||||
"last-child": "jQuery.sibling(a,0).last",
|
|
||||||
"only-child": "jQuery.sibling(a).length==1",
|
|
||||||
|
|
||||||
// Parent Checks
|
|
||||||
parent: "a.childNodes.length",
|
|
||||||
empty: "!a.childNodes.length",
|
|
||||||
|
|
||||||
// Text Check
|
|
||||||
contains: "(a.innerText||a.innerHTML).indexOf(m[3])>=0",
|
|
||||||
|
|
||||||
// Visibility
|
|
||||||
visible: "a.type!='hidden'&&jQuery.css(a,'display')!='none'&&jQuery.css(a,'visibility')!='hidden'",
|
|
||||||
hidden: "a.type=='hidden'||jQuery.css(a,'display')=='none'||jQuery.css(a,'visibility')=='hidden'",
|
|
||||||
|
|
||||||
// Form attributes
|
|
||||||
enabled: "!a.disabled",
|
|
||||||
disabled: "a.disabled",
|
|
||||||
checked: "a.checked",
|
|
||||||
selected: "a.selected || jQuery.attr(a, 'selected')",
|
|
||||||
|
|
||||||
// Form elements
|
|
||||||
text: "a.type=='text'",
|
|
||||||
radio: "a.type=='radio'",
|
|
||||||
checkbox: "a.type=='checkbox'",
|
|
||||||
file: "a.type=='file'",
|
|
||||||
password: "a.type=='password'",
|
|
||||||
submit: "a.type=='submit'",
|
|
||||||
image: "a.type=='image'",
|
|
||||||
reset: "a.type=='reset'",
|
|
||||||
button: "a.type=='button'",
|
|
||||||
input: "a.nodeName.toLowerCase().match(/input|select|textarea|button/)"
|
|
||||||
},
|
|
||||||
".": "jQuery.className.has(a,m[2])",
|
|
||||||
"@": {
|
|
||||||
"=": "z==m[4]",
|
|
||||||
"!=": "z!=m[4]",
|
|
||||||
"^=": "z && !z.indexOf(m[4])",
|
|
||||||
"$=": "z && z.substr(z.length - m[4].length,m[4].length)==m[4]",
|
|
||||||
"*=": "z && z.indexOf(m[4])>=0",
|
|
||||||
"": "z"
|
|
||||||
},
|
|
||||||
"[": "jQuery.find(m[2],a).length"
|
|
||||||
},
|
|
||||||
|
|
||||||
token: [
|
|
||||||
"\\.\\.|/\\.\\.", "a.parentNode",
|
|
||||||
">|/", "jQuery.sibling(a.firstChild)",
|
|
||||||
"\\+", "jQuery.sibling(a).next",
|
|
||||||
"~", function(a){
|
|
||||||
var r = [];
|
|
||||||
var s = jQuery.sibling(a);
|
|
||||||
if ( s.n > 0 )
|
|
||||||
for ( var i = s.n; i < s.length; i++ )
|
|
||||||
r.push( s[i] );
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
],
|
|
||||||
find: function( t, context ) {
|
|
||||||
// Make sure that the context is a DOM Element
|
|
||||||
if ( context && context.nodeType == undefined )
|
|
||||||
context = null;
|
|
||||||
|
|
||||||
// Set the correct context (if none is provided)
|
|
||||||
context = context || jQuery.context || document;
|
|
||||||
|
|
||||||
if ( t.constructor != String ) return [t];
|
|
||||||
|
|
||||||
if ( !t.indexOf("//") ) {
|
|
||||||
context = context.documentElement;
|
|
||||||
t = t.substr(2,t.length);
|
|
||||||
} else if ( !t.indexOf("/") ) {
|
|
||||||
context = context.documentElement;
|
|
||||||
t = t.substr(1,t.length);
|
|
||||||
// FIX Assume the root element is right :(
|
|
||||||
if ( t.indexOf("/") >= 1 )
|
|
||||||
t = t.substr(t.indexOf("/"),t.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
var ret = [context];
|
|
||||||
var done = [];
|
|
||||||
var last = null;
|
|
||||||
|
|
||||||
while ( t.length > 0 && last != t ) {
|
|
||||||
var r = [];
|
|
||||||
last = t;
|
|
||||||
|
|
||||||
t = jQuery.trim(t).replace( /^\/\//i, "" );
|
|
||||||
|
|
||||||
var foundToken = false;
|
|
||||||
|
|
||||||
for ( var i = 0; i < jQuery.token.length; i += 2 ) {
|
|
||||||
if ( foundToken ) continue;
|
|
||||||
|
|
||||||
var re = new RegExp("^(" + jQuery.token[i] + ")");
|
|
||||||
var m = re.exec(t);
|
|
||||||
|
|
||||||
if ( m ) {
|
|
||||||
r = ret = jQuery.map( ret, jQuery.token[i+1] );
|
|
||||||
t = jQuery.trim( t.replace( re, "" ) );
|
|
||||||
foundToken = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !foundToken ) {
|
|
||||||
if ( !t.indexOf(",") || !t.indexOf("|") ) {
|
|
||||||
if ( ret[0] == context ) ret.shift();
|
|
||||||
done = jQuery.merge( done, ret );
|
|
||||||
r = ret = [context];
|
|
||||||
t = " " + t.substr(1,t.length);
|
|
||||||
} else {
|
|
||||||
var re2 = /^([#.]?)([a-z0-9\\*_-]*)/i;
|
|
||||||
var m = re2.exec(t);
|
|
||||||
|
|
||||||
if ( m[1] == "#" ) {
|
|
||||||
// Ummm, should make this work in all XML docs
|
|
||||||
var oid = document.getElementById(m[2]);
|
|
||||||
r = ret = oid ? [oid] : [];
|
|
||||||
t = t.replace( re2, "" );
|
|
||||||
} else {
|
|
||||||
if ( !m[2] || m[1] == "." ) m[2] = "*";
|
|
||||||
|
|
||||||
for ( var i = 0; i < ret.length; i++ )
|
|
||||||
r = jQuery.merge( r,
|
|
||||||
m[2] == "*" ?
|
|
||||||
jQuery.getAll(ret[i]) :
|
|
||||||
ret[i].getElementsByTagName(m[2])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( t ) {
|
|
||||||
var val = jQuery.filter(t,r);
|
|
||||||
ret = r = val.r;
|
|
||||||
t = jQuery.trim(val.t);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ret && ret[0] == context ) ret.shift();
|
|
||||||
done = jQuery.merge( done, ret );
|
|
||||||
|
|
||||||
return done;
|
|
||||||
},
|
|
||||||
|
|
||||||
getAll: function(o,r) {
|
|
||||||
r = r || [];
|
|
||||||
var s = o.childNodes;
|
|
||||||
for ( var i = 0; i < s.length; i++ )
|
|
||||||
if ( s[i].nodeType == 1 ) {
|
|
||||||
r.push( s[i] );
|
|
||||||
jQuery.getAll( s[i], r );
|
|
||||||
}
|
|
||||||
return r;
|
|
||||||
},
|
|
||||||
|
|
||||||
attr: function(elem, name, value){
|
|
||||||
var fix = {
|
|
||||||
"for": "htmlFor",
|
|
||||||
"class": "className",
|
|
||||||
"float": "cssFloat",
|
|
||||||
innerHTML: "innerHTML",
|
|
||||||
className: "className",
|
|
||||||
value: "value",
|
|
||||||
disabled: "disabled",
|
|
||||||
checked: "checked"
|
|
||||||
};
|
|
||||||
|
|
||||||
// IE actually uses filters for opacity ... elem is actually elem.style
|
|
||||||
if (name == "opacity" && jQuery.browser.msie && value != undefined) {
|
|
||||||
// IE has trouble with opacity if it does not have layout
|
|
||||||
// Would prefer to check element.hasLayout first but don't have access to the element here
|
|
||||||
elem['zoom'] = 1;
|
|
||||||
if (value == 1) // Remove filter to avoid more IE weirdness
|
|
||||||
return elem["filter"] = elem["filter"].replace(/alpha\([^\)]*\)/gi,"");
|
|
||||||
else
|
|
||||||
return elem["filter"] = elem["filter"].replace(/alpha\([^\)]*\)/gi,"") + "alpha(opacity=" + value * 100 + ")";
|
|
||||||
} else if (name == "opacity" && jQuery.browser.msie) {
|
|
||||||
return elem["filter"] ? parseFloat( elem["filter"].match(/alpha\(opacity=(.*)\)/)[1] )/100 : 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mozilla doesn't play well with opacity 1
|
|
||||||
if (name == "opacity" && jQuery.browser.mozilla && value == 1) value = 0.9999;
|
|
||||||
|
|
||||||
if ( fix[name] ) {
|
|
||||||
if ( value != undefined ) elem[fix[name]] = value;
|
|
||||||
return elem[fix[name]];
|
|
||||||
} else if( value == undefined && jQuery.browser.msie && elem.nodeName && elem.nodeName.toUpperCase() == 'FORM' && (name == 'action' || name == 'method') ) {
|
|
||||||
return elem.getAttributeNode(name).nodeValue;
|
|
||||||
} else if ( elem.getAttribute != undefined ) {
|
|
||||||
if ( value != undefined ) elem.setAttribute( name, value );
|
|
||||||
return elem.getAttribute( name, 2 );
|
|
||||||
} else {
|
|
||||||
name = name.replace(/-([a-z])/ig,function(z,b){return b.toUpperCase();});
|
|
||||||
if ( value != undefined ) elem[name] = value;
|
|
||||||
return elem[name];
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
// The regular expressions that power the parsing engine
|
|
||||||
parse: [
|
|
||||||
// Match: [@value='test'], [@foo]
|
|
||||||
"\\[ *(@)S *([!*$^=]*) *('?\"?)(.*?)\\4 *\\]",
|
|
||||||
|
|
||||||
// Match: [div], [div p]
|
|
||||||
"(\\[)\s*(.*?)\s*\\]",
|
|
||||||
|
|
||||||
// Match: :contains('foo')
|
|
||||||
"(:)S\\(\"?'?([^\\)]*?)\"?'?\\)",
|
|
||||||
|
|
||||||
// Match: :even, :last-chlid
|
|
||||||
"([:.#]*)S"
|
|
||||||
],
|
|
||||||
|
|
||||||
filter: function(t,r,not) {
|
|
||||||
// Figure out if we're doing regular, or inverse, filtering
|
|
||||||
var g = not !== false ? jQuery.grep :
|
|
||||||
function(a,f) {return jQuery.grep(a,f,true);};
|
|
||||||
|
|
||||||
while ( t && /^[a-z[({<*:.#]/i.test(t) ) {
|
|
||||||
|
|
||||||
var p = jQuery.parse;
|
|
||||||
|
|
||||||
for ( var i = 0; i < p.length; i++ ) {
|
|
||||||
|
|
||||||
// Look for, and replace, string-like sequences
|
|
||||||
// and finally build a regexp out of it
|
|
||||||
var re = new RegExp(
|
|
||||||
"^" + p[i].replace("S", "([a-z*_-][a-z0-9_-]*)"), "i" );
|
|
||||||
|
|
||||||
var m = re.exec( t );
|
|
||||||
|
|
||||||
if ( m ) {
|
|
||||||
// Re-organize the first match
|
|
||||||
if ( !i )
|
|
||||||
m = ["",m[1], m[3], m[2], m[5]];
|
|
||||||
|
|
||||||
// Remove what we just matched
|
|
||||||
t = t.replace( re, "" );
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// :not() is a special case that can be optimized by
|
|
||||||
// keeping it out of the expression list
|
|
||||||
if ( m[1] == ":" && m[2] == "not" )
|
|
||||||
r = jQuery.filter(m[3],r,false).r;
|
|
||||||
|
|
||||||
// Otherwise, find the expression to execute
|
|
||||||
else {
|
|
||||||
var f = jQuery.expr[m[1]];
|
|
||||||
if ( f.constructor != String )
|
|
||||||
f = jQuery.expr[m[1]][m[2]];
|
|
||||||
|
|
||||||
// Build a custom macro to enclose it
|
|
||||||
eval("f = function(a,i){" +
|
|
||||||
( m[1] == "@" ? "z=jQuery.attr(a,m[3]);" : "" ) +
|
|
||||||
"return " + f + "}");
|
|
||||||
|
|
||||||
// Execute it against the current filter
|
|
||||||
r = g( r, f );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return an array of filtered elements (r)
|
|
||||||
// and the modified expression string (t)
|
|
||||||
return { r: r, t: t };
|
|
||||||
},
|
|
||||||
trim: function(t){
|
|
||||||
return t.replace(/^\s+|\s+$/g, "");
|
|
||||||
},
|
|
||||||
parents: function( elem ){
|
|
||||||
var matched = [];
|
|
||||||
var cur = elem.parentNode;
|
|
||||||
while ( cur && cur != document ) {
|
|
||||||
matched.push( cur );
|
|
||||||
cur = cur.parentNode;
|
|
||||||
}
|
|
||||||
return matched;
|
|
||||||
},
|
|
||||||
sibling: function(elem, pos, not) {
|
|
||||||
var elems = [];
|
|
||||||
|
|
||||||
if(elem) {
|
|
||||||
var siblings = elem.parentNode.childNodes;
|
|
||||||
for ( var i = 0; i < siblings.length; i++ ) {
|
|
||||||
if ( not === true && siblings[i] == elem ) continue;
|
|
||||||
|
|
||||||
if ( siblings[i].nodeType == 1 )
|
|
||||||
elems.push( siblings[i] );
|
|
||||||
if ( siblings[i] == elem )
|
|
||||||
elems.n = elems.length - 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return jQuery.extend( elems, {
|
|
||||||
last: elems.n == elems.length - 1,
|
|
||||||
cur: pos == "even" && elems.n % 2 == 0 || pos == "odd" && elems.n % 2 || elems[pos] == elem,
|
|
||||||
prev: elems[elems.n - 1],
|
|
||||||
next: elems[elems.n + 1]
|
|
||||||
});
|
|
||||||
},
|
|
||||||
merge: function(first, second) {
|
|
||||||
var result = [];
|
|
||||||
|
|
||||||
// Move b over to the new array (this helps to avoid
|
|
||||||
// StaticNodeList instances)
|
|
||||||
for ( var k = 0; k < first.length; k++ )
|
|
||||||
result[k] = first[k];
|
|
||||||
|
|
||||||
// Now check for duplicates between a and b and only
|
|
||||||
// add the unique items
|
|
||||||
for ( var i = 0; i < second.length; i++ ) {
|
|
||||||
var noCollision = true;
|
|
||||||
|
|
||||||
// The collision-checking process
|
|
||||||
for ( var j = 0; j < first.length; j++ )
|
|
||||||
if ( second[i] == first[j] )
|
|
||||||
noCollision = false;
|
|
||||||
|
|
||||||
// If the item is unique, add it
|
|
||||||
if ( noCollision )
|
|
||||||
result.push( second[i] );
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
grep: function(elems, fn, inv) {
|
|
||||||
// If a string is passed in for the function, make a function
|
|
||||||
// for it (a handy shortcut)
|
|
||||||
if ( fn.constructor == String )
|
|
||||||
fn = new Function("a","i","return " + fn);
|
|
||||||
|
|
||||||
var result = [];
|
|
||||||
|
|
||||||
// Go through the array, only saving the items
|
|
||||||
// that pass the validator function
|
|
||||||
for ( var i = 0; i < elems.length; i++ )
|
|
||||||
if ( !inv && fn(elems[i],i) || inv && !fn(elems[i],i) )
|
|
||||||
result.push( elems[i] );
|
|
||||||
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
map: function(elems, fn) {
|
|
||||||
// If a string is passed in for the function, make a function
|
|
||||||
// for it (a handy shortcut)
|
|
||||||
if ( fn.constructor == String )
|
|
||||||
fn = new Function("a","return " + fn);
|
|
||||||
|
|
||||||
var result = [];
|
|
||||||
|
|
||||||
// Go through the array, translating each of the items to their
|
|
||||||
// new value (or values).
|
|
||||||
for ( var i = 0; i < elems.length; i++ ) {
|
|
||||||
var val = fn(elems[i],i);
|
|
||||||
|
|
||||||
if ( val !== null && val != undefined ) {
|
|
||||||
if ( val.constructor != Array ) val = [val];
|
|
||||||
result = jQuery.merge( result, val );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A number of helper functions used for managing events.
|
|
||||||
* Many of the ideas behind this code orignated from Dean Edwards' addEvent library.
|
|
||||||
*/
|
|
||||||
event: {
|
|
||||||
|
|
||||||
// Bind an event to an element
|
|
||||||
// Original by Dean Edwards
|
|
||||||
add: function(element, type, handler) {
|
|
||||||
// For whatever reason, IE has trouble passing the window object
|
|
||||||
// around, causing it to be cloned in the process
|
|
||||||
if ( jQuery.browser.msie && element.setInterval != undefined )
|
|
||||||
element = window;
|
|
||||||
|
|
||||||
// Make sure that the function being executed has a unique ID
|
|
||||||
if ( !handler.guid )
|
|
||||||
handler.guid = this.guid++;
|
|
||||||
|
|
||||||
// Init the element's event structure
|
|
||||||
if (!element.events)
|
|
||||||
element.events = {};
|
|
||||||
|
|
||||||
// Get the current list of functions bound to this event
|
|
||||||
var handlers = element.events[type];
|
|
||||||
|
|
||||||
// If it hasn't been initialized yet
|
|
||||||
if (!handlers) {
|
|
||||||
// Init the event handler queue
|
|
||||||
handlers = element.events[type] = {};
|
|
||||||
|
|
||||||
// Remember an existing handler, if it's already there
|
|
||||||
if (element["on" + type])
|
|
||||||
handlers[0] = element["on" + type];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add the function to the element's handler list
|
|
||||||
handlers[handler.guid] = handler;
|
|
||||||
|
|
||||||
// And bind the global event handler to the element
|
|
||||||
element["on" + type] = this.handle;
|
|
||||||
|
|
||||||
// Remember the function in a global list (for triggering)
|
|
||||||
if (!this.global[type])
|
|
||||||
this.global[type] = [];
|
|
||||||
this.global[type].push( element );
|
|
||||||
},
|
|
||||||
|
|
||||||
guid: 1,
|
|
||||||
global: {},
|
|
||||||
|
|
||||||
// Detach an event or set of events from an element
|
|
||||||
remove: function(element, type, handler) {
|
|
||||||
if (element.events)
|
|
||||||
if (type && element.events[type])
|
|
||||||
if ( handler )
|
|
||||||
delete element.events[type][handler.guid];
|
|
||||||
else
|
|
||||||
for ( var i in element.events[type] )
|
|
||||||
delete element.events[type][i];
|
|
||||||
else
|
|
||||||
for ( var j in element.events )
|
|
||||||
this.remove( element, j );
|
|
||||||
},
|
|
||||||
|
|
||||||
trigger: function(type,data,element) {
|
|
||||||
// Touch up the incoming data
|
|
||||||
data = data || [];
|
|
||||||
|
|
||||||
// Handle a global trigger
|
|
||||||
if ( !element ) {
|
|
||||||
var g = this.global[type];
|
|
||||||
if ( g )
|
|
||||||
for ( var i = 0; i < g.length; i++ )
|
|
||||||
this.trigger( type, data, g[i] );
|
|
||||||
|
|
||||||
// Handle triggering a single element
|
|
||||||
} else if ( element["on" + type] ) {
|
|
||||||
// Pass along a fake event
|
|
||||||
data.unshift( this.fix({ type: type, target: element }) );
|
|
||||||
|
|
||||||
// Trigger the event
|
|
||||||
element["on" + type].apply( element, data );
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
handle: function(event) {
|
|
||||||
if ( typeof jQuery == "undefined" ) return;
|
|
||||||
|
|
||||||
event = event || jQuery.event.fix( window.event );
|
|
||||||
|
|
||||||
// If no correct event was found, fail
|
|
||||||
if ( !event ) return;
|
|
||||||
|
|
||||||
var returnValue = true;
|
|
||||||
|
|
||||||
var c = this.events[event.type];
|
|
||||||
|
|
||||||
var args = [].slice.call( arguments, 1 );
|
|
||||||
args.unshift( event );
|
|
||||||
|
|
||||||
for ( var j in c ) {
|
|
||||||
if ( c[j].apply( this, args ) === false ) {
|
|
||||||
event.preventDefault();
|
|
||||||
event.stopPropagation();
|
|
||||||
returnValue = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnValue;
|
|
||||||
},
|
|
||||||
|
|
||||||
fix: function(event) {
|
|
||||||
if ( event ) {
|
|
||||||
event.preventDefault = function() {
|
|
||||||
this.returnValue = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
event.stopPropagation = function() {
|
|
||||||
this.cancelBubble = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return event;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
new function() {
|
|
||||||
var b = navigator.userAgent.toLowerCase();
|
|
||||||
|
|
||||||
// Figure out what browser is being used
|
|
||||||
jQuery.browser = {
|
|
||||||
safari: /webkit/.test(b),
|
|
||||||
opera: /opera/.test(b),
|
|
||||||
msie: /msie/.test(b) && !/opera/.test(b),
|
|
||||||
mozilla: /mozilla/.test(b) && !/(compatible|webkit)/.test(b)
|
|
||||||
};
|
|
||||||
|
|
||||||
// Check to see if the W3C box model is being used
|
|
||||||
jQuery.boxModel = !jQuery.browser.msie || document.compatMode == "CSS1Compat";
|
|
||||||
};
|
|
||||||
|
|
||||||
jQuery.macros = {
|
|
||||||
to: {
|
|
||||||
appendTo: "append",
|
|
||||||
prependTo: "prepend",
|
|
||||||
insertBefore: "before",
|
|
||||||
insertAfter: "after"
|
|
||||||
},
|
|
||||||
|
|
||||||
css: "width,height,top,left,position,float,overflow,color,background".split(","),
|
|
||||||
|
|
||||||
filter: [ "eq", "lt", "gt", "contains" ],
|
|
||||||
|
|
||||||
attr: {
|
|
||||||
|
|
||||||
val: "value",
|
|
||||||
|
|
||||||
html: "innerHTML",
|
|
||||||
|
|
||||||
id: null,
|
|
||||||
|
|
||||||
title: null,
|
|
||||||
|
|
||||||
name: null,
|
|
||||||
|
|
||||||
href: null,
|
|
||||||
|
|
||||||
src: null,
|
|
||||||
|
|
||||||
rel: null
|
|
||||||
},
|
|
||||||
|
|
||||||
axis: {
|
|
||||||
|
|
||||||
parent: "a.parentNode",
|
|
||||||
|
|
||||||
ancestors: jQuery.parents,
|
|
||||||
|
|
||||||
parents: jQuery.parents,
|
|
||||||
|
|
||||||
next: "jQuery.sibling(a).next",
|
|
||||||
|
|
||||||
prev: "jQuery.sibling(a).prev",
|
|
||||||
|
|
||||||
siblings: "jQuery.sibling(a, null, true)",
|
|
||||||
|
|
||||||
children: "jQuery.sibling(a.firstChild)"
|
|
||||||
},
|
|
||||||
|
|
||||||
each: {
|
|
||||||
removeAttr: function( key ) {
|
|
||||||
this.removeAttribute( key );
|
|
||||||
},
|
|
||||||
show: function(){
|
|
||||||
this.style.display = this.oldblock ? this.oldblock : "";
|
|
||||||
if ( jQuery.css(this,"display") == "none" )
|
|
||||||
this.style.display = "block";
|
|
||||||
},
|
|
||||||
hide: function(){
|
|
||||||
this.oldblock = this.oldblock || jQuery.css(this,"display");
|
|
||||||
if ( this.oldblock == "none" )
|
|
||||||
this.oldblock = "block";
|
|
||||||
this.style.display = "none";
|
|
||||||
},
|
|
||||||
toggle: function(){
|
|
||||||
jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ].apply( jQuery(this), arguments );
|
|
||||||
},
|
|
||||||
addClass: function(c){
|
|
||||||
jQuery.className.add(this,c);
|
|
||||||
},
|
|
||||||
removeClass: function(c){
|
|
||||||
jQuery.className.remove(this,c);
|
|
||||||
},
|
|
||||||
toggleClass: function( c ){
|
|
||||||
jQuery.className[ jQuery.className.has(this,c) ? "remove" : "add" ](this,c);
|
|
||||||
},
|
|
||||||
|
|
||||||
remove: function(a){
|
|
||||||
if ( !a || jQuery.filter( a, [this] ).r )
|
|
||||||
this.parentNode.removeChild( this );
|
|
||||||
},
|
|
||||||
empty: function(){
|
|
||||||
while ( this.firstChild )
|
|
||||||
this.removeChild( this.firstChild );
|
|
||||||
},
|
|
||||||
bind: function( type, fn ) {
|
|
||||||
if ( fn.constructor == String )
|
|
||||||
fn = new Function("e", ( !fn.indexOf(".") ? "jQuery(this)" : "return " ) + fn);
|
|
||||||
jQuery.event.add( this, type, fn );
|
|
||||||
},
|
|
||||||
|
|
||||||
unbind: function( type, fn ) {
|
|
||||||
jQuery.event.remove( this, type, fn );
|
|
||||||
},
|
|
||||||
trigger: function( type, data ) {
|
|
||||||
jQuery.event.trigger( type, data, this );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
jQuery.init();
|
|
||||||
jQuery.fn.extend({
|
|
||||||
|
|
||||||
// We're overriding the old toggle function, so
|
|
||||||
// remember it for later
|
|
||||||
_toggle: jQuery.fn.toggle,
|
|
||||||
toggle: function(a,b) {
|
|
||||||
// If two functions are passed in, we're
|
|
||||||
// toggling on a click
|
|
||||||
return a && b && a.constructor == Function && b.constructor == Function ? this.click(function(e){
|
|
||||||
// Figure out which function to execute
|
|
||||||
this.last = this.last == a ? b : a;
|
|
||||||
|
|
||||||
// Make sure that clicks stop
|
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
// and execute the function
|
|
||||||
return this.last.apply( this, [e] ) || false;
|
|
||||||
}) :
|
|
||||||
|
|
||||||
// Otherwise, execute the old toggle function
|
|
||||||
this._toggle.apply( this, arguments );
|
|
||||||
},
|
|
||||||
hover: function(f,g) {
|
|
||||||
|
|
||||||
// A private function for haandling mouse 'hovering'
|
|
||||||
function handleHover(e) {
|
|
||||||
// Check if mouse(over|out) are still within the same parent element
|
|
||||||
var p = (e.type == "mouseover" ? e.fromElement : e.toElement) || e.relatedTarget;
|
|
||||||
|
|
||||||
// Traverse up the tree
|
|
||||||
while ( p && p != this ) try { p = p.parentNode } catch(e) { p = this; };
|
|
||||||
|
|
||||||
// If we actually just moused on to a sub-element, ignore it
|
|
||||||
if ( p == this ) return false;
|
|
||||||
|
|
||||||
// Execute the right function
|
|
||||||
return (e.type == "mouseover" ? f : g).apply(this, [e]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bind the function to the two event listeners
|
|
||||||
return this.mouseover(handleHover).mouseout(handleHover);
|
|
||||||
},
|
|
||||||
ready: function(f) {
|
|
||||||
// If the DOM is already ready
|
|
||||||
if ( jQuery.isReady )
|
|
||||||
// Execute the function immediately
|
|
||||||
f.apply( document );
|
|
||||||
|
|
||||||
// Otherwise, remember the function for later
|
|
||||||
else {
|
|
||||||
// Add the function to the wait list
|
|
||||||
jQuery.readyList.push( f );
|
|
||||||
}
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
jQuery.extend({
|
|
||||||
/*
|
|
||||||
* All the code that makes DOM Ready work nicely.
|
|
||||||
*/
|
|
||||||
isReady: false,
|
|
||||||
readyList: [],
|
|
||||||
|
|
||||||
// Handle when the DOM is ready
|
|
||||||
ready: function() {
|
|
||||||
// Make sure that the DOM is not already loaded
|
|
||||||
if ( !jQuery.isReady ) {
|
|
||||||
// Remember that the DOM is ready
|
|
||||||
jQuery.isReady = true;
|
|
||||||
|
|
||||||
// If there are functions bound, to execute
|
|
||||||
if ( jQuery.readyList ) {
|
|
||||||
// Execute all of them
|
|
||||||
for ( var i = 0; i < jQuery.readyList.length; i++ )
|
|
||||||
jQuery.readyList[i].apply( document );
|
|
||||||
|
|
||||||
// Reset the list of functions
|
|
||||||
jQuery.readyList = null;
|
|
||||||
}
|
|
||||||
// Remove event lisenter to avoid memory leak
|
|
||||||
if ( jQuery.browser.mozilla || jQuery.browser.opera )
|
|
||||||
document.removeEventListener( "DOMContentLoaded", jQuery.ready, false );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
new function(){
|
|
||||||
|
|
||||||
var e = ("blur,focus,load,resize,scroll,unload,click,dblclick," +
|
|
||||||
"mousedown,mouseup,mousemove,mouseover,mouseout,change,reset,select," +
|
|
||||||
"submit,keydown,keypress,keyup,error").split(",");
|
|
||||||
|
|
||||||
// Go through all the event names, but make sure that
|
|
||||||
// it is enclosed properly
|
|
||||||
for ( var i = 0; i < e.length; i++ ) new function(){
|
|
||||||
|
|
||||||
var o = e[i];
|
|
||||||
|
|
||||||
// Handle event binding
|
|
||||||
jQuery.fn[o] = function(f){
|
|
||||||
return f ? this.bind(o, f) : this.trigger(o);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Handle event unbinding
|
|
||||||
jQuery.fn["un"+o] = function(f){ return this.unbind(o, f); };
|
|
||||||
|
|
||||||
// Finally, handle events that only fire once
|
|
||||||
jQuery.fn["one"+o] = function(f){
|
|
||||||
// Attach the event listener
|
|
||||||
return this.each(function(){
|
|
||||||
|
|
||||||
var count = 0;
|
|
||||||
|
|
||||||
// Add the event
|
|
||||||
jQuery.event.add( this, o, function(e){
|
|
||||||
// If this function has already been executed, stop
|
|
||||||
if ( count++ ) return;
|
|
||||||
|
|
||||||
// And execute the bound function
|
|
||||||
return f.apply(this, [e]);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
// If Mozilla is used
|
|
||||||
if ( jQuery.browser.mozilla || jQuery.browser.opera ) {
|
|
||||||
// Use the handy event callback
|
|
||||||
document.addEventListener( "DOMContentLoaded", jQuery.ready, false );
|
|
||||||
|
|
||||||
// If IE is used, use the excellent hack by Matthias Miller
|
|
||||||
// http://www.outofhanwell.com/blog/index.php?title=the_window_onload_problem_revisited
|
|
||||||
} else if ( jQuery.browser.msie ) {
|
|
||||||
|
|
||||||
// Only works if you document.write() it
|
|
||||||
document.write("<scr" + "ipt id=__ie_init defer=true " +
|
|
||||||
"src=//:><\/script>");
|
|
||||||
|
|
||||||
// Use the defer script hack
|
|
||||||
var script = document.getElementById("__ie_init");
|
|
||||||
script.onreadystatechange = function() {
|
|
||||||
if ( this.readyState != "complete" ) return;
|
|
||||||
this.parentNode.removeChild( this );
|
|
||||||
jQuery.ready();
|
|
||||||
};
|
|
||||||
|
|
||||||
// Clear from memory
|
|
||||||
script = null;
|
|
||||||
|
|
||||||
// If Safari is used
|
|
||||||
} else if ( jQuery.browser.safari ) {
|
|
||||||
// Continually check to see if the document.readyState is valid
|
|
||||||
jQuery.safariTimer = setInterval(function(){
|
|
||||||
// loaded and complete are both valid states
|
|
||||||
if ( document.readyState == "loaded" ||
|
|
||||||
document.readyState == "complete" ) {
|
|
||||||
|
|
||||||
// If either one are found, remove the timer
|
|
||||||
clearInterval( jQuery.safariTimer );
|
|
||||||
jQuery.safariTimer = null;
|
|
||||||
|
|
||||||
// and execute any waiting functions
|
|
||||||
jQuery.ready();
|
|
||||||
}
|
|
||||||
}, 10);
|
|
||||||
}
|
|
||||||
|
|
||||||
// A fallback to window.onload, that will always work
|
|
||||||
jQuery.event.add( window, "load", jQuery.ready );
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
// Clean up after IE to avoid memory leaks
|
|
||||||
if (jQuery.browser.msie) jQuery(window).unload(function() {
|
|
||||||
var event = jQuery.event, global = event.global;
|
|
||||||
for (var type in global) {
|
|
||||||
var els = global[type], i = els.length;
|
|
||||||
if (i>0) do if (type != 'unload') event.remove(els[i-1], type); while (--i);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
jQuery.fn.extend({
|
|
||||||
|
|
||||||
// overwrite the old show method
|
|
||||||
_show: jQuery.fn.show,
|
|
||||||
|
|
||||||
show: function(speed,callback){
|
|
||||||
return speed ? this.animate({
|
|
||||||
height: "show", width: "show", opacity: "show"
|
|
||||||
}, speed, callback) : this._show();
|
|
||||||
},
|
|
||||||
|
|
||||||
// Overwrite the old hide method
|
|
||||||
_hide: jQuery.fn.hide,
|
|
||||||
|
|
||||||
hide: function(speed,callback){
|
|
||||||
return speed ? this.animate({
|
|
||||||
height: "hide", width: "hide", opacity: "hide"
|
|
||||||
}, speed, callback) : this._hide();
|
|
||||||
},
|
|
||||||
|
|
||||||
slideDown: function(speed,callback){
|
|
||||||
return this.animate({height: "show"}, speed, callback);
|
|
||||||
},
|
|
||||||
|
|
||||||
slideUp: function(speed,callback){
|
|
||||||
return this.animate({height: "hide"}, speed, callback);
|
|
||||||
},
|
|
||||||
|
|
||||||
slideToggle: function(speed,callback){
|
|
||||||
return this.each(function(){
|
|
||||||
var state = jQuery(this).is(":hidden") ? "show" : "hide";
|
|
||||||
jQuery(this).animate({height: state}, speed, callback);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
fadeIn: function(speed,callback){
|
|
||||||
return this.animate({opacity: "show"}, speed, callback);
|
|
||||||
},
|
|
||||||
|
|
||||||
fadeOut: function(speed,callback){
|
|
||||||
return this.animate({opacity: "hide"}, speed, callback);
|
|
||||||
},
|
|
||||||
|
|
||||||
fadeTo: function(speed,to,callback){
|
|
||||||
return this.animate({opacity: to}, speed, callback);
|
|
||||||
},
|
|
||||||
animate: function(prop,speed,callback) {
|
|
||||||
return this.queue(function(){
|
|
||||||
|
|
||||||
this.curAnim = prop;
|
|
||||||
|
|
||||||
for ( var p in prop ) {
|
|
||||||
var e = new jQuery.fx( this, jQuery.speed(speed,callback), p );
|
|
||||||
if ( prop[p].constructor == Number )
|
|
||||||
e.custom( e.cur(), prop[p] );
|
|
||||||
else
|
|
||||||
e[ prop[p] ]( prop );
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
},
|
|
||||||
queue: function(type,fn){
|
|
||||||
if ( !fn ) {
|
|
||||||
fn = type;
|
|
||||||
type = "fx";
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.each(function(){
|
|
||||||
if ( !this.queue )
|
|
||||||
this.queue = {};
|
|
||||||
|
|
||||||
if ( !this.queue[type] )
|
|
||||||
this.queue[type] = [];
|
|
||||||
|
|
||||||
this.queue[type].push( fn );
|
|
||||||
|
|
||||||
if ( this.queue[type].length == 1 )
|
|
||||||
fn.apply(this);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
jQuery.extend({
|
|
||||||
|
|
||||||
setAuto: function(e,p) {
|
|
||||||
if ( e.notAuto ) return;
|
|
||||||
|
|
||||||
if ( p == "height" && e.scrollHeight != parseInt(jQuery.curCSS(e,p)) ) return;
|
|
||||||
if ( p == "width" && e.scrollWidth != parseInt(jQuery.curCSS(e,p)) ) return;
|
|
||||||
|
|
||||||
// Remember the original height
|
|
||||||
var a = e.style[p];
|
|
||||||
|
|
||||||
// Figure out the size of the height right now
|
|
||||||
var o = jQuery.curCSS(e,p,1);
|
|
||||||
|
|
||||||
if ( p == "height" && e.scrollHeight != o ||
|
|
||||||
p == "width" && e.scrollWidth != o ) return;
|
|
||||||
|
|
||||||
// Set the height to auto
|
|
||||||
e.style[p] = e.currentStyle ? "" : "auto";
|
|
||||||
|
|
||||||
// See what the size of "auto" is
|
|
||||||
var n = jQuery.curCSS(e,p,1);
|
|
||||||
|
|
||||||
// Revert back to the original size
|
|
||||||
if ( o != n && n != "auto" ) {
|
|
||||||
e.style[p] = a;
|
|
||||||
e.notAuto = true;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
speed: function(s,o) {
|
|
||||||
o = o || {};
|
|
||||||
|
|
||||||
if ( o.constructor == Function )
|
|
||||||
o = { complete: o };
|
|
||||||
|
|
||||||
var ss = { slow: 600, fast: 200 };
|
|
||||||
o.duration = (s && s.constructor == Number ? s : ss[s]) || 400;
|
|
||||||
|
|
||||||
// Queueing
|
|
||||||
o.oldComplete = o.complete;
|
|
||||||
o.complete = function(){
|
|
||||||
jQuery.dequeue(this, "fx");
|
|
||||||
if ( o.oldComplete && o.oldComplete.constructor == Function )
|
|
||||||
o.oldComplete.apply( this );
|
|
||||||
};
|
|
||||||
|
|
||||||
return o;
|
|
||||||
},
|
|
||||||
|
|
||||||
queue: {},
|
|
||||||
|
|
||||||
dequeue: function(elem,type){
|
|
||||||
type = type || "fx";
|
|
||||||
|
|
||||||
if ( elem.queue && elem.queue[type] ) {
|
|
||||||
// Remove self
|
|
||||||
elem.queue[type].shift();
|
|
||||||
|
|
||||||
// Get next function
|
|
||||||
var f = elem.queue[type][0];
|
|
||||||
|
|
||||||
if ( f ) f.apply( elem );
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/*
|
|
||||||
* I originally wrote fx() as a clone of moo.fx and in the process
|
|
||||||
* of making it small in size the code became illegible to sane
|
|
||||||
* people. You've been warned.
|
|
||||||
*/
|
|
||||||
|
|
||||||
fx: function( elem, options, prop ){
|
|
||||||
|
|
||||||
var z = this;
|
|
||||||
|
|
||||||
// The users options
|
|
||||||
z.o = {
|
|
||||||
duration: options.duration || 400,
|
|
||||||
complete: options.complete,
|
|
||||||
step: options.step
|
|
||||||
};
|
|
||||||
|
|
||||||
// The element
|
|
||||||
z.el = elem;
|
|
||||||
|
|
||||||
// The styles
|
|
||||||
var y = z.el.style;
|
|
||||||
|
|
||||||
// Simple function for setting a style value
|
|
||||||
z.a = function(){
|
|
||||||
if ( options.step )
|
|
||||||
options.step.apply( elem, [ z.now ] );
|
|
||||||
|
|
||||||
if ( prop == "opacity" )
|
|
||||||
jQuery.attr(y, "opacity", z.now); // Let attr handle opacity
|
|
||||||
else if ( parseInt(z.now) ) // My hate for IE will never die
|
|
||||||
y[prop] = parseInt(z.now) + "px";
|
|
||||||
|
|
||||||
y.display = "block";
|
|
||||||
};
|
|
||||||
|
|
||||||
// Figure out the maximum number to run to
|
|
||||||
z.max = function(){
|
|
||||||
return parseFloat( jQuery.css(z.el,prop) );
|
|
||||||
};
|
|
||||||
|
|
||||||
// Get the current size
|
|
||||||
z.cur = function(){
|
|
||||||
var r = parseFloat( jQuery.curCSS(z.el, prop) );
|
|
||||||
return r && r > -10000 ? r : z.max();
|
|
||||||
};
|
|
||||||
|
|
||||||
// Start an animation from one number to another
|
|
||||||
z.custom = function(from,to){
|
|
||||||
z.startTime = (new Date()).getTime();
|
|
||||||
z.now = from;
|
|
||||||
z.a();
|
|
||||||
|
|
||||||
z.timer = setInterval(function(){
|
|
||||||
z.step(from, to);
|
|
||||||
}, 13);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Simple 'show' function
|
|
||||||
z.show = function( p ){
|
|
||||||
if ( !z.el.orig ) z.el.orig = {};
|
|
||||||
|
|
||||||
// Remember where we started, so that we can go back to it later
|
|
||||||
z.el.orig[prop] = this.cur();
|
|
||||||
|
|
||||||
// Begin the animation
|
|
||||||
if (prop == "opacity")
|
|
||||||
z.custom(z.el.orig[prop], 1);
|
|
||||||
else
|
|
||||||
z.custom(0, z.el.orig[prop]);
|
|
||||||
|
|
||||||
// Stupid IE, look what you made me do
|
|
||||||
if ( prop != "opacity" )
|
|
||||||
y[prop] = "1px";
|
|
||||||
};
|
|
||||||
|
|
||||||
// Simple 'hide' function
|
|
||||||
z.hide = function(){
|
|
||||||
if ( !z.el.orig ) z.el.orig = {};
|
|
||||||
|
|
||||||
// Remember where we started, so that we can go back to it later
|
|
||||||
z.el.orig[prop] = this.cur();
|
|
||||||
|
|
||||||
z.o.hide = true;
|
|
||||||
|
|
||||||
// Begin the animation
|
|
||||||
z.custom(z.el.orig[prop], 0);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Remember the overflow of the element
|
|
||||||
if ( !z.el.oldOverlay )
|
|
||||||
z.el.oldOverflow = jQuery.css( z.el, "overflow" );
|
|
||||||
|
|
||||||
// Make sure that nothing sneaks out
|
|
||||||
y.overflow = "hidden";
|
|
||||||
|
|
||||||
// Each step of an animation
|
|
||||||
z.step = function(firstNum, lastNum){
|
|
||||||
var t = (new Date()).getTime();
|
|
||||||
|
|
||||||
if (t > z.o.duration + z.startTime) {
|
|
||||||
// Stop the timer
|
|
||||||
clearInterval(z.timer);
|
|
||||||
z.timer = null;
|
|
||||||
|
|
||||||
z.now = lastNum;
|
|
||||||
z.a();
|
|
||||||
|
|
||||||
z.el.curAnim[ prop ] = true;
|
|
||||||
|
|
||||||
var done = true;
|
|
||||||
for ( var i in z.el.curAnim )
|
|
||||||
if ( z.el.curAnim[i] !== true )
|
|
||||||
done = false;
|
|
||||||
|
|
||||||
if ( done ) {
|
|
||||||
// Reset the overflow
|
|
||||||
y.overflow = z.el.oldOverflow;
|
|
||||||
|
|
||||||
// Hide the element if the "hide" operation was done
|
|
||||||
if ( z.o.hide )
|
|
||||||
y.display = 'none';
|
|
||||||
|
|
||||||
// Reset the property, if the item has been hidden
|
|
||||||
if ( z.o.hide ) {
|
|
||||||
for ( var p in z.el.curAnim ) {
|
|
||||||
if (p == "opacity" && jQuery.browser.msie)
|
|
||||||
jQuery.attr(y, p, z.el.orig[p]);
|
|
||||||
else
|
|
||||||
y[ p ] = z.el.orig[p] + "px";
|
|
||||||
|
|
||||||
// set its height and/or width to auto
|
|
||||||
if ( p == 'height' || p == 'width' )
|
|
||||||
jQuery.setAuto( z.el, p );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If a callback was provided, execute it
|
|
||||||
if( done && z.o.complete && z.o.complete.constructor == Function )
|
|
||||||
// Execute the complete function
|
|
||||||
z.o.complete.apply( z.el );
|
|
||||||
} else {
|
|
||||||
// Figure out where in the animation we are and set the number
|
|
||||||
var p = (t - this.startTime) / z.o.duration;
|
|
||||||
z.now = ((-Math.cos(p*Math.PI)/2) + 0.5) * (lastNum-firstNum) + firstNum;
|
|
||||||
|
|
||||||
// Perform the next step of the animation
|
|
||||||
z.a();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
jQuery.fn.extend({
|
|
||||||
loadIfModified: function( url, params, callback ) {
|
|
||||||
this.load( url, params, callback, 1 );
|
|
||||||
},
|
|
||||||
load: function( url, params, callback, ifModified ) {
|
|
||||||
if ( url.constructor == Function )
|
|
||||||
return this.bind("load", url);
|
|
||||||
|
|
||||||
callback = callback || function(){};
|
|
||||||
|
|
||||||
// Default to a GET request
|
|
||||||
var type = "GET";
|
|
||||||
|
|
||||||
// If the second parameter was provided
|
|
||||||
if ( params ) {
|
|
||||||
// If it's a function
|
|
||||||
if ( params.constructor == Function ) {
|
|
||||||
// We assume that it's the callback
|
|
||||||
callback = params;
|
|
||||||
params = null;
|
|
||||||
|
|
||||||
// Otherwise, build a param string
|
|
||||||
} else {
|
|
||||||
params = jQuery.param( params );
|
|
||||||
type = "POST";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
// Request the remote document
|
|
||||||
jQuery.ajax( type, url, params,function(res, status){
|
|
||||||
|
|
||||||
if ( status == "success" || !ifModified && status == "notmodified" ) {
|
|
||||||
// Inject the HTML into all the matched elements
|
|
||||||
self.html(res.responseText).each( callback, [res.responseText, status] );
|
|
||||||
|
|
||||||
// Execute all the scripts inside of the newly-injected HTML
|
|
||||||
jQuery("script", self).each(function(){
|
|
||||||
if ( this.src )
|
|
||||||
jQuery.getScript( this.src );
|
|
||||||
else
|
|
||||||
eval.call( window, this.text || this.textContent || this.innerHTML || "" );
|
|
||||||
});
|
|
||||||
} else
|
|
||||||
callback.apply( self, [res.responseText, status] );
|
|
||||||
|
|
||||||
}, ifModified);
|
|
||||||
|
|
||||||
return this;
|
|
||||||
},
|
|
||||||
serialize: function() {
|
|
||||||
return jQuery.param( this );
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
// If IE is used, create a wrapper for the XMLHttpRequest object
|
|
||||||
if ( jQuery.browser.msie && typeof XMLHttpRequest == "undefined" )
|
|
||||||
XMLHttpRequest = function(){
|
|
||||||
return new ActiveXObject(
|
|
||||||
navigator.userAgent.indexOf("MSIE 5") >= 0 ?
|
|
||||||
"Microsoft.XMLHTTP" : "Msxml2.XMLHTTP"
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Attach a bunch of functions for handling common AJAX events
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
new function(){
|
|
||||||
var e = "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess".split(",");
|
|
||||||
|
|
||||||
for ( var i = 0; i < e.length; i++ ) new function(){
|
|
||||||
var o = e[i];
|
|
||||||
jQuery.fn[o] = function(f){
|
|
||||||
return this.bind(o, f);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
jQuery.extend({
|
|
||||||
get: function( url, data, callback, type, ifModified ) {
|
|
||||||
if ( data.constructor == Function ) {
|
|
||||||
type = callback;
|
|
||||||
callback = data;
|
|
||||||
data = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// append ? + data or & + data, in case there are already params
|
|
||||||
if ( data ) url += ((url.indexOf("?") > -1) ? "&" : "?") + jQuery.param(data);
|
|
||||||
|
|
||||||
// Build and start the HTTP Request
|
|
||||||
jQuery.ajax( "GET", url, null, function(r, status) {
|
|
||||||
if ( callback ) callback( jQuery.httpData(r,type), status );
|
|
||||||
}, ifModified);
|
|
||||||
},
|
|
||||||
getIfModified: function( url, data, callback, type ) {
|
|
||||||
jQuery.get(url, data, callback, type, 1);
|
|
||||||
},
|
|
||||||
getScript: function( url, callback ) {
|
|
||||||
jQuery.get(url, callback, "script");
|
|
||||||
},
|
|
||||||
getJSON: function( url, data, callback ) {
|
|
||||||
if(callback)
|
|
||||||
jQuery.get(url, data, callback, "json");
|
|
||||||
else {
|
|
||||||
jQuery.get(url, data, "json");
|
|
||||||
}
|
|
||||||
},
|
|
||||||
post: function( url, data, callback, type ) {
|
|
||||||
// Build and start the HTTP Request
|
|
||||||
jQuery.ajax( "POST", url, jQuery.param(data), function(r, status) {
|
|
||||||
if ( callback ) callback( jQuery.httpData(r,type), status );
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
// timeout (ms)
|
|
||||||
timeout: 0,
|
|
||||||
ajaxTimeout: function(timeout) {
|
|
||||||
jQuery.timeout = timeout;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Last-Modified header cache for next request
|
|
||||||
lastModified: {},
|
|
||||||
ajax: function( type, url, data, ret, ifModified ) {
|
|
||||||
// If only a single argument was passed in,
|
|
||||||
// assume that it is a object of key/value pairs
|
|
||||||
if ( !url ) {
|
|
||||||
ret = type.complete;
|
|
||||||
var success = type.success;
|
|
||||||
var error = type.error;
|
|
||||||
var dataType = type.dataType;
|
|
||||||
var global = typeof type.global == "boolean" ? type.global : true;
|
|
||||||
var timeout = typeof type.timeout == "number" ? type.timeout : jQuery.timeout;
|
|
||||||
var ifModified = type.ifModified || false;
|
|
||||||
data = type.data;
|
|
||||||
url = type.url;
|
|
||||||
type = type.type;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Watch for a new set of requests
|
|
||||||
if ( global && ! jQuery.active++ )
|
|
||||||
jQuery.event.trigger( "ajaxStart" );
|
|
||||||
|
|
||||||
var requestDone = false;
|
|
||||||
|
|
||||||
// Create the request object
|
|
||||||
var xml = new XMLHttpRequest();
|
|
||||||
|
|
||||||
// Open the socket
|
|
||||||
xml.open(type || "GET", url, true);
|
|
||||||
|
|
||||||
// Set the correct header, if data is being sent
|
|
||||||
if ( data )
|
|
||||||
xml.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
|
||||||
|
|
||||||
// Set the If-Modified-Since header, if ifModified mode.
|
|
||||||
if ( ifModified )
|
|
||||||
xml.setRequestHeader("If-Modified-Since",
|
|
||||||
jQuery.lastModified[url] || "Thu, 01 Jan 1970 00:00:00 GMT" );
|
|
||||||
|
|
||||||
// Set header so the called script knows that it's an XMLHttpRequest
|
|
||||||
xml.setRequestHeader("X-Requested-With", "XMLHttpRequest");
|
|
||||||
|
|
||||||
// Make sure the browser sends the right content length
|
|
||||||
if ( xml.overrideMimeType )
|
|
||||||
xml.setRequestHeader("Connection", "close");
|
|
||||||
|
|
||||||
// Wait for a response to come back
|
|
||||||
var onreadystatechange = function(istimeout){
|
|
||||||
// The transfer is complete and the data is available, or the request timed out
|
|
||||||
if ( xml && (xml.readyState == 4 || istimeout == "timeout") ) {
|
|
||||||
requestDone = true;
|
|
||||||
|
|
||||||
var status = jQuery.httpSuccess( xml ) && istimeout != "timeout" ?
|
|
||||||
ifModified && jQuery.httpNotModified( xml, url ) ? "notmodified" : "success" : "error";
|
|
||||||
|
|
||||||
// Make sure that the request was successful or notmodified
|
|
||||||
if ( status != "error" ) {
|
|
||||||
// Cache Last-Modified header, if ifModified mode.
|
|
||||||
var modRes;
|
|
||||||
try {
|
|
||||||
modRes = xml.getResponseHeader("Last-Modified");
|
|
||||||
} catch(e) {} // swallow exception thrown by FF if header is not available
|
|
||||||
|
|
||||||
if ( ifModified && modRes )
|
|
||||||
jQuery.lastModified[url] = modRes;
|
|
||||||
|
|
||||||
// If a local callback was specified, fire it
|
|
||||||
if ( success )
|
|
||||||
success( jQuery.httpData( xml, dataType ), status );
|
|
||||||
|
|
||||||
// Fire the global callback
|
|
||||||
if( global )
|
|
||||||
jQuery.event.trigger( "ajaxSuccess" );
|
|
||||||
|
|
||||||
// Otherwise, the request was not successful
|
|
||||||
} else {
|
|
||||||
// If a local callback was specified, fire it
|
|
||||||
if ( error ) error( xml, status );
|
|
||||||
|
|
||||||
// Fire the global callback
|
|
||||||
if( global )
|
|
||||||
jQuery.event.trigger( "ajaxError" );
|
|
||||||
}
|
|
||||||
|
|
||||||
// The request was completed
|
|
||||||
if( global )
|
|
||||||
jQuery.event.trigger( "ajaxComplete" );
|
|
||||||
|
|
||||||
// Handle the global AJAX counter
|
|
||||||
if ( global && ! --jQuery.active )
|
|
||||||
jQuery.event.trigger( "ajaxStop" );
|
|
||||||
|
|
||||||
// Process result
|
|
||||||
if ( ret ) ret(xml, status);
|
|
||||||
|
|
||||||
// Stop memory leaks
|
|
||||||
xml.onreadystatechange = function(){};
|
|
||||||
xml = null;
|
|
||||||
|
|
||||||
}
|
|
||||||
};
|
|
||||||
xml.onreadystatechange = onreadystatechange;
|
|
||||||
|
|
||||||
// Timeout checker
|
|
||||||
if(timeout > 0)
|
|
||||||
setTimeout(function(){
|
|
||||||
// Check to see if the request is still happening
|
|
||||||
if (xml) {
|
|
||||||
// Cancel the request
|
|
||||||
xml.abort();
|
|
||||||
|
|
||||||
if ( !requestDone ) onreadystatechange( "timeout" );
|
|
||||||
|
|
||||||
// Clear from memory
|
|
||||||
xml = null;
|
|
||||||
}
|
|
||||||
}, timeout);
|
|
||||||
|
|
||||||
// Send the data
|
|
||||||
xml.send(data);
|
|
||||||
},
|
|
||||||
|
|
||||||
// Counter for holding the number of active queries
|
|
||||||
active: 0,
|
|
||||||
|
|
||||||
// Determines if an XMLHttpRequest was successful or not
|
|
||||||
httpSuccess: function(r) {
|
|
||||||
try {
|
|
||||||
return !r.status && location.protocol == "file:" ||
|
|
||||||
( r.status >= 200 && r.status < 300 ) || r.status == 304 ||
|
|
||||||
jQuery.browser.safari && r.status == undefined;
|
|
||||||
} catch(e){}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Determines if an XMLHttpRequest returns NotModified
|
|
||||||
httpNotModified: function(xml, url) {
|
|
||||||
try {
|
|
||||||
var xmlRes = xml.getResponseHeader("Last-Modified");
|
|
||||||
|
|
||||||
// Firefox always returns 200. check Last-Modified date
|
|
||||||
return xml.status == 304 || xmlRes == jQuery.lastModified[url] ||
|
|
||||||
jQuery.browser.safari && xml.status == undefined;
|
|
||||||
} catch(e){}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
|
|
||||||
/* Get the data out of an XMLHttpRequest.
|
|
||||||
* Return parsed XML if content-type header is "xml" and type is "xml" or omitted,
|
|
||||||
* otherwise return plain text.
|
|
||||||
* (String) data - The type of data that you're expecting back,
|
|
||||||
* (e.g. "xml", "html", "script")
|
|
||||||
*/
|
|
||||||
httpData: function(r,type) {
|
|
||||||
var ct = r.getResponseHeader("content-type");
|
|
||||||
var data = !type && ct && ct.indexOf("xml") >= 0;
|
|
||||||
data = type == "xml" || data ? r.responseXML : r.responseText;
|
|
||||||
|
|
||||||
// If the type is "script", eval it
|
|
||||||
if ( type == "script" ) eval.call( window, data );
|
|
||||||
|
|
||||||
// Get the JavaScript object, if JSON is used.
|
|
||||||
if ( type == "json" ) eval( "data = " + data );
|
|
||||||
|
|
||||||
return data;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Serialize an array of form elements or a set of
|
|
||||||
// key/values into a query string
|
|
||||||
param: function(a) {
|
|
||||||
var s = [];
|
|
||||||
|
|
||||||
// If an array was passed in, assume that it is an array
|
|
||||||
// of form elements
|
|
||||||
if ( a.constructor == Array || a.jquery ) {
|
|
||||||
// Serialize the form elements
|
|
||||||
for ( var i = 0; i < a.length; i++ )
|
|
||||||
s.push( a[i].name + "=" + encodeURIComponent( a[i].value ) );
|
|
||||||
|
|
||||||
// Otherwise, assume that it's an object of key/value pairs
|
|
||||||
} else {
|
|
||||||
// Serialize the key/values
|
|
||||||
for ( var j in a )
|
|
||||||
s.push( j + "=" + encodeURIComponent( a[j] ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return the resulting serialization
|
|
||||||
return s.join("&");
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
} // close: if(typeof window.jQuery == "undefined") {
|
|
98
thirdparty/greybox/test.html
vendored
98
thirdparty/greybox/test.html
vendored
@ -1,98 +0,0 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
|
||||||
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
|
||||||
<head>
|
|
||||||
<title>GreyBox Redux</title>
|
|
||||||
<script type="text/javascript" src="jquery-1.0.2.js"></script>
|
|
||||||
<script type="text/javascript" src="greybox.js"></script>
|
|
||||||
<link href="greybox.css" rel="stylesheet" type="text/css" media="all" />
|
|
||||||
<!-- This CSS supports only IE 5.5 +. The conditional below
|
|
||||||
just for the sake of brevity.
|
|
||||||
-->
|
|
||||||
<!--[if lt IE 7]>
|
|
||||||
<link href="ie-hacks.css" rel="stylesheet" type="text/css" media="all" />
|
|
||||||
<![endif]-->
|
|
||||||
<script type="text/javascript">
|
|
||||||
$(document).ready(function(){
|
|
||||||
var myCallback = function() {
|
|
||||||
alert('Callback on close');
|
|
||||||
}
|
|
||||||
|
|
||||||
$("a.greybox").click(function(){
|
|
||||||
var t = $(this).title() || $(this).text() || $(this).href();
|
|
||||||
$.GB_show($(this).href(), {
|
|
||||||
height: 400,
|
|
||||||
width: 400,
|
|
||||||
animation: false,
|
|
||||||
overlay_clickable: true,
|
|
||||||
caption: t
|
|
||||||
});
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
$("a.greybox_no").click(function(){
|
|
||||||
var t = $(this).title() || $(this).text() || $(this).href();
|
|
||||||
$.GB_show($(this).href(), {
|
|
||||||
height: 400,
|
|
||||||
width: 400,
|
|
||||||
animation: false,
|
|
||||||
overlay_clickable: false,
|
|
||||||
caption: t
|
|
||||||
});
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
$("a.greybox_ani").click(function(){
|
|
||||||
var t = $(this).title() || $(this).text() || $(this).href();
|
|
||||||
$.GB_show($(this).href(), {
|
|
||||||
height: 400,
|
|
||||||
width: 400,
|
|
||||||
animation: true,
|
|
||||||
overlay_clickable: true,
|
|
||||||
caption: t
|
|
||||||
});
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
$("a.greybox_no_cb").click(function(){
|
|
||||||
var t = $(this).title() || $(this).text() || $(this).href();
|
|
||||||
$.GB_show($(this).href(), {
|
|
||||||
height: 400,
|
|
||||||
width: 400,
|
|
||||||
animation: false,
|
|
||||||
overlay_clickable: false,
|
|
||||||
callback: myCallback,
|
|
||||||
caption: t
|
|
||||||
});
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
$("a.greybox_no_cb_of").click(function(){
|
|
||||||
var t = $(this).title() || $(this).text() || $(this).href();
|
|
||||||
$.GB_show($(this).href(), {
|
|
||||||
height: 400,
|
|
||||||
width: 400,
|
|
||||||
animation: false,
|
|
||||||
overlay_clickable: false,
|
|
||||||
overflow: "hidden",
|
|
||||||
callback: myCallback,
|
|
||||||
caption: t
|
|
||||||
});
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>Greybox Redux (Reworked)</h1>
|
|
||||||
|
|
||||||
<p>Reworked original greybox redux at
|
|
||||||
<a href="http://jquery.com/demo/grey/">http://jquery.com/demo/grey/</a></p>
|
|
||||||
|
|
||||||
<h2 id="headline">See it in action:</h2>
|
|
||||||
<ul>
|
|
||||||
<li><a href="http://google.com/" title="Google" class="greybox_no">Launch Google</a> (Overlay not clickable)</li>
|
|
||||||
<li><a href="http://yahoo.com/" title="Yahoo" class="greybox">Visit Yahoo</a> (Overlay clickable)</li>
|
|
||||||
<li><a href="http://msn.com/" class="greybox_ani">Microsoft would like a visit.</a> (overlay clickable, animated)</li>
|
|
||||||
<li><a href="http://jquery.com/" class="greybox_no_cb">jQuery Rocks!</a> (Overlay not-clickable, callback alert)</li>
|
|
||||||
<li><a href="http://jquery.com/" class="greybox_no_cb_of">jQuery Rocks!</a> (Overlay not-clickable, callback alert, firefox only: greybox overflow set to hidden)</li>
|
|
||||||
</ul>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Loading…
Reference in New Issue
Block a user