Accordion API Redesign

Posted on by

jQuery UI is undergoing an API redesign which will slim down the size of the API in order to provide a more stable codebase that is easier to learn and use. We’ll be posting the proposed changes over the next few weeks in order to gather feedback from the community. Our goal is to support the old (current) and new (proposed) APIs simultaneously in 1.9 and then remove support for the old APIs in 2.0. This post lists out the details of the proposed changes for the Accordion widget along with the reasoning behind each change.

API Redesign

Remove navigation and navigationFilter option.
The navigation-related options are being removed in favor of setting the active option during initialization. The built-in navigation filter didn’t always make sense and was turned off by default. We plan on adding a demo which shows how to implement the current navigation functionality as well a demo which shows how to use a cookie to store the active panel.

Merge the autoHeight, fillSpace and clearStyle options into a new option called fixedHeight
The autoHeight, fillSpace and clearStyle options all deal with similar issues and therefore cannot be used together. Having three options for the same feature (how tall the panels should be) creates a complex and confusing API. These three options are being replaced by a single boolean option called fixedHeight. When set to true (the default), all panels will have the same height. If the accordion has a height of “auto”, then all panels will be as tall as the tallest panel (equivalent of autoHeight: true). If the accordion has an explicit height, then all panels will be sized based on that height (equivalent of fillSpace: true). When fixedHeight is set to false, no calculations will be done for the height of the panels and they will be sized based on their content (equivalent of clearStyle: true).

Rename icon.headerSelected option to icon.activeHeader
This option is being renamed for consistency both within Accordion (active vs. selected when dealing with the active panel) and within the full jQuery UI suite.

Remove activate method
The activate method will be removed in favor of updating the active option. The inclusion of the activate method doesn’t simplify the use of the accordion and therefore isn’t necessary.

Rename resize method to refresh
This method is being renamed for consistency within the full jQuery UI suite. However, this will continue to only handle size changes for now. We do plan on supporting adding/removing panels in the future.

Rename changestart event to beforeactivate
This event is being renamed for consistency both within Accordion (activate vs. change when dealing with the active panel) and within the full jQuery UI suite.

Rename change event to activate
This event is being renamed for consistency both within Accordion (activate vs. change when dealing with the active panel) and within the full jQuery UI suite.

Add .ui-accordion-heading class
There is currently no class being added to the headings for each panel. This results in the stylesheet using .ui-accordion-header a for styling, which makes adding additional anchors to the headers difficult. To solve this, we will add a class to the first child of each header and use the new class for styling.

Feedback

We’d love to hear your feedback on these changes. We want to make sure we address any issues the community may have before we finalize and implement these changes. If you have any feedback, please post it on the related forum post. Thanks.

jQuery UI 1.8.6

Posted on by

The sixth maintenance release for jQuery UI 1.8 is out. Along with official support for jQuery 1.4.3, this update brings bug fixes and enhancements for jQuery UI Core, the Widget Factory, the Mouse widget and the Position utility as well as the Accordion, Autocomplete, Button, Datepicker, Dialog, Progressbar, and Tabs widgets. For the full list of changes, see the changelog. You can download it here:

Download

File Downloads

Svn (contains final files as they are in the zip, with @VERSION replaced with 1.8.6, all themes)

Git (contains pre-build files, with @VERSION not yet replaced with 1.8.6, base theme only)

Google Ajax Libraries API (CDN)

Custom Download Builder

New Features

In this release, we’ve added support for jQuery 1.4.3 and IE 9. We’ve also added some new features to all widgets and interactions, which are listed under the Widget Factory below.

Widget Factory

All widgets created through the widget factory now trigger a create event upon creation of each instance. For example, when creating a dialog via $( "#dialog" ).dialog() you can bind to the dialogcreate event or specify a create callback.

You can now specify additional logic for gathering options that should take precedence over default values, but not over options passed on initialization. Prior to this release, the widget factory had built-in support for using the metadata plugin to gather such options. As of 1.8.6, you can now specify whatever logic you want by creating a _getCreateOptions() method in your widget; the default method uses the metadata plugin to maintain backward compatibility.

When setting options via the option method, the full set of options is passed to a new method called _setOptions. The default implementation is to just pass off each individual option to the existing _setOption method. However, you may want to override _setOptions in order to batch the updates. Check out the dialog widget for a nice example of batching updates.

Datepicker

The datepicker widget now has support for two more localizations: Galician and Portuguese.

Progressbar

Progressbar has finally received an update, with the addition of a new callback. There is now a complete event that is triggered when the value reaches the maximum of 100%.

Effects

Color animations now support the borderColor shorthand property for animating all four sides with a single property.

Changelog

See the 1.8.6 Upgrade Guide for a list of changes that may affect you when upgrading from 1.8.5. For full details on what’s included in this release see the 1.8.6 Changelog.

Thanks

Thanks to all who helped with this release, specifically: aebond, Alkarex, AzaToth, bakatron, benjamin.neau, bgrinstead, [email protected], boldewyn, burnrbr, can3p, chrisbarr, cim, clewis, Daniel Steigerwald, dejannenov, didroe, Dmitry Petrov, dziastinux, ehynds, enti, ergec, gavtaylor, itpretty, Ján Suchal, jenters, jitter, jmiller, joern.zaefferer, John Firebaugh, Jorge Barreiro, kbwood, kharpoh, Kryal, lfaustino, Lim Chee Aun, m157y, MechanisM, oov, phallstrom, PKBurgess1983, qpi, quaff, reidres, Richard D. Worth, rickgnyc, roncli, Rwhitbeck, Scott González, seb835, squix, stakach, Tanguy, unt01d, vaporetto, watanabe, waveduke, wiibaker, wprice, xirzec.

Comments

Note: please do NOT use the comments section of this blog post for reporting bugs. Bug reports should be filed in the jQuery UI Bug Tracker and support questions should be posted on the jQuery Forum.

If you have feedback on us doing our sixth maintenance release for jQuery UI 1.8, feel free to leave a comment below. Thank you.

jQuery UI 1.8.5

Posted on by

The fifth maintenance release for jQuery UI 1.8 is out. This update brings bug fixes for jQuery UI Core, the Widget Factory and the Position utility as well as the Autocomplete, Button, Datepicker Dialog, and Tabs widgets. For the full list of changes, see the changelog. You can download it here:

Download

File Downloads

Svn (contains final files as they are in the zip, with @VERSION replaced with 1.8.5, all themes)

Git (contains pre-build files, with @VERSION not yet replaced with 1.8.5, base theme only)

Google Ajax Libraries API (CDN)

Microsoft Ajax CDN (CDN)

Custom Download Builder

New CDN

We’re pleased to announce that Microsoft is now hosting jQuery UI on the Microsoft Ajax CDN. Microsoft is hosting uncompressed and compressed versions as well as all of our pre-built themes. For more information check out Stephen Walther’s announcement from Microsoft.

New Features

In this release, we’ve added jQuery.support.minHeight which detects whether the browser supports the minHeight style.

Dialog

You can now pass an object containing specific properties to set in the buttons option.

Changelog

See the 1.8.5 Upgrade Guide for a list of changes that may affect you when upgrading from 1.8.4. For full details on what’s included in this release see the 1.8.5 Changelog.

Thanks

Thanks to all who helped with this release, specifically: ahsan_cse2004, andreas, andreinjquery, AndrewNewcomb, awirick, AzaToth, Ben Hollis, BrianHV, bugbegone, cardmeister, chrismckee, Christopher McCulloh, Dave Methvin, d3r1v3d, dazzx, dreamershl, duckumu, ehynds, galo2099, iangrainger, jdalton, jlesueur, joern.zaefferer, jogep, jokerx, juergen.furrer, Karl Swedberg, keturn, klaus.hartl, malsup, NotionCommotion, Paul Irish, pdevemy, ph.ausseil, pjk, rdworth, robertstrait, Robson Braga Araujo, Scott González, spudly, srycroft, steida, Tony Ross, vjt, ya_diman.

Comments

Note: please do NOT use the comments section of this blog post for reporting bugs. Bug reports should be filed in the jQuery UI Bug Tracker and support questions should be posted on the jQuery Forum.

If you have feedback on us doing our fifth maintenance release for jQuery UI 1.8, feel free to leave a comment below. Thank you.

Extensible Autocomplete

Posted on by

The release of the Autocomplete widget in jQuery UI 1.8 was a pretty important milestone for the jQuery UI team. If you’ve looked at the widget, you may have noticed that there are only four options, far fewer than our other plugins. Unlike progressbar, our plugin with the fewest options, Autocomplete’s small API isn’t a direct result of the plugin’s simplicity. In fact, Autocomplete is quite complex.

When designing the Autocomplete widget, we started with Jörn Zaefferer’s Autocomplete plugin, which has 21 options, as a model. Admittedly, Jörn’s plugin does more for you out of the box than ours, but our smaller API is just as flexible and has the bonus of being easier to learn and use. A lot of thought, discussion, and prototyping went into narrowing down the list of 21 options to 4.

Out of the box, Autocomplete provides support for local data sources and remote (JSON) data sources by simply providing an array or url to the source option. Support for JSONP, XML, and caching can all be layered on top in just a few lines of code.

There’s also a set of extensions hosted by me that provide additional options for the Autocomplete widget. The html option (demo) allows you to specify whether your labels should be interpreted as HTML or text. There’s also the selectFirst option (demo) which automatically activates the first item when the menu is shown, reducing the number of keystrokes necessary to select an option. The autoSelect option (demo) allows a user to type out a valid option and tab away from the field without having to select the item from the menu. If the value entered by the user is valid, the select event will be triggered just as if the user had explicitly chosen the item from the menu. I also have an accent folding extension (demo) that makes it easier for users to select values with accented characters. For example, if there is an item with the text “Jörn”, the user would normally have to type the umlaut in order to see the item. However, if the accent folding extension is loaded, the user can type “Jorn” and they will still see the result.

Going a step further, you can use custom data formats and define custom displays. For example, you can categorize the results or display additional information such as item descriptions and images. There’s even an example of expandable search results (Note: this is just a prototype based on a demo from Roman Chyla, it is not full-featured. See the forum thread for more details). You can even support multiple words from a single text field.

Finally, there’s the combobox demo that brings Autocomplete functionality to select elements. The combobox hides the select element and instead displays a text field for the user to type in. The possible values are determined by parsing the options from the select, and the user can view all options by clicking a button next to the text field. For a detailed explanation of how the combobox works, check out Jörn’s article on Learning jQuery.

jQuery UI 1.8.4

Posted on by

The fourth maintenance release for jQuery UI 1.8 is out. This update brings bug fixes for the Droppable, Resizable, Selectable and Sortable interactions as well as the Accordion, Autocomplete, Button, Datepicker Dialog, Progressbar, Slider and Tabs widgets. jQuery UI 1.8.3 was released a few days prior to 1.8.4, but there was a problem with the build system that caused some of the files to not contain any copyright information. If you noticed the 1.8.3 release and upgraded, please upgrade to 1.8.4. For the full list of changes, see the changelog. You can download it here:

Download

File Downloads

Svn (contains final files as they are in the zip, with @VERSION replaced with 1.8.4, all themes)

Git (contains pre-build files, with @VERSION not yet replaced with 1.8.4, base theme only)

Google Ajax Libraries API (CDN)

Custom Download Builder

New Features

In this release, we’ve added four new methods to help with setting the dimensions of elements (actually, we’ve modified existing functions from jQuery core). .innerHeight(), .innerWidth(), .outerHeight(), and .outerWidth() can now be used as setters. They all accept a number as a parameter, and that number will be used to set the width or height appropriately, based on the padding, border, and margins (depending on the method).

Accordion

You can now pass multiple events to accordion’s event option. See the hover intent demo to see an example of an accordion reacting to both clicks and hovers.

Autocomplete

Two new options have been added to autocomplete: position and appendTo. The position option allows you to take advantage of the position utility to customize where the menu will be displayed. The appendTo option allows you to specify which element the menu will be appended to, defaulting to the body.

Dialog

The dialog plugin has also been updated to allow full usage of the position utility. Setting the dialog’s position with a string or array is still possible, but will be removed in a future version.

Tabs

The tabs plugin has been updated to allow accessing tabs by href in addition to index. The enable, disable, select, load, and remove methods all accept the href of a tab.

Changelog

See the 1.8.4 Upgrade Guide for a list of changes that may affect you when upgrading from 1.8.2. For full details on what’s included in this release see the 1.8.4 Changelog.

Thanks

Thanks to all who helped with this release, specifically: adw, afcapel, afmenez, ajcrews, ajpiano, Alberto Fernández Capel, ALLPRO, Ascold, AzaToth, bamccaig, banacan, Ben Blank, Ben Hollis, bostanio, botio, brazilianjoe, Carl Fürstenberg, charlesboyung, chromial, chungwu, Cloudream, david.long03, davidcroda, DayBay, dcramer, Diego, dmuir, dsdsico, dwreck, eduardo, ehynds, erikrose, eXtreme, floepi, francois, gavimobile, ggp, gwk, hhillen, hiszpan, Holger, Holger Rüprich, ilyasahmad, IYS, james, jawsper, jdsharp, jghermsen, joern.zaefferer, johnk_c4b, Jon Palmer, jquery-dev, JustinMacCarthy, kaito, keturn, Kevin Dalman, kingjeffrey, klaus.hartl, kobrigo, lambacck, LynXor, mathewpeterson, mgurley, mijobe, Mikko Rantanen, mnoland, mofle, mormegil, mvermilion, nbid, Nick_Craver, nmaves, nminale, paul, Pavel, redjag, RedNinja, remoteportal, Rich2k, Richard D. Worth, rtimmermans, Rwhitbeck, sam.enspiral, Samuel Cormier-Iijima, sarahinthelakes, sciyoshi, Scott González, scottjehl, Sebmaster, serhii, sleyhane, smiller.health, spudly, swago, talmdal, theojapa, Tiago Freire, triblondon, tt0shk0, tzkuei, usd2, vanboom, venky, wouter, ZeekDaGeek, Ziling Zhao.

productivity.appendTo( jQuery.ui )

Posted on by

Like most open source projects, jQuery UI is maintained by a team of developers volunteering their spare time to the project. While we’ve been very productive at times, occasionally the team gets busy and productivity slows, sometimes almost to a halt. With new plugins to design and build, old plugins to maintain, and a growing community to support, the need for a more stable development pace has become increasingly more important. Today we’re happy to announce that you can expect greatly increased productivity starting immediately.

Scott González, the lead developer for jQuery UI, has accepted a position at appendTo, a worldwide provider of consulting, training and support for jQuery and jQuery UI. Earlier this month, Scott started his new job where he will be spending half of his time working on jQuery UI under a 1,000 hour contract between appendTo and the jQuery Project. It’s important to mention that what Scott works on will be determined solely by the jQuery UI team, not by appendTo or appendTo’s clients.

So what has Scott been working on? He’s currently going through every open ticket in the bug tracker (which was up to 800 at the beginning of the month). So far he’s made his way through the tickets for accordion and autocomplete. Combined, these two plugins had 83 open tickets when he started this triage. Now accordion has 8 open tickets (three of which are feature requests) and autocomplete has no remaining tickets. Scott has also made a lot of progress working through the fork queue on GitHub.

Having dedicated time to work on jQuery UI has additional benefits as well. By increasing Scott’s availability, other members of the team can be more productive with their volunteered time. Scott is also able to review pull requests and answer questions on the Developing jQuery UI forum in a much more reasonable timeframe. This is something that we’ve struggled with for a long time.

Stay tuned for more updates.

jQuery UI Worldwide Sprint: Now scheduled for April 17 & 18

Posted on by

The jQuery UI Team is pleased to announce its second Worldwide sprint, to take place this Friday April 17th and Saturday 18th, 2009. Two full days of testing, fixes, documentation, and general getting-stuff-done. Our goal is ready the 1.7.2 release, so we can start focusing on 1.8 and beyond, and we invite any and all to help. Whether you have an hour, or an afternoon, come and run really fast with us.

How Will It Work?

We’ll all gather in IRC (#jqueryui-sprint on freenode) throughout the two-day sprint, with a couple of scheduled meetings to keep everyone on the same page, and make sure things keep moving. Other than that we’ll just be doing as much as we can, as fast as we can. Opening tickets, closing tickets, breaking stuff, fixing other things, and everyone’s favorite pastime: documentation (and demos). Take a look at last year’s sprint page to see what we accomplished.

I’m New Here. Can I Help?

Absolutely. If you’ve thought about contributing to jQuery or jQuery UI before, but never really found the right moment or momentum, this sprint is the perfect time to get involved. A number of members of the jQuery UI Team will be around to help people get started, especially if it’s your first time. We’ll help you help us, in whatever way you want. That could be testing, documentation, ticket triage, bug fixes, writing demos, contributing to the planning wiki or even just playing with new stuff as we churn it out, and providing valuable feedback.

More Details

We’ve created a wiki page to help coordinate this big event. It has some more details on what is planned, how to jump in, and will be updated throughout the sprint to show status and next steps.

Tell us you’re coming!

We invite you to add your name to the wiki page as a participant, if you’re interested, even if you have only a few hours (or aren’t sure how much time you’ll have). Also, feel free to specify what you’re willing and/or able to do. Thanks!