aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AUTHORS.txt6
-rw-r--r--GPL-LICENSE.txt278
-rw-r--r--build/core.json67
-rw-r--r--build/effect.json38
-rw-r--r--build/interaction.json36
-rwxr-xr-xbuild/release/prepare-release336
-rw-r--r--build/release/release.js399
-rw-r--r--build/tasks/build.js79
-rw-r--r--build/tasks/testswarm.js69
-rw-r--r--build/widget.json98
-rw-r--r--demos/spinner/currency.html2
-rw-r--r--grunt.js6
-rw-r--r--package.json124
-rw-r--r--tests/jquery.simulate.js2
-rw-r--r--tests/unit/dialog/dialog_tickets.js2
-rw-r--r--tests/unit/menu/menu_events.js18
-rw-r--r--tests/unit/slider/slider_core.js8
-rw-r--r--tests/unit/slider/slider_events.js6
-rw-r--r--tests/unit/slider/slider_methods.js19
-rw-r--r--tests/unit/slider/slider_options.js12
-rw-r--r--tests/unit/tabs/tabs_core.js18
-rw-r--r--tests/visual/effects/effects.css4
-rw-r--r--themes/base/jquery.ui.accordion.css2
-rw-r--r--themes/base/jquery.ui.all.css2
-rw-r--r--themes/base/jquery.ui.autocomplete.css2
-rw-r--r--themes/base/jquery.ui.base.css2
-rw-r--r--themes/base/jquery.ui.button.css2
-rw-r--r--themes/base/jquery.ui.core.css2
-rw-r--r--themes/base/jquery.ui.datepicker.css2
-rw-r--r--themes/base/jquery.ui.dialog.css2
-rw-r--r--themes/base/jquery.ui.menu.css2
-rw-r--r--themes/base/jquery.ui.progressbar.css2
-rw-r--r--themes/base/jquery.ui.resizable.css2
-rw-r--r--themes/base/jquery.ui.selectable.css2
-rw-r--r--themes/base/jquery.ui.slider.css2
-rw-r--r--themes/base/jquery.ui.spinner.css2
-rw-r--r--themes/base/jquery.ui.tabs.css2
-rw-r--r--themes/base/jquery.ui.theme.css2
-rw-r--r--themes/base/jquery.ui.tooltip.css2
-rw-r--r--ui/jquery.ui.accordion.js2
-rw-r--r--ui/jquery.ui.autocomplete.js6
-rw-r--r--ui/jquery.ui.button.js2
-rw-r--r--ui/jquery.ui.core.js2
-rw-r--r--ui/jquery.ui.datepicker.js15
-rw-r--r--ui/jquery.ui.dialog.js2
-rw-r--r--ui/jquery.ui.draggable.js2
-rw-r--r--ui/jquery.ui.droppable.js2
-rw-r--r--ui/jquery.ui.effect-blind.js6
-rw-r--r--ui/jquery.ui.effect-bounce.js2
-rw-r--r--ui/jquery.ui.effect-clip.js2
-rw-r--r--ui/jquery.ui.effect-drop.js4
-rw-r--r--ui/jquery.ui.effect-explode.js2
-rw-r--r--ui/jquery.ui.effect-fade.js2
-rw-r--r--ui/jquery.ui.effect-fold.js2
-rw-r--r--ui/jquery.ui.effect-highlight.js2
-rw-r--r--ui/jquery.ui.effect-pulsate.js2
-rw-r--r--ui/jquery.ui.effect-scale.js2
-rw-r--r--ui/jquery.ui.effect-shake.js2
-rw-r--r--ui/jquery.ui.effect-slide.js6
-rw-r--r--ui/jquery.ui.effect-transfer.js2
-rw-r--r--ui/jquery.ui.effect.js2
-rw-r--r--ui/jquery.ui.menu.js46
-rw-r--r--ui/jquery.ui.mouse.js10
-rw-r--r--ui/jquery.ui.position.js2
-rw-r--r--ui/jquery.ui.progressbar.js2
-rw-r--r--ui/jquery.ui.resizable.js2
-rw-r--r--ui/jquery.ui.selectable.js2
-rw-r--r--ui/jquery.ui.slider.js2
-rw-r--r--ui/jquery.ui.sortable.js4
-rw-r--r--ui/jquery.ui.spinner.js2
-rw-r--r--ui/jquery.ui.tabs.js2
-rw-r--r--ui/jquery.ui.tooltip.js2
-rw-r--r--ui/jquery.ui.widget.js2
73 files changed, 947 insertions, 863 deletions
diff --git a/AUTHORS.txt b/AUTHORS.txt
index c2947b2b7..194d5cb60 100644
--- a/AUTHORS.txt
+++ b/AUTHORS.txt
@@ -194,3 +194,9 @@ Pavel Stetina <pavel.stetina@nangu.tv>
Mike Stay <metaweta@gmail.com>
Steven Roussey <sroussey@gmail.com>
Mike Hollis <hollis21@gmail.com>
+Lee Rowlands <lee.rowlands@previousnext.com.au>
+Timmy Willison <timmywillisn@gmail.com>
+Karl Swedberg <kswedberg@gmail.com>
+Baoju Yuan <the_guy_1987@hotmail.com>
+Maciej Mroziński <mrozik87@gmail.com>
+Luis Dalmolin <luis.nh@gmail.com>
diff --git a/GPL-LICENSE.txt b/GPL-LICENSE.txt
deleted file mode 100644
index 11dddd00e..000000000
--- a/GPL-LICENSE.txt
+++ /dev/null
@@ -1,278 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 51 Franklin Street, 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.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, 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 or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-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 give any other recipients of the Program a copy of this License
-along with the Program.
-
-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 Program or any portion
-of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-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 Program, 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 Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) 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; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, 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 executable. However, as a
-special exception, the source code 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.
-
-If distribution of executable or 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 counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program 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.
-
- 5. 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 Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program 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 to
-this License.
-
- 7. 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 Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program 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 Program.
-
-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.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program 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.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the 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 Program
-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 Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, 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
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "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 PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. 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 PROGRAM 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 PROGRAM (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 PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
diff --git a/build/core.json b/build/core.json
new file mode 100644
index 000000000..deeb2e118
--- /dev/null
+++ b/build/core.json
@@ -0,0 +1,67 @@
+{
+ "core": {
+ "description": "The core of jQuery UI, required for all interactions and widgets.",
+ "homepage": "http://jqueryui.com/",
+ "demo": "http://jqueryui.com/",
+ "docs": "http://api.jqueryui.com/category/ui-core/"
+ },
+ "datepicker": {
+ "description": "Displays a calendar from an input or inline for selecting dates.",
+ "dependencies": [ "core" ],
+ "keywords": [
+ "form",
+ "calendar",
+ "date",
+ "i18n"
+ ],
+ "category": "widget"
+ },
+ "effect": {
+ "title": "jQuery UI Effects Core",
+ "description": "Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects.",
+ "keywords": [
+ "animation",
+ "show",
+ "hide",
+ "color",
+ "class",
+ "transition",
+ "easing"
+ ],
+ "category": "effect",
+ "homepage": "http://jqueryui.com/",
+ "demo": "http://jqueryui.com/effects/",
+ "docs": "http://api.jqueryui.com/category/effects-core/"
+ },
+ "position": {
+ "description": "Positions elements relative to other elements.",
+ "keywords": [
+ "offset",
+ "relative",
+ "absolute",
+ "fixed",
+ "collision"
+ ]
+ },
+ "transfer": {
+ "name": "ui.effect-transfer",
+ "title": "jQuery UI Transfer Effect",
+ "description": "Displays a transfer effect from one element to another.",
+ "keywords": [
+ "effect"
+ ],
+ "homepage": "http://jqueryui.com/transfer-effect/",
+ "demo": "http://jqueryui.com/transfer-effect/",
+ "docs": "http://api.jqueryui.com/transfer-effect/",
+ "dependencies": [ "effect" ],
+ "category": "effect"
+ },
+ "widget": {
+ "description": "Provides a factory for creating stateful widgets with a common API.",
+ "keywords": [
+ "abstraction",
+ "state",
+ "factory"
+ ]
+ }
+}
diff --git a/build/effect.json b/build/effect.json
new file mode 100644
index 000000000..7119f85bc
--- /dev/null
+++ b/build/effect.json
@@ -0,0 +1,38 @@
+{
+ "blind": {
+ "description": "Blinds the element."
+ },
+ "bounce": {
+ "description": "Bounces an element horizontally or vertically n times."
+ },
+ "clip": {
+ "description": "Clips the element on and off like an old TV."
+ },
+ "drop": {
+ "description": "Moves an element in one direction and hides it at the same time."
+ },
+ "explode": {
+ "description": "Explodes an element in all directions into n pieces. Implodes an element to its original wholeness."
+ },
+ "fade": {
+ "description": "Fades an element."
+ },
+ "fold": {
+ "description": "Folds an element first horizontally and then vertically."
+ },
+ "highlight": {
+ "description": "Highlights the background of an element in a defined color for a custom duration."
+ },
+ "pulsate": {
+ "description": "Pulsates an element n times by changing the opacity to zero and back."
+ },
+ "scale": {
+ "description": "Grows or shrinks an element and its content. Restores an elemnt to its original size."
+ },
+ "shake": {
+ "description": "Shakes an element horizontally or vertically n times."
+ },
+ "slide": {
+ "description": "Slides an element in and out of the viewport."
+ }
+}
diff --git a/build/interaction.json b/build/interaction.json
new file mode 100644
index 000000000..d964c4ac3
--- /dev/null
+++ b/build/interaction.json
@@ -0,0 +1,36 @@
+{
+ "draggable": {
+ "description": "Enables dragging functionality for any element.",
+ "keywords": [
+ "drag",
+ "drop"
+ ]
+ },
+ "droppable": {
+ "dependencies": [ "draggable" ],
+ "description": "Enables drop targets for draggable elements.",
+ "keywords": [
+ "drag",
+ "drop"
+ ]
+ },
+ "resizable": {
+ "description": "Enables resize functionality for any element.",
+ "keywords": [
+ "resize"
+ ]
+ },
+ "selectable": {
+ "description": "Allows groups of elements to be selected with the mouse.",
+ "keywords": [
+ "selection"
+ ]
+ },
+ "sortable": {
+ "description": "Enables items in a list to be sorted using the mouse.",
+ "keywords": [
+ "sort",
+ "list"
+ ]
+ }
+} \ No newline at end of file
diff --git a/build/release/prepare-release b/build/release/prepare-release
deleted file mode 100755
index 91665e1eb..000000000
--- a/build/release/prepare-release
+++ /dev/null
@@ -1,336 +0,0 @@
-#!/bin/sh
-
-base_dir="`pwd`/jquery-ui-release"
-repo_dir="$base_dir/jquery-ui"
-release_dir="$repo_dir/build/release"
-
-github_repo="git@github.com:jquery/jquery-ui.git"
-remote_cmd="ssh jqadmin@ui-dev.jquery.com /srv/dev.jqueryui.com/prepare-release"
-
-
-
-#
-# Setup environment
-#
-
-echo
-echo "--------------------------"
-echo "| SETTING UP ENVIRONMENT |"
-echo "--------------------------"
-echo
-
-mkdir $base_dir
-cd $base_dir
-
-echo "Cloning repo from $github_repo..."
-git clone $github_repo
-cd $repo_dir
-
-echo
-echo "Environment setup complete."
-echo
-
-
-
-#
-# Figure out which versions we're dealing with
-#
-
-echo
-echo "------------------------"
-echo "| CALCULATING VERSIONS |"
-echo "------------------------"
-echo
-
-# NOTE: this will be different for minor and major releases
-version=`$remote_cmd/get-latest-version`
-major_minor=${version%.*}
-point=${version##*.}
-version_new="${major_minor}.$(($point + 1))"
-version_next=`cat version.txt`
-
-echo "We are going from $version to $version_new."
-echo "version.txt will be set to $version_next when complete."
-echo "Press enter to continue, or ctrl+c to cancel."
-read
-
-
-#
-# Generate shell for changelog
-#
-
-echo
-echo "------------------------"
-echo "| GENERATING CHANGELOG |"
-echo "------------------------"
-echo
-
-echo "Creating shell for changelog..."
-changelog_url="http:\/\/docs.jquery.com\/action\/edit\/UI\/Changelog\/$version_new"
-`sed "s/CHANGELOG_URL/$changelog_url/" <$release_dir/changelog-shell >$base_dir/changelog`
-
-
-# find all commits
-echo "Adding commits to changelog..."
-format_ticket='[http://dev.jqueryui.com/ticket/XXXX #XXXX]'
-format_commit='[http://github.com/jquery/jquery-ui/commit/%H %h]'
-format_full="* %s ($format_ticket, $format_commit)"
-git whatchanged $version... --pretty=format:"$format_full" \
- -- ui themes demos build \
-| sed '/^:/ d' \
-| sed '/^$/ d' \
-| sed 's/\(Fixe[sd] #\)\([0-9][0-9]*\)\(.*\)\(XXXX #XXXX\)/Fixed #\2\3\2 #\2/' \
-| LC_ALL='C' sort -f \
->> $base_dir/changelog
-
-# find all fixed tickets
-echo "Adding Trac tickets to changelog..."
-$remote_cmd/generate-changelog >> $base_dir/changelog
-
-echo
-echo "Changelog complete."
-echo
-
-
-
-#
-# Generate list of contributors
-#
-
-echo
-echo "--------------------------"
-echo "| GATHERING CONTRIBUTORS |"
-echo "--------------------------"
-echo
-
-
-# find all committers and authors
-echo "Adding commiters and authors..."
-format_contributors='%aN%n%cN'
-git whatchanged $version... --pretty=format:"$format_contributors" \
-| sed '/^:/ d' \
-| sed '/^$/ d' \
-> $base_dir/thankyou
-
-# find all reporters and commenters from Trac
-echo "Adding reporters and commenters from Trac..."
-$remote_cmd/generate-contributors >> $base_dir/thankyou
-
-# sort names
-echo "Sorting contributors..."
-LC_ALL='C' sort -f $base_dir/thankyou | uniq > $base_dir/_thankyou
-mv $base_dir/_thankyou $base_dir/thankyou
-
-# find all people that were thanked
-echo "Adding people thanked in commits..."
-git whatchanged $version... \
-| grep -i thank \
->> $base_dir/thankyou
-
-echo
-echo "Find contributors from duplicates of fixed tickets and add them to:"
-echo "$base_dir/thankyou"
-echo "Press enter when done."
-read
-
-echo
-echo "Contributors list complete."
-echo
-
-
-
-#
-# Update version
-#
-
-echo
-echo "--------------------"
-echo "| UPDATING VERSION |"
-echo "--------------------"
-echo
-
-echo "Updating version.txt to $version_new..."
-echo $version_new > version.txt
-
-git commit -a -m "Tagging the $version_new release."
-version_new_time=`git log -1 --pretty=format:"%ad"`
-echo "Committed version.txt at $version_new_time..."
-
-echo "Tagging $version_new..."
-git tag $version_new
-
-echo "Updating version.txt to $version_next..."
-echo $version_next > version.txt
-
-git commit -a -m "Updating the master version to $version_next"
-echo "Committed version.txt..."
-
-echo
-echo "Version update complete."
-echo
-
-
-
-#
-# Push to GitHub
-#
-
-echo
-echo "---------------------"
-echo "| PUSHING TO GITHUB |"
-echo "---------------------"
-echo
-
-echo "Please review the output and generated files as a sanity check."
-echo "Press enter to continue or ctrl+c to abort."
-read
-
-git push
-git push --tags
-
-echo
-echo "Push to GitHub complete."
-echo
-
-
-
-#
-# Update Trac
-#
-
-echo
-echo "-----------------"
-echo "| UPDATING TRAC |"
-echo "-----------------"
-echo
-
-# TODO: automate this
-# NOTE: this will be different for minor and major releases
-milestone=`$remote_cmd/get-latest-milestone`
-
-# Create new milestrone and version
-echo "$version_new was tagged at $version_new_time."
-echo "Create and close the $version_new Milestone with the above date and time."
-echo "Create the $version_new Version with the above date and time."
-echo "Press enter when done."
-read
-
-# Update milestone for all fixed tickets
-echo "Change all $milestone fixed tickets to $version_new."
-echo "Press enter when done."
-read
-
-echo
-echo "Trac updates complete."
-echo
-
-
-
-#
-# Build jQuery UI
-#
-
-echo
-echo "----------------------"
-echo "| BUILDING JQUERY UI |"
-echo "----------------------"
-echo
-
-# check out the tagged version
-echo "Checking out $version_new..."
-git checkout $version_new
-cd build
-
-# Update the link to the docs (never contains the patch version)
-echo "Updating URL for API docs..."
-sed "s/UI\/API\/\${release\.version}/UI\/API\/$major_minor/" build.xml >build.xml.tmp
-mv build.xml.tmp build.xml
-
-# Run the build
-echo "Running build..."
-ant
-
-echo
-echo "Build complete."
-echo
-
-
-
-#
-# Upload zip to Google Code
-#
-
-echo
-echo "----------------------"
-echo "| UPDATE GOOGLE CODE |"
-echo "----------------------"
-echo
-
-echo "Upload zip to Google Code."
-echo " http://code.google.com/p/jquery-ui/downloads/entry"
-echo " Summary: jQuery UI $version_new (Source, demos, docs, themes, tests) STABLE"
-echo " Labels: Featured, Type-Source, OpSys-All"
-echo "Modify the previous release to no longer say STABLE at the end."
-echo "Remove the featured label from the previous release."
-echo "Press enter when done."
-read
-
-echo
-echo "Google Code update complete."
-echo
-
-
-
-#
-# Update SVN
-#
-
-echo
-echo "----------------"
-echo "| UPDATING SVN |"
-echo "----------------"
-echo
-
-cd $base_dir
-mkdir svn
-cd svn
-
-echo "Checking out SVN tags..."
-svn co --depth immediates https://jquery-ui.googlecode.com/svn/tags
-cd tags
-
-echo "Unzipping build into tags/$version_new..."
-unzip $repo_dir/build/dist/jquery-ui-$version_new.zip
-mv jquery-ui-$version_new $version_new
-
-echo "Adding files to SVN..."
-svn add $version_new
-
-echo "Setting svn:mime-type..."
-find $version_new -name \*.js -exec svn propset svn:mime-type text/javascript {} \;
-find $version_new -name \*.css -exec svn propset svn:mime-type text/css {} \;
-find $version_new -name \*.html -exec svn propset svn:mime-type text/html {} \;
-find $version_new -name \*.png -exec svn propset svn:mime-type image/png {} \;
-find $version_new -name \*.gif -exec svn propset svn:mime-type image/gif {} \;
-
-# TODO: commit
-echo
-echo "svn commit with the following message:"
-echo "Created $version_new tag from http://jquery-ui.googlecode.com/files/jquery-ui-$version_new.zip"
-echo "Press enter when done."
-read
-
-echo
-echo "SVN update complete."
-echo
-
-
-
-#
-# Generate themes
-#
-
-
-
-
-# ruby -e 'puts File.read("thankyou").split("\n").join(", ")' > thankyou2
diff --git a/build/release/release.js b/build/release/release.js
new file mode 100644
index 000000000..27759d4d2
--- /dev/null
+++ b/build/release/release.js
@@ -0,0 +1,399 @@
+#!/usr/bin/env node
+
+var baseDir, repoDir, prevVersion, newVersion, nextVersion, tagTime,
+ fs = require( "fs" ),
+ path = require( "path" ),
+ // support: node <0.8
+ existsSync = fs.existsSync || path.existsSync,
+ rnewline = /\r?\n/,
+ repo = "git@github.com:jquery/jquery-ui.git",
+ branch = "master";
+
+walk([
+ bootstrap,
+
+ section( "setting up repo" ),
+ cloneRepo,
+ checkState,
+
+ section( "calculating versions" ),
+ getVersions,
+ confirm,
+
+ section( "building release" ),
+ buildRelease,
+
+ section( "pushing tag" ),
+ confirmReview,
+ pushRelease,
+
+ section( "updating branch version" ),
+ updateBranchVersion,
+
+ section( "pushing " + branch ),
+ confirmReview,
+ pushBranch,
+
+ section( "generating changelog" ),
+ generateChangelog,
+
+ section( "gathering contributors" ),
+ gatherContributors,
+
+ section( "updating trac" ),
+ updateTrac,
+ confirm
+
+ // TODO: upload release zip to GitHub
+]);
+
+
+
+
+
+function cloneRepo() {
+ echo( "Cloning " + repo.cyan + "..." );
+ git( "clone " + repo + " " + repoDir, "Error cloning repo." );
+ cd( repoDir );
+
+ echo( "Checking out " + branch.cyan + " branch..." );
+ git( "checkout " + branch, "Error checking out branch." );
+ echo();
+
+ echo( "Installing dependencies..." );
+ if ( exec( "npm install" ).code !== 0 ) {
+ abort( "Error installing dependencies." );
+ }
+ echo();
+}
+
+function checkState() {
+ echo( "Checking AUTHORS.txt..." );
+ var result, lastActualAuthor,
+ lastListedAuthor = cat( "AUTHORS.txt" ).trim().split( rnewline ).pop();
+
+ result = exec( "grunt authors", { silent: true });
+ if ( result.code !== 0 ) {
+ abort( "Error getting list of authors." );
+ }
+ lastActualAuthor = result.output.split( rnewline ).splice( -4, 1 )[ 0 ];
+
+ if ( lastListedAuthor !== lastActualAuthor ) {
+ echo( "Last listed author is " + lastListedAuthor.red + "." );
+ echo( "Last actual author is " + lastActualAuthor.green + "." );
+ abort( "Please update AUTHORS.txt." );
+ }
+
+ echo( "Last listed author (" + lastListedAuthor.cyan + ") is correct." );
+}
+
+function getVersions() {
+ // prevVersion, newVersion, nextVersion are defined in the parent scope
+ var parts, major, minor, patch,
+ currentVersion = readPackage().version;
+
+ echo( "Validating current version..." );
+ if ( currentVersion.substr( -3, 3 ) !== "pre" ) {
+ echo( "The current version is " + currentVersion.red + "." );
+ abort( "The version must be a pre version." );
+ }
+
+ newVersion = currentVersion.substr( 0, currentVersion.length - 3 );
+ parts = newVersion.split( "." );
+ major = parseInt( parts[ 0 ], 10 );
+ minor = parseInt( parts[ 1 ], 10 );
+ patch = parseInt( parts[ 2 ], 10 );
+ // TODO: handle 2.0.0
+ if ( minor === 0 ) {
+ abort( "This script is not smart enough to handle the 2.0.0 release." );
+ }
+ prevVersion = patch === 0 ?
+ [ major, minor - 1, 0 ].join( "." ) :
+ [ major, minor, patch - 1 ].join( "." );
+ // TODO: Remove version hack after 1.9.0 release
+ if ( prevVersion === "1.8.0" ) {
+ prevVersion = "1.8";
+ }
+ nextVersion = [ major, minor, patch + 1 ].join( "." ) + "pre";
+
+ echo( "We are going from " + prevVersion.cyan + " to " + newVersion.cyan + "." );
+ echo( "After the release, the version will be " + nextVersion.cyan + "." );
+}
+
+function buildRelease() {
+ var pkg;
+
+ echo( "Creating " + "release".cyan + " branch..." );
+ git( "checkout -b release", "Error creating release branch." );
+ echo();
+
+ echo( "Updating package.json..." );
+ pkg = readPackage();
+ pkg.version = newVersion;
+ pkg.licenses.forEach(function( license ) {
+ license.url = license.url.replace( "master", newVersion );
+ });
+ writePackage( pkg );
+
+ echo( "Generating manifest files..." );
+ if ( exec( "grunt manifest" ).code !== 0 ) {
+ abort( "Error generating manifest files." );
+ }
+ echo();
+
+ echo( "Building release..." );
+ // TODO: Build themes
+ if ( exec( "grunt release" ).code !== 0 ) {
+ abort( "Error building release." );
+ }
+ echo();
+
+ echo( "Committing release artifacts..." );
+ git( "add *.jquery.json", "Error adding manifest files to git." );
+ git( "commit -am 'Tagging the " + newVersion + " release.'",
+ "Error committing release changes." );
+ echo();
+
+ echo( "Tagging release..." );
+ git( "tag " + newVersion, "Error tagging " + newVersion + "." );
+ tagTime = git( "log -1 --format='%ad'", "Error getting tag timestamp." ).trim();
+}
+
+function pushRelease() {
+ echo( "Pushing release to GitHub..." );
+ git( "push --tags", "Error pushing tags to GitHub." );
+}
+
+function updateBranchVersion() {
+ var pkg;
+
+ echo( "Checking out " + branch.cyan + " branch..." );
+ git( "checkout " + branch, "Error checking out " + branch + " branch." );
+
+ echo( "Updating package.json..." );
+ pkg = readPackage();
+ pkg.version = nextVersion;
+ writePackage( pkg );
+
+ echo( "Committing version update..." );
+ git( "commit -am 'Updating the " + branch + " version to " + nextVersion + ".'",
+ "Error committing package.json." );
+}
+
+function pushBranch() {
+ echo( "Pushing " + branch.cyan + " to GitHub..." );
+ git( "push", "Error pushing to GitHub." );
+}
+
+function generateChangelog() {
+ var commits,
+ changelogPath = baseDir + "/changelog",
+ changelog = cat( "build/release/changelog-shell" ) + "\n",
+ fullFormat = "* %s (TICKETREF, [http://github.com/jquery/jquery-ui/commit/%H %h])";
+
+ echo ( "Adding commits..." );
+ commits = gitLog( fullFormat );
+
+ echo( "Adding links to tickets..." );
+ changelog += commits
+ // Add ticket references
+ .map(function( commit ) {
+ var tickets = [];
+ commit.replace( /Fixe[sd] #(\d+)/g, function( match, ticket ) {
+ tickets.push( ticket );
+ });
+ return tickets.length ?
+ commit.replace( "TICKETREF", tickets.map(function( ticket ) {
+ return "[http://bugs.jqueryui.com/ticket/" + ticket + " #" + ticket + "]";
+ }).join( ", " ) ) :
+ // Leave TICKETREF token in place so it's easy to find commits without tickets
+ commit;
+ })
+ // Sort commits so that they're grouped by component
+ .sort()
+ .join( "\n" ) + "\n";
+
+ echo( "Adding Trac tickets..." );
+ changelog += trac( "/query?milestone=" + newVersion + "&resolution=fixed" +
+ "&col=id&col=component&col=summary&order=component" ) + "\n";
+
+ fs.writeFileSync( changelogPath, changelog );
+ echo( "Stored changelog in " + changelogPath.cyan + "." );
+}
+
+function gatherContributors() {
+ var contributors,
+ contributorsPath = baseDir + "/contributors";
+
+ echo( "Adding committers and authors..." );
+ contributors = gitLog( "%aN%n%cN" );
+
+ echo( "Adding reporters and commenters from Trac..." );
+ contributors = contributors.concat(
+ trac( "/report/22?V=" + newVersion + "&max=-1" )
+ .split( rnewline )
+ // Remove header and trailing newline
+ .slice( 1, -1 ) );
+
+ echo( "Sorting contributors..." );
+ contributors = unique( contributors ).sort(function( a, b ) {
+ return a.toLowerCase() < b.toLowerCase() ? -1 : 1;
+ });
+
+ echo ( "Adding people thanked in commits..." );
+ contributors = contributors.concat(
+ gitLog( "%b%n%s" ).filter(function( line ) {
+ return /thank/i.test( line );
+ }));
+
+ fs.writeFileSync( contributorsPath, contributors.join( "\n" ) );
+ echo( "Stored contributors in " + contributorsPath.cyan + "." );
+}
+
+function updateTrac() {
+ echo( newVersion.cyan + " was tagged at " + tagTime.cyan + "." );
+ echo( "Close the " + newVersion.cyan + " Milestone with the above date and time." );
+ echo( "Create the " + newVersion.cyan + " Version with the above date and time." );
+ echo( "Create a Milestone for the next minor release." );
+}
+
+
+
+
+
+// ===== HELPER FUNCTIONS ======================================================
+
+function git( command, errorMessage ) {
+ var result = exec( "git " + command );
+ if ( result.code !== 0 ) {
+ abort( errorMessage );
+ }
+
+ return result.output;
+}
+
+function gitLog( format ) {
+ var result = exec( "git log " + prevVersion + ".." + newVersion + " " +
+ "--format='" + format + "'",
+ { silent: true });
+
+ if ( result.code !== 0 ) {
+ abort( "Error getting git log." );
+ }
+
+ result = result.output.split( rnewline );
+ if ( result[ result.length - 1 ] === "" ) {
+ result.pop();
+ }
+
+ return result;
+}
+
+function trac( path ) {
+ var result = exec( "curl -s 'http://bugs.jqueryui.com" + path + "&format=tab'",
+ { silent: true });
+
+ if ( result.code !== 0 ) {
+ abort( "Error getting Trac data." );
+ }
+
+ return result.output;
+}
+
+function unique( arr ) {
+ var obj = {};
+ arr.forEach(function( item ) {
+ obj[ item ] = 1;
+ });
+ return Object.keys( obj );
+}
+
+function readPackage() {
+ return JSON.parse( fs.readFileSync( repoDir + "/package.json" ) );
+}
+
+function writePackage( pkg ) {
+ fs.writeFileSync( repoDir + "/package.json",
+ JSON.stringify( pkg, null, "\t" ) + "\n" );
+}
+
+function bootstrap( fn ) {
+ console.log( "Determining directories..." );
+ baseDir = process.cwd() + "/__release";
+ repoDir = baseDir + "/repo";
+
+ if ( existsSync( baseDir ) ) {
+ console.log( "The directory '" + baseDir + "' already exists." );
+ console.log( "Aborting." );
+ process.exit( 1 );
+ }
+
+ console.log( "Creating directory..." );
+ fs.mkdirSync( baseDir );
+
+ console.log( "Installing dependencies..." );
+ require( "child_process" ).exec( "npm install shelljs colors", {
+ cwd: baseDir
+ }, function( error ) {
+ if ( error ) {
+ console.log( error );
+ return process.exit( 1 );
+ }
+
+ require( baseDir + "/node_modules/shelljs/global" );
+ require( baseDir + "/node_modules/colors" );
+
+ fn();
+ });
+}
+
+function section( name ) {
+ return function() {
+ echo();
+ echo( "##" );
+ echo( "## " + name.toUpperCase().magenta );
+ echo( "##" );
+ echo();
+ };
+}
+
+function prompt( fn ) {
+ process.stdin.once( "data", function( chunk ) {
+ process.stdin.pause();
+ fn( chunk.toString().trim() );
+ });
+ process.stdin.resume();
+}
+
+function confirm( fn ) {
+ echo( "Press enter to continue, or ctrl+c to cancel.".yellow );
+ prompt( fn );
+}
+
+function confirmReview( fn ) {
+ echo( "Please review the output and generated files as a sanity check.".yellow );
+ confirm( fn );
+}
+
+function abort( msg ) {
+ echo( msg.red );
+ echo( "Aborting.".red );
+ exit( 1 );
+}
+
+function walk( methods ) {
+ var method = methods.shift();
+
+ function next( error ) {
+ if ( methods.length ) {
+ walk( methods );
+ }
+ }
+
+ if ( !method.length ) {
+ method();
+ next();
+ } else {
+ method( next );
+ }
+}
diff --git a/build/tasks/build.js b/build/tasks/build.js
index 06a4b98a2..bbe63da2c 100644
--- a/build/tasks/build.js
+++ b/build/tasks/build.js
@@ -2,6 +2,85 @@ module.exports = function( grunt ) {
var path = require( "path" );
+grunt.registerTask( "manifest", "Generate jquery.json manifest files", function() {
+ var pkg = grunt.config( "pkg" ),
+ base = {
+ core: {
+ name: "ui.{plugin}",
+ title: "jQuery UI {Plugin}"
+ },
+ widget: {
+ name: "ui.{plugin}",
+ title: "jQuery UI {Plugin}",
+ dependencies: [ "core", "widget" ]
+ },
+ interaction: {
+ name: "ui.{plugin}",
+ title: "jQuery UI {Plugin}",
+ dependencies: [ "core", "widget", "mouse" ]
+ },
+ effect: {
+ name: "ui.effect-{plugin}",
+ title: "jQuery UI {Plugin} Effect",
+ keywords: [ "effect", "show", "hide" ],
+ homepage: "http://jqueryui.com/{plugin}-effect/",
+ demo: "http://jqueryui.com/{plugin}-effect/",
+ docs: "http://api.jqueryui.com/{plugin}-effect/",
+ dependencies: [ "effect" ]
+ }
+ };
+
+ Object.keys( base ).forEach(function( type ) {
+ var baseManifest = base[ type ],
+ plugins = grunt.file.readJSON( "build/" + type + ".json" );
+
+ Object.keys( plugins ).forEach(function( plugin ) {
+ var manifest,
+ data = plugins[ plugin ],
+ name = plugin.charAt( 0 ).toUpperCase() + plugin.substr( 1 );
+
+ function replace( str ) {
+ return str.replace( "{plugin}", plugin ).replace( "{Plugin}", name );
+ }
+
+ manifest = {
+ name: data.name || replace( baseManifest.name ),
+ title: data.title || replace( baseManifest.title ),
+ description: data.description,
+ keywords: [ "ui", plugin ]
+ .concat( baseManifest.keywords || [] )
+ .concat( data.keywords || [] ),
+ version: pkg.version,
+ author: pkg.author,
+ maintainers: pkg.maintainers,
+ licenses: pkg.licenses,
+ bugs: pkg.bugs,
+ homepage: data.homepage || replace( baseManifest.homepage ||
+ "http://jqueryui.com/{plugin}/" ),
+ demo: data.demo || replace( baseManifest.demo ||
+ "http://jqueryui.com/{plugin}/" ),
+ docs: data.docs || replace( baseManifest.docs ||
+ "http://api.jqueryui.com/{plugin}/" ),
+ download: "http://jqueryui.com/download/",
+ dependencies: {
+ jquery: ">=1.6"
+ },
+ // custom
+ category: data.category || type
+ };
+
+ (baseManifest.dependencies || [])
+ .concat(data.dependencies || [])
+ .forEach(function( dependency ) {
+ manifest.dependencies[ "ui." + dependency ] = pkg.version;
+ });
+
+ grunt.file.write( manifest.name + ".jquery.json",
+ JSON.stringify( manifest, null, "\t" ) + "\n" );
+ });
+ });
+});
+
grunt.registerMultiTask( "copy", "Copy files to destination folder and replace @VERSION with pkg.version", function() {
function replaceVersion( source ) {
return source.replace( /@VERSION/g, grunt.config( "pkg.version" ) );
diff --git a/build/tasks/testswarm.js b/build/tasks/testswarm.js
index c0244ebad..29dd74b87 100644
--- a/build/tasks/testswarm.js
+++ b/build/tasks/testswarm.js
@@ -1,33 +1,38 @@
/*jshint node: true */
module.exports = function( grunt ) {
-var tests = {
- "Accordion": "accordion/accordion.html",
- "Accordion_deprecated": "accordion/accordion_deprecated.html",
- "Autocomplete": "autocomplete/autocomplete.html",
- "Button": "button/button.html",
- "Core": "core/core.html",
- //"datepicker/datepicker.html",
- //"dialog/dialog.html",
- //"draggable/draggable.html",
- //"droppable/droppable.html",
- "Effects": "effects/effects.html",
- "Menu": "menu/menu.html",
- "Position": "position/position.html",
- "Position_deprecated": "position/position_deprecated.html",
- "Progressbar": "progressbar/progressbar.html",
- //"resizable/resizable.html",
- //"selectable/selectable.html",
- //"slider/slider.html",
- //"sortable/sortable.html",
- "Spinner": "spinner/spinner.html",
- "Tabs": "tabs/tabs.html",
- "Tabs_deprecated": "tabs/tabs_deprecated.html",
- "Tooltip": "tooltip/tooltip.html",
- "Widget": "widget/widget.html"
-};
+var versions = {
+ "git": "git",
+ "1.7": "1.7 1.7.1 1.7.2",
+ "1.6": "1.6 1.6.1 1.6.2 1.6.3 1.6.4"
+ },
+ tests = {
+ "Accordion": "accordion/accordion.html",
+ "Accordion_deprecated": "accordion/accordion_deprecated.html",
+ "Autocomplete": "autocomplete/autocomplete.html",
+ "Button": "button/button.html",
+ "Core": "core/core.html",
+ //"datepicker/datepicker.html",
+ //"dialog/dialog.html",
+ //"draggable/draggable.html",
+ //"droppable/droppable.html",
+ "Effects": "effects/effects.html",
+ "Menu": "menu/menu.html",
+ "Position": "position/position.html",
+ "Position_deprecated": "position/position_deprecated.html",
+ "Progressbar": "progressbar/progressbar.html",
+ //"resizable/resizable.html",
+ //"selectable/selectable.html",
+ //"slider/slider.html",
+ //"sortable/sortable.html",
+ "Spinner": "spinner/spinner.html",
+ "Tabs": "tabs/tabs.html",
+ "Tabs_deprecated": "tabs/tabs_deprecated.html",
+ "Tooltip": "tooltip/tooltip.html",
+ "Widget": "widget/widget.html"
+ };
-function submit( commit, tests, configFile, done ) {
+function submit( commit, tests, configFile, version, done ) {
var test,
testswarm = require( "testswarm" ),
config = grunt.file.readJSON( configFile ).jqueryui,
@@ -39,12 +44,12 @@ function submit( commit, tests, configFile, done ) {
testswarm({
url: config.swarmUrl,
pollInterval: 10000,
- timeout: 1000 * 60 * 30,
+ timeout: 1000 * 60 * 45,
done: done
}, {
authUsername: config.authUsername,
authToken: config.authToken,
- jobName: 'jQuery UI commit #<a href="https://github.com/jquery/jquery-ui/commit/' + commit + '">' + commit.substr( 0, 10 ) + '</a>',
+ jobName: 'jQuery UI ' + version + '<a href="https://github.com/jquery/jquery-ui/commit/' + commit + '">' + commit.substr( 0, 7 ) + '</a>',
runMax: config.runMax,
"runNames[]": Object.keys(tests),
"runUrls[]": testUrls,
@@ -58,17 +63,17 @@ grunt.registerTask( "testswarm", function( commit, configFile ) {
for ( test in tests ) {
latestTests[ test ] = tests[ test ] + "?nojshint=true";
}
- submit( commit, latestTests, configFile, this.async() );
+ submit( commit, latestTests, configFile, "", this.async() );
});
-grunt.registerTask( "testswarm-multi-jquery", function( commit, configFile ) {
+grunt.registerTask( "testswarm-multi-jquery", function( commit, configFile, minor ) {
var allTests = {};
- "1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.7 1.7.1 1.7.2 git".split(" ").forEach(function( version ) {
+ versions[ minor ].split(" ").forEach(function( version ) {
for ( var test in tests ) {
allTests[ test + "-" + version ] = tests[ test ] + "?nojshint=true&jquery=" + version;
}
});
- submit( commit, allTests, configFile, this.async() );
+ submit( commit, allTests, configFile, minor + " core ", this.async() );
});
};
diff --git a/build/widget.json b/build/widget.json
new file mode 100644
index 000000000..6adddb121
--- /dev/null
+++ b/build/widget.json
@@ -0,0 +1,98 @@
+{
+ "accordion": {
+ "dependencies": [],
+ "description": "Displays collapsible content panels for presenting information in a limited amount of space.",
+ "keywords": [
+ "navigation",
+ "panel",
+ "collapse",
+ "expand"
+ ]
+ },
+ "autocomplete": {
+ "dependencies": [ "menu", "position" ],
+ "description": "Lists suggested words as the user is typing.",
+ "keywords": [
+ "form",
+ "word",
+ "predict",
+ "suggest"
+ ]
+ },
+ "button": {
+ "dependencies": [],
+ "description": "Enhances a form with themable buttons.",
+ "keywords": [
+ "form",
+ "radio",
+ "checkbox"
+ ]
+ },
+ "dialog": {
+ "dependencies": [ "button", "draggable", "position", "resizable" ],
+ "description": "Displays customizable dialog windows.",
+ "keywords": [
+ "modal",
+ "alert",
+ "popup"
+ ]
+ },
+ "menu": {
+ "dependencies": [ "position" ],
+ "description": "Creates nestable menus.",
+ "keywords": [
+ "dropdown",
+ "flyout"
+ ]
+ },
+ "mouse": {
+ "dependencies": [],
+ "description": "Abstracts mouse-based interactions to assist in creating certain widgets.",
+ "keywords": [
+ "abstraction"
+ ],
+ "category": "core"
+ },
+ "progressbar": {
+ "dependencies": [],
+ "description": "Displays a status indicator for loading state, standard percentage, and other progress indicators.",
+ "keywords": [
+ "determinate",
+ "status"
+ ]
+ },
+ "slider": {
+ "dependencies": [ "mouse" ],
+ "description": "Displays a flexible slider with ranges and accessibility via keyboard.",
+ "keywords": [
+ "form",
+ "number",
+ "range"
+ ]
+ },
+ "spinner": {
+ "dependencies": [ "button" ],
+ "description": "Displays buttons to easily input numbers via the keyboard or mouse.",
+ "keywords": [
+ "form",
+ "number",
+ "spinbutton",
+ "stepper"
+ ]
+ },
+ "tabs": {
+ "dependencies": [],
+ "description": "Transforms a set of container elements into a tab structure.",
+ "keywords": [
+ "navigation",
+ "panel",
+ "collapse",
+ "expand"
+ ]
+ },
+ "tooltip": {
+ "dependencies": [ "position" ],
+ "description": "Shows additional information for any element on hover or focus.",
+ "keywords": []
+ }
+}
diff --git a/demos/spinner/currency.html b/demos/spinner/currency.html
index ff51b0177..a52f187c1 100644
--- a/demos/spinner/currency.html
+++ b/demos/spinner/currency.html
@@ -52,7 +52,7 @@
<div class="demo-description">
-<p>Example of a donation form, with currency selection and amout spinner.</p>
+<p>Example of a donation form, with currency selection and amount spinner.</p>
</div><!-- End demo-description -->
</body>
diff --git a/grunt.js b/grunt.js
index a861be2e0..d244e21cc 100644
--- a/grunt.js
+++ b/grunt.js
@@ -114,7 +114,7 @@ function createBanner( files ) {
"<%= grunt.template.today('isoDate') %>\n" +
"<%= pkg.homepage ? '* ' + pkg.homepage + '\n' : '' %>" +
"* Includes: " + (files ? fileNames.join(", ") : "<%= stripDirectory(grunt.task.current.file.src[1]) %>") + "\n" +
- "* Copyright (c) <%= grunt.template.today('yyyy') %> <%= pkg.author.name %>;" +
+ "* Copyright <%= grunt.template.today('yyyy') %> <%= pkg.author.name %>;" +
" Licensed <%= _.pluck(pkg.licenses, 'type').join(', ') %> */";
}
@@ -158,12 +158,12 @@ grunt.initConfig({
dist: {
src: [
"AUTHORS.txt",
- "GPL-LICENSE.txt",
"jquery-*.js",
"MIT-LICENSE.txt",
"README.md",
"grunt.js",
"package.json",
+ "*.jquery.json",
"ui/**/*",
"demos/**/*",
"themes/**/*",
@@ -203,7 +203,6 @@ grunt.initConfig({
cdn: {
src: [
"AUTHORS.txt",
- "GPL-LICENSE.txt",
"MIT-LICENSE.txt",
"ui/*.js",
"package.json"
@@ -246,7 +245,6 @@ grunt.initConfig({
themes: {
src: [
"AUTHORS.txt",
- "GPL-LICENSE.txt",
"MIT-LICENSE.txt",
"package.json"
],
diff --git a/package.json b/package.json
index d48520264..ca71cae2c 100644
--- a/package.json
+++ b/package.json
@@ -1,66 +1,62 @@
{
- "name": "jquery-ui",
- "title": "jQuery UI",
- "description": "Abstractions for low-level interaction and animation, advanced effects and high-level, themeable widgets, built on top of the jQuery JavaScript Library, that you can use to build highly interactive web applications.",
- "version": "1.9.0pre",
- "homepage": "http://jqueryui.com",
- "author": {
- "name": "jQuery Foundation and other contributors",
- "url": "http://jqueryui.com"
- },
- "maintainers": [
- {
- "name": "Scott González",
- "email": "scott.gonzalez@gmail.com",
- "url": "http://scottgonzalez.com"
- },
- {
- "name": "Jörn Zaefferer",
- "email": "joern.zaefferer@gmail.com",
- "url": "http://bassistance.de"
- },
- {
- "name": "Richard D. Worth",
- "email": "rdworth@gmail.com",
- "url": "http://rdworth.org"
- },
- {
- "name": "Kris Borchers",
- "email": "kris.borchers@gmail.com",
- "url": "http://krisborchers.com"
- },
- {
- "name": "Corey Frang",
- "email": "gnarf37@gmail.com",
- "url": "http://gnarf.net"
- }
- ],
- "repository": {
- "type": "git",
- "url": "git://github.com/jquery/jquery-ui.git"
- },
- "bugs": "http://bugs.jqueryui.com/",
- "licenses": [
- {
- "type": "MIT",
- "url": "http://www.opensource.org/licenses/MIT"
- },
- {
- "type": "GPL",
- "url": "http://www.opensource.org/licenses/GPL-2.0"
- }
- ],
- "dependencies": {},
- "devDependencies": {
- "grunt": "~0.3.9",
- "grunt-css": "0.2.0",
- "grunt-compare-size": "0.1.4",
- "grunt-html": "0.1.1",
- "grunt-junit": "0.1.4",
- "grunt-git-authors": "1.0.0",
- "request": "2.9.153",
- "rimraf": "2.0.1",
- "testswarm": "0.2.3"
- },
- "keywords": []
+ "name": "jquery-ui",
+ "title": "jQuery UI",
+ "description": "A curated set of user interface interactions, effects, widgets, and themes built on top of the jQuery JavaScript Library.",
+ "version": "1.9.0pre",
+ "homepage": "http://jqueryui.com",
+ "author": {
+ "name": "jQuery Foundation and other contributors",
+ "url": "https://github.com/jquery/jquery-ui/blob/master/AUTHORS.txt"
+ },
+ "maintainers": [
+ {
+ "name": "Scott González",
+ "email": "scott.gonzalez@gmail.com",
+ "url": "http://scottgonzalez.com"
+ },
+ {
+ "name": "Jörn Zaefferer",
+ "email": "joern.zaefferer@gmail.com",
+ "url": "http://bassistance.de"
+ },
+ {
+ "name": "Richard D. Worth",
+ "email": "rdworth@gmail.com",
+ "url": "http://rdworth.org"
+ },
+ {
+ "name": "Kris Borchers",
+ "email": "kris.borchers@gmail.com",
+ "url": "http://krisborchers.com"
+ },
+ {
+ "name": "Corey Frang",
+ "email": "gnarf37@gmail.com",
+ "url": "http://gnarf.net"
+ }
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/jquery/jquery-ui.git"
+ },
+ "bugs": "http://bugs.jqueryui.com/",
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "https://github.com/jquery/jquery-ui/blob/master/MIT-LICENSE.txt"
+ }
+ ],
+ "dependencies": {},
+ "devDependencies": {
+ "grunt": "~0.3.9",
+ "grunt-css": "0.2.0",
+ "grunt-compare-size": "0.1.4",
+ "grunt-html": "0.1.1",
+ "grunt-junit": "0.1.4",
+ "grunt-git-authors": "1.0.0",
+ "request": "2.9.153",
+ "rimraf": "2.0.1",
+ "testswarm": "0.2.3"
+ },
+ "keywords": []
}
diff --git a/tests/jquery.simulate.js b/tests/jquery.simulate.js
index 874d274cc..e281e2fee 100644
--- a/tests/jquery.simulate.js
+++ b/tests/jquery.simulate.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*/
diff --git a/tests/unit/dialog/dialog_tickets.js b/tests/unit/dialog/dialog_tickets.js
index 201ea3a87..5c3277c2f 100644
--- a/tests/unit/dialog/dialog_tickets.js
+++ b/tests/unit/dialog/dialog_tickets.js
@@ -10,7 +10,7 @@ asyncTest( "#3123: Prevent tabbing out of modal dialogs", function() {
var el = $( "<div><input id='t3123-first'><input id='t3123-last'></div>" ).dialog({ modal: true }),
inputs = el.find( "input" ),
- widget = el.dialog( "widget" );
+ widget = el.dialog( "widget" )[ 0 ];
function checkTab() {
ok( $.contains( widget, document.activeElement ), "Tab key event moved focus within the modal" );
diff --git a/tests/unit/menu/menu_events.js b/tests/unit/menu/menu_events.js
index 8eb8ee8c6..69ae2e14f 100644
--- a/tests/unit/menu/menu_events.js
+++ b/tests/unit/menu/menu_events.js
@@ -577,22 +577,4 @@ test( "handle keyboard navigation with spelling of menu items", function() {
element.focus();
});
-asyncTest( "handle page up and page down before the menu has focus", function() {
- expect( 1 );
- var element = $( "#menu1" ).menu({
- focus: function( event, ui ) {
- log( $( event.target ).find( ".ui-state-focus" ).parent().index() );
- }
- });
-
- log( "keydown", true );
- element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } );
- element.blur();
- setTimeout( function() {
- element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } );
- equal( logOutput(), "keydown,0,0", "Page Up and Page Down bring initial focus to first item" );
- start();
- }, 500 );
-});
-
})( jQuery );
diff --git a/tests/unit/slider/slider_core.js b/tests/unit/slider/slider_core.js
index e5f21ee1b..86a516875 100644
--- a/tests/unit/slider/slider_core.js
+++ b/tests/unit/slider/slider_core.js
@@ -16,6 +16,7 @@ function handle() {
module("slider: core");
test("keydown HOME on handle sets value to min", function() {
+ expect( 2 );
el = $('<div></div>');
options = {
max: 5,
@@ -50,6 +51,7 @@ test("keydown HOME on handle sets value to min", function() {
});
test("keydown END on handle sets value to max", function() {
+ expect( 2 );
el = $('<div></div>');
options = {
max: 5,
@@ -84,6 +86,7 @@ test("keydown END on handle sets value to max", function() {
});
test("keydown PAGE_UP on handle increases value by 1/5 range, not greater than max", function() {
+ expect( 4 );
$.each(['horizontal', 'vertical'], function(i, orientation) {
el = $('<div></div>');
options = {
@@ -107,6 +110,7 @@ test("keydown PAGE_UP on handle increases value by 1/5 range, not greater than m
});
test("keydown PAGE_DOWN on handle decreases value by 1/5 range, not less than min", function() {
+ expect( 4 );
$.each(['horizontal', 'vertical'], function(i, orientation) {
el = $('<div></div>');
options = {
@@ -130,6 +134,7 @@ test("keydown PAGE_DOWN on handle decreases value by 1/5 range, not less than mi
});
test("keydown UP on handle increases value by step, not greater than max", function() {
+ expect( 4 );
el = $('<div></div>');
options = {
max: 5,
@@ -170,6 +175,7 @@ test("keydown UP on handle increases value by step, not greater than max", funct
});
test("keydown RIGHT on handle increases value by step, not greater than max", function() {
+ expect( 4 );
el = $('<div></div>');
options = {
max: 5,
@@ -210,6 +216,7 @@ test("keydown RIGHT on handle increases value by step, not greater than max", fu
});
test("keydown DOWN on handle decreases value by step, not less than min", function() {
+ expect( 4 );
el = $('<div></div>');
options = {
max: 5,
@@ -250,6 +257,7 @@ test("keydown DOWN on handle decreases value by step, not less than min", functi
});
test("keydown LEFT on handle decreases value by step, not less than min", function() {
+ expect( 4 );
el = $('<div></div>');
options = {
max: 5,
diff --git a/tests/unit/slider/slider_events.js b/tests/unit/slider/slider_events.js
index 9e39d2a3e..4d0896442 100644
--- a/tests/unit/slider/slider_events.js
+++ b/tests/unit/slider/slider_events.js
@@ -12,8 +12,7 @@ module( "slider: events" );
test( "mouse based interaction", function() {
expect(4);
- var el = $( "<div></div>" )
- .appendTo( "body" )
+ var el = $( "#slider1" )
.slider({
start: function(event, ui) {
equal( event.originalEvent.type, "mousedown", "start triggered by mousedown" );
@@ -37,8 +36,7 @@ test( "keyboard based interaction", function() {
expect(3);
// Test keyup at end of handle slide (keyboard)
- var el = $( "<div></div>" )
- .appendTo( "body" )
+ var el = $( "#slider1" )
.slider({
start: function(event, ui) {
equal( event.originalEvent.type, "keydown", "start triggered by keydown" );
diff --git a/tests/unit/slider/slider_methods.js b/tests/unit/slider/slider_methods.js
index 79f80e868..1a6b493c9 100644
--- a/tests/unit/slider/slider_methods.js
+++ b/tests/unit/slider/slider_methods.js
@@ -27,21 +27,14 @@ test("init", function() {
});
test("destroy", function() {
- $("<div></div>").appendTo('body').slider().slider("destroy").remove();
- ok(true, '.slider("destroy") called on element');
-
- $([]).slider().slider("destroy").remove();
- ok(true, '.slider("destroy") called on empty collection');
-
- $('<div></div>').appendTo('body').remove().slider().slider("destroy").remove();
- ok(true, '.slider("destroy") called on disconnected DOMElement');
-
- var expected = $('<div></div>').slider(),
- actual = expected.slider('destroy');
- equal(actual, expected, 'destroy is chainable');
+ expect( 1 );
+ domEqual( "#slider1", function() {
+ $( "#slider1" ).slider().slider( "destroy" );
+ });
});
test("enable", function() {
+ expect( 5 );
var el,
expected = $('<div></div>').slider(),
actual = expected.slider('enable');
@@ -56,6 +49,7 @@ test("enable", function() {
});
test("disable", function() {
+ expect( 5 );
var el,
expected = $('<div></div>').slider(),
actual = expected.slider('disable');
@@ -70,6 +64,7 @@ test("disable", function() {
});
test("value", function() {
+ expect( 17 );
$([false, 'min', 'max']).each(function() {
var el = $('<div></div>').slider({
range: this,
diff --git a/tests/unit/slider/slider_options.js b/tests/unit/slider/slider_options.js
index 09067a3e9..96d0d45d0 100644
--- a/tests/unit/slider/slider_options.js
+++ b/tests/unit/slider/slider_options.js
@@ -12,6 +12,7 @@ function handle() {
module("slider: options");
test("max", function() {
+ expect( 2 );
el = $('<div></div>');
options = {
@@ -30,6 +31,7 @@ test("max", function() {
});
test("min", function() {
+ expect( 2 );
el = $('<div></div>');
options = {
@@ -48,7 +50,8 @@ test("min", function() {
});
test("orientation", function() {
- el = $('<div></div>');
+ expect( 6 );
+ el = $('#slider1');
options = {
max: 2,
@@ -62,7 +65,7 @@ test("orientation", function() {
el.slider(options).slider("option", "orientation", "horizontal");
ok(el.is('.ui-slider-horizontal'), "horizontal slider has class .ui-slider-horizontal");
ok(!el.is('.ui-slider-vertical'), "horizontal slider does not have class .ui-slider-vertical");
- equal(handle().css('left'), percentVal + '%', "horizontal slider handle is positioned with left: %");
+ equal(handle()[0].style.left, percentVal + '%', "horizontal slider handle is positioned with left: %");
el.slider('destroy');
@@ -78,7 +81,7 @@ test("orientation", function() {
el.slider(options).slider("option", "orientation", "vertical");
ok(el.is('.ui-slider-vertical'), "vertical slider has class .ui-slider-vertical");
ok(!el.is('.ui-slider-horizontal'), "vertical slider does not have class .ui-slider-horizontal");
- equal(handle().css('bottom'), percentVal + '%', "vertical slider handle is positioned with bottom: %");
+ equal(handle()[0].style.bottom, percentVal + '%', "vertical slider handle is positioned with bottom: %");
el.slider('destroy');
@@ -92,6 +95,7 @@ test("orientation", function() {
// value option/method: the value option is not restricted by min/max/step.
// What is returned by the value method is restricted by min (>=), max (<=), and step (even multiple)
test("step", function() {
+ expect( 9 );
var el = $('<div></div>').slider({
min: 0,
value: 0,
@@ -112,7 +116,7 @@ test("step", function() {
el.slider("value", 19);
equal( el.slider("value"), 20 );
-el = $('<div></div>').slider({
+ el = $('<div></div>').slider({
min: 0,
value: 0,
step: 20,
diff --git a/tests/unit/tabs/tabs_core.js b/tests/unit/tabs/tabs_core.js
index f1a2d72c1..53dd50a98 100644
--- a/tests/unit/tabs/tabs_core.js
+++ b/tests/unit/tabs/tabs_core.js
@@ -285,11 +285,7 @@ asyncTest( "keyboard support - LEFT, RIGHT, UP, DOWN, HOME, END, SPACE, ENTER",
equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "third panel has aria-expanded=false" );
equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "third panel has aria-hidden=true" );
- // support: Firefox 12
- // Firefox <13 passes arguments so we can't use setTimeout( start, 1 )
- setTimeout(function() {
- start();
- }, 1 );
+ setTimeout( start, 1 );
}
setTimeout( step1, 1 );
@@ -482,11 +478,7 @@ asyncTest( "keyboard support - CTRL navigation", function() {
equal( panels.eq( 0 ).attr( "aria-expanded" ), "false", "first panel has aria-expanded=false" );
equal( panels.eq( 0 ).attr( "aria-hidden" ), "true", "first panel has aria-hidden=true" );
- // support: Firefox 12
- // Firefox <13 passes arguments so we can't use setTimeout( start, 1 )
- setTimeout(function() {
- start();
- }, 1 );
+ setTimeout( start, 1 );
}
setTimeout( step1, 1 );
@@ -578,11 +570,7 @@ asyncTest( "keyboard support - CTRL+UP, ALT+PAGE_DOWN, ALT+PAGE_UP", function()
panels.eq( 1 ).simulate( "keydown", { keyCode: keyCode.UP, ctrlKey: true } );
strictEqual( document.activeElement, tabs[ 1 ], "second tab is activeElement" );
- // support: Firefox 12
- // Firefox <13 passes arguments so we can't use setTimeout( start, 1 )
- setTimeout(function() {
- start();
- }, 1 );
+ setTimeout( start, 1 );
}
setTimeout( step1, 1 );
diff --git a/tests/visual/effects/effects.css b/tests/visual/effects/effects.css
index 460019f24..8e9ee0ffd 100644
--- a/tests/visual/effects/effects.css
+++ b/tests/visual/effects/effects.css
@@ -1,8 +1,8 @@
body {
margin: 1em;
padding: 0;
- background: #191919;
- color: #fff;
+ background: #fff;
+ color: #000;
}
ul.effects {
diff --git a/themes/base/jquery.ui.accordion.css b/themes/base/jquery.ui.accordion.css
index 71319ac28..60975acc2 100644
--- a/themes/base/jquery.ui.accordion.css
+++ b/themes/base/jquery.ui.accordion.css
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Accordion#theming
diff --git a/themes/base/jquery.ui.all.css b/themes/base/jquery.ui.all.css
index 958dac4be..c92e2a5e7 100644
--- a/themes/base/jquery.ui.all.css
+++ b/themes/base/jquery.ui.all.css
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Theming
diff --git a/themes/base/jquery.ui.autocomplete.css b/themes/base/jquery.ui.autocomplete.css
index e1b127470..cc85c5a4e 100644
--- a/themes/base/jquery.ui.autocomplete.css
+++ b/themes/base/jquery.ui.autocomplete.css
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Autocomplete#theming
diff --git a/themes/base/jquery.ui.base.css b/themes/base/jquery.ui.base.css
index 87d2bfd30..18ecc1447 100644
--- a/themes/base/jquery.ui.base.css
+++ b/themes/base/jquery.ui.base.css
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Theming
diff --git a/themes/base/jquery.ui.button.css b/themes/base/jquery.ui.button.css
index f5453fb9f..1faeff6ab 100644
--- a/themes/base/jquery.ui.button.css
+++ b/themes/base/jquery.ui.button.css
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Button#theming
diff --git a/themes/base/jquery.ui.core.css b/themes/base/jquery.ui.core.css
index 33a6c96be..8cf4d02ef 100644
--- a/themes/base/jquery.ui.core.css
+++ b/themes/base/jquery.ui.core.css
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Theming/API
diff --git a/themes/base/jquery.ui.datepicker.css b/themes/base/jquery.ui.datepicker.css
index 0f4e71562..c1f269999 100644
--- a/themes/base/jquery.ui.datepicker.css
+++ b/themes/base/jquery.ui.datepicker.css
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Datepicker#theming
diff --git a/themes/base/jquery.ui.dialog.css b/themes/base/jquery.ui.dialog.css
index 22523c82c..2937af9b7 100644
--- a/themes/base/jquery.ui.dialog.css
+++ b/themes/base/jquery.ui.dialog.css
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Dialog#theming
diff --git a/themes/base/jquery.ui.menu.css b/themes/base/jquery.ui.menu.css
index 85c387387..ea4b24e26 100644
--- a/themes/base/jquery.ui.menu.css
+++ b/themes/base/jquery.ui.menu.css
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Menu#theming
diff --git a/themes/base/jquery.ui.progressbar.css b/themes/base/jquery.ui.progressbar.css
index 877666589..a8b3d7442 100644
--- a/themes/base/jquery.ui.progressbar.css
+++ b/themes/base/jquery.ui.progressbar.css
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Progressbar#theming
diff --git a/themes/base/jquery.ui.resizable.css b/themes/base/jquery.ui.resizable.css
index bca140eda..291bdb209 100644
--- a/themes/base/jquery.ui.resizable.css
+++ b/themes/base/jquery.ui.resizable.css
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Resizable#theming
diff --git a/themes/base/jquery.ui.selectable.css b/themes/base/jquery.ui.selectable.css
index 0fa8942aa..e00779d7e 100644
--- a/themes/base/jquery.ui.selectable.css
+++ b/themes/base/jquery.ui.selectable.css
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Selectable#theming
diff --git a/themes/base/jquery.ui.slider.css b/themes/base/jquery.ui.slider.css
index 39d15b034..5e7a9734f 100644
--- a/themes/base/jquery.ui.slider.css
+++ b/themes/base/jquery.ui.slider.css
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Slider#theming
diff --git a/themes/base/jquery.ui.spinner.css b/themes/base/jquery.ui.spinner.css
index 41ffe539c..94b73fa05 100644
--- a/themes/base/jquery.ui.spinner.css
+++ b/themes/base/jquery.ui.spinner.css
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Spinner#theming
diff --git a/themes/base/jquery.ui.tabs.css b/themes/base/jquery.ui.tabs.css
index a2efae8b0..405b6932a 100644
--- a/themes/base/jquery.ui.tabs.css
+++ b/themes/base/jquery.ui.tabs.css
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Tabs#theming
diff --git a/themes/base/jquery.ui.theme.css b/themes/base/jquery.ui.theme.css
index 86da8a295..343a2f433 100644
--- a/themes/base/jquery.ui.theme.css
+++ b/themes/base/jquery.ui.theme.css
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Theming/API
diff --git a/themes/base/jquery.ui.tooltip.css b/themes/base/jquery.ui.tooltip.css
index ed29c137a..e293eeb23 100644
--- a/themes/base/jquery.ui.tooltip.css
+++ b/themes/base/jquery.ui.tooltip.css
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*/
.ui-tooltip {
diff --git a/ui/jquery.ui.accordion.js b/ui/jquery.ui.accordion.js
index 7d98886e7..de9e1a3cb 100644
--- a/ui/jquery.ui.accordion.js
+++ b/ui/jquery.ui.accordion.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Accordion
diff --git a/ui/jquery.ui.autocomplete.js b/ui/jquery.ui.autocomplete.js
index 25d909f8d..617aa9c70 100644
--- a/ui/jquery.ui.autocomplete.js
+++ b/ui/jquery.ui.autocomplete.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Autocomplete
@@ -577,7 +577,7 @@ $.widget( "ui.autocomplete", $.ui.autocomplete, {
options: {
messages: {
noResults: "No search results.",
- results: function(amount) {
+ results: function( amount ) {
return amount + ( amount > 1 ? " results are" : " result is" ) +
" available, use up and down arrow keys to navigate.";
}
@@ -587,7 +587,7 @@ $.widget( "ui.autocomplete", $.ui.autocomplete, {
__response: function( content ) {
var message;
this._superApply( arguments );
- if ( this.options.disabled || this.cancelSearch) {
+ if ( this.options.disabled || this.cancelSearch ) {
return;
}
if ( content && content.length ) {
diff --git a/ui/jquery.ui.button.js b/ui/jquery.ui.button.js
index 1aa44abdd..5c3fb7589 100644
--- a/ui/jquery.ui.button.js
+++ b/ui/jquery.ui.button.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Button
diff --git a/ui/jquery.ui.core.js b/ui/jquery.ui.core.js
index 3e102f181..0e33f11ed 100644
--- a/ui/jquery.ui.core.js
+++ b/ui/jquery.ui.core.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI
diff --git a/ui/jquery.ui.datepicker.js b/ui/jquery.ui.datepicker.js
index 06db79ba7..cd4ffe3ee 100644
--- a/ui/jquery.ui.datepicker.js
+++ b/ui/jquery.ui.datepicker.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Datepicker
@@ -309,7 +309,7 @@ $.extend(Datepicker.prototype, {
this.uuid += 1;
var id = 'dp' + this.uuid;
this._dialogInput = $('<input type="text" id="' + id +
- '" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');
+ '" style="position: absolute; top: -100px; width: 0px;"/>');
this._dialogInput.keydown(this._doKeyDown);
$('body').append(this._dialogInput);
inst = this._dialogInst = this._newInst(this._dialogInput, false);
@@ -708,6 +708,9 @@ $.extend(Datepicker.prototype, {
/* Generate the date picker content. */
_updateDatepicker: function(inst) {
+ if ($.datepicker._curInst && inst != $.datepicker._curInst) {
+ return;
+ }
this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
var borders = $.datepicker._getBorders(inst.dpDiv);
instActive = inst; // for delegate hover events
@@ -763,8 +766,8 @@ $.extend(Datepicker.prototype, {
var dpHeight = inst.dpDiv.outerHeight();
var inputWidth = inst.input ? inst.input.outerWidth() : 0;
var inputHeight = inst.input ? inst.input.outerHeight() : 0;
- var viewWidth = document.documentElement.clientWidth + $(document).scrollLeft();
- var viewHeight = document.documentElement.clientHeight + $(document).scrollTop();
+ var viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft());
+ var viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0);
offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0;
@@ -1411,7 +1414,7 @@ $.extend(Datepicker.prototype, {
*/
_attachHandlers: function(inst) {
var stepMonths = this._get(inst, 'stepMonths');
- var id = '#' + inst.id;
+ var id = '#' + inst.id.replace( /\\\\/g, "\\" );
inst.dpDiv.find('[data-handler]').map(function () {
var handler = {
prev: function () {
@@ -1815,7 +1818,7 @@ $.fn.datepicker = function(options){
/* Initialise the date picker. */
if (!$.datepicker.initialized) {
$(document).mousedown($.datepicker._checkExternalClick).
- find('body').append($.datepicker.dpDiv);
+ find(document.body).append($.datepicker.dpDiv);
$.datepicker.initialized = true;
}
diff --git a/ui/jquery.ui.dialog.js b/ui/jquery.ui.dialog.js
index 85e4b3e2b..66c7f4dff 100644
--- a/ui/jquery.ui.dialog.js
+++ b/ui/jquery.ui.dialog.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Dialog
diff --git a/ui/jquery.ui.draggable.js b/ui/jquery.ui.draggable.js
index 2f05ad6a4..b693dccae 100644
--- a/ui/jquery.ui.draggable.js
+++ b/ui/jquery.ui.draggable.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Draggables
diff --git a/ui/jquery.ui.droppable.js b/ui/jquery.ui.droppable.js
index 17a56787a..36179d6d5 100644
--- a/ui/jquery.ui.droppable.js
+++ b/ui/jquery.ui.droppable.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Droppables
diff --git a/ui/jquery.ui.effect-blind.js b/ui/jquery.ui.effect-blind.js
index 7cc353525..c4ff12fdc 100644
--- a/ui/jquery.ui.effect-blind.js
+++ b/ui/jquery.ui.effect-blind.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Blind
@@ -42,7 +42,7 @@ $.effects.effect.blind = function( o, done ) {
});
distance = wrapper[ ref ]();
- margin = parseFloat( wrapper.css( ref2 ) );
+ margin = parseFloat( wrapper.css( ref2 ) ) || 0;
animation[ ref ] = show ? distance : 0;
if ( !motion ) {
@@ -51,7 +51,7 @@ $.effects.effect.blind = function( o, done ) {
.css( vertical ? "top" : "left", "auto" )
.css({ position: "absolute" });
- animation[ ref2 ] = show ? margin : distance + margin;
+ animation[ ref2 ] = show ? margin : distance + margin;
}
// start at 0 if we are showing
diff --git a/ui/jquery.ui.effect-bounce.js b/ui/jquery.ui.effect-bounce.js
index 0a93bda08..8a03f4f88 100644
--- a/ui/jquery.ui.effect-bounce.js
+++ b/ui/jquery.ui.effect-bounce.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Bounce
diff --git a/ui/jquery.ui.effect-clip.js b/ui/jquery.ui.effect-clip.js
index 6539acf24..0cef7e0ca 100644
--- a/ui/jquery.ui.effect-clip.js
+++ b/ui/jquery.ui.effect-clip.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Clip
diff --git a/ui/jquery.ui.effect-drop.js b/ui/jquery.ui.effect-drop.js
index 3246c09b0..ce02dd3fd 100644
--- a/ui/jquery.ui.effect-drop.js
+++ b/ui/jquery.ui.effect-drop.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Drop
@@ -32,7 +32,7 @@ $.effects.effect.drop = function( o, done ) {
el.show();
$.effects.createWrapper( el );
- distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]({ margin: true }) / 2;
+ distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2;
if ( show ) {
el
diff --git a/ui/jquery.ui.effect-explode.js b/ui/jquery.ui.effect-explode.js
index 1048b0a42..76e92fac3 100644
--- a/ui/jquery.ui.effect-explode.js
+++ b/ui/jquery.ui.effect-explode.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Explode
diff --git a/ui/jquery.ui.effect-fade.js b/ui/jquery.ui.effect-fade.js
index ee031fcd8..5f5fcbfae 100644
--- a/ui/jquery.ui.effect-fade.js
+++ b/ui/jquery.ui.effect-fade.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Fade
diff --git a/ui/jquery.ui.effect-fold.js b/ui/jquery.ui.effect-fold.js
index 7619285c2..1e0e475f5 100644
--- a/ui/jquery.ui.effect-fold.js
+++ b/ui/jquery.ui.effect-fold.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Fold
diff --git a/ui/jquery.ui.effect-highlight.js b/ui/jquery.ui.effect-highlight.js
index f6868d136..2ae5729dc 100644
--- a/ui/jquery.ui.effect-highlight.js
+++ b/ui/jquery.ui.effect-highlight.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Highlight
diff --git a/ui/jquery.ui.effect-pulsate.js b/ui/jquery.ui.effect-pulsate.js
index 543f6310d..d1e74ea8e 100644
--- a/ui/jquery.ui.effect-pulsate.js
+++ b/ui/jquery.ui.effect-pulsate.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Pulsate
diff --git a/ui/jquery.ui.effect-scale.js b/ui/jquery.ui.effect-scale.js
index 5e1dc8540..4283fe842 100644
--- a/ui/jquery.ui.effect-scale.js
+++ b/ui/jquery.ui.effect-scale.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Scale
diff --git a/ui/jquery.ui.effect-shake.js b/ui/jquery.ui.effect-shake.js
index 51d8e1129..fd9605d0a 100644
--- a/ui/jquery.ui.effect-shake.js
+++ b/ui/jquery.ui.effect-shake.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Shake
diff --git a/ui/jquery.ui.effect-slide.js b/ui/jquery.ui.effect-slide.js
index d61047b8b..5f0aa1e45 100644
--- a/ui/jquery.ui.effect-slide.js
+++ b/ui/jquery.ui.effect-slide.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Slide
@@ -29,9 +29,7 @@ $.effects.effect.slide = function( o, done ) {
// Adjust
$.effects.save( el, props );
el.show();
- distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]({
- margin: true
- });
+ distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
$.effects.createWrapper( el ).css({
overflow: "hidden"
diff --git a/ui/jquery.ui.effect-transfer.js b/ui/jquery.ui.effect-transfer.js
index 7d6c10933..ddf8139b6 100644
--- a/ui/jquery.ui.effect-transfer.js
+++ b/ui/jquery.ui.effect-transfer.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Transfer
diff --git a/ui/jquery.ui.effect.js b/ui/jquery.ui.effect.js
index 7cabe5849..ec8260709 100644
--- a/ui/jquery.ui.effect.js
+++ b/ui/jquery.ui.effect.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/
diff --git a/ui/jquery.ui.menu.js b/ui/jquery.ui.menu.js
index 81fef2e7c..78b602cce 100644
--- a/ui/jquery.ui.menu.js
+++ b/ui/jquery.ui.menu.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Menu
@@ -15,7 +15,7 @@
*/
(function( $, undefined ) {
-var currentEventTarget = null;
+var mouseHandled = false;
$.widget( "ui.menu", {
version: "@VERSION",
@@ -73,23 +73,16 @@ $.widget( "ui.menu", {
},
"click .ui-menu-item:has(a)": function( event ) {
var target = $( event.target );
- if ( target[0] !== currentEventTarget ) {
- currentEventTarget = target[0];
- // TODO: What are we trying to accomplish with this check?
- // Clicking a menu item twice results in a select event with
- // an empty ui.item.
- target.one( "click" + this.eventNamespace, function( event ) {
- currentEventTarget = null;
- });
- // Don't select disabled menu items
- if ( !target.closest( ".ui-menu-item" ).is( ".ui-state-disabled" ) ) {
- this.select( event );
- // Redirect focus to the menu with a delay for firefox
- this._delay(function() {
- if ( !this.element.is(":focus") ) {
- this.element.focus();
- }
- }, 20 );
+ if ( !mouseHandled && target.closest( ".ui-menu-item" ).not( ".ui-state-disabled" ).length ) {
+ mouseHandled = true;
+
+ this.select( event );
+ // Open submenu on click
+ if ( this.element.has( ".ui-menu" ).length ) {
+ this.expand( event );
+ } else if ( !this.element.is(":focus") ) {
+ // Redirect focus to the menu
+ this.element.focus();
}
}
},
@@ -127,6 +120,9 @@ $.widget( "ui.menu", {
if ( !$( event.target ).closest( ".ui-menu" ).length ) {
this.collapseAll( event );
}
+
+ // Reset the mouseHandled flag
+ mouseHandled = false;
}
});
},
@@ -166,9 +162,6 @@ $.widget( "ui.menu", {
// Destroy menu dividers
this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
-
- // Unbind currentEventTarget click event handler
- this._off( $( currentEventTarget ), "click" );
},
_keydown: function( event ) {
@@ -496,7 +489,7 @@ $.widget( "ui.menu", {
// Delay so Firefox will not hide activedescendant change in expanding submenu from AT
this._delay(function() {
this.focus( event, newItem );
- }, 20 );
+ });
}
},
@@ -591,9 +584,12 @@ $.widget( "ui.menu", {
select: function( event ) {
// Save active reference before collapseAll triggers blur
var ui = {
- item: this.active
+ // Selecting a menu item removes the active item causing multiple clicks to be missing an item
+ item: this.active || $( event.target ).closest( ".ui-menu-item" )
};
- this.collapseAll( event, true );
+ if ( !ui.item.has( ".ui-menu" ).length ) {
+ this.collapseAll( event, true );
+ }
this._trigger( "select", event, ui );
}
});
diff --git a/ui/jquery.ui.mouse.js b/ui/jquery.ui.mouse.js
index 6f95765f2..a08566b90 100644
--- a/ui/jquery.ui.mouse.js
+++ b/ui/jquery.ui.mouse.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Mouse
@@ -47,9 +47,11 @@ $.widget("ui.mouse", {
// other instances of mouse
_mouseDestroy: function() {
this.element.unbind('.'+this.widgetName);
- $(document)
- .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
- .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
+ if ( this._mouseMoveDelegate ) {
+ $(document)
+ .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
+ .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
+ }
},
_mouseDown: function(event) {
diff --git a/ui/jquery.ui.position.js b/ui/jquery.ui.position.js
index 2802b2ce0..eef8a95c9 100644
--- a/ui/jquery.ui.position.js
+++ b/ui/jquery.ui.position.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Position
diff --git a/ui/jquery.ui.progressbar.js b/ui/jquery.ui.progressbar.js
index 74a2d6923..7f1ebf77d 100644
--- a/ui/jquery.ui.progressbar.js
+++ b/ui/jquery.ui.progressbar.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Progressbar
diff --git a/ui/jquery.ui.resizable.js b/ui/jquery.ui.resizable.js
index be174dd7e..584f3a234 100644
--- a/ui/jquery.ui.resizable.js
+++ b/ui/jquery.ui.resizable.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Resizables
diff --git a/ui/jquery.ui.selectable.js b/ui/jquery.ui.selectable.js
index 1da7fffa3..95bc92faa 100644
--- a/ui/jquery.ui.selectable.js
+++ b/ui/jquery.ui.selectable.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Selectables
diff --git a/ui/jquery.ui.slider.js b/ui/jquery.ui.slider.js
index adceb356c..0434d8075 100644
--- a/ui/jquery.ui.slider.js
+++ b/ui/jquery.ui.slider.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Slider
diff --git a/ui/jquery.ui.sortable.js b/ui/jquery.ui.sortable.js
index 7e5875200..8d7b6ccb8 100644
--- a/ui/jquery.ui.sortable.js
+++ b/ui/jquery.ui.sortable.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Sortables
@@ -1030,6 +1030,8 @@ $.widget("ui.sortable", $.ui.mouse, {
for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events
this._trigger("stop", event, this._uiHash());
}
+
+ this.fromOutside = false;
return false;
}
diff --git a/ui/jquery.ui.spinner.js b/ui/jquery.ui.spinner.js
index ead3b17be..11377f6a6 100644
--- a/ui/jquery.ui.spinner.js
+++ b/ui/jquery.ui.spinner.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Spinner
diff --git a/ui/jquery.ui.tabs.js b/ui/jquery.ui.tabs.js
index 588b8cdb2..b31ce364a 100644
--- a/ui/jquery.ui.tabs.js
+++ b/ui/jquery.ui.tabs.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Tabs
diff --git a/ui/jquery.ui.tooltip.js b/ui/jquery.ui.tooltip.js
index 8bfe78c05..9f0a8a810 100644
--- a/ui/jquery.ui.tooltip.js
+++ b/ui/jquery.ui.tooltip.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* Depends:
diff --git a/ui/jquery.ui.widget.js b/ui/jquery.ui.widget.js
index b5dfaa344..924d10bc2 100644
--- a/ui/jquery.ui.widget.js
+++ b/ui/jquery.ui.widget.js
@@ -3,7 +3,7 @@
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Widget