From 94d87c8ad61be23ba17836e964ec28099ac21669 Mon Sep 17 00:00:00 2001 From: kborchers Date: Thu, 31 May 2012 19:54:12 -0500 Subject: [PATCH 001/112] Menu: Don't remove the icon elements on destroy since they exist in the original markup --- ui/jquery.ui.menu.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/ui/jquery.ui.menu.js b/ui/jquery.ui.menu.js index 54a85abf59..6969eff506 100644 --- a/ui/jquery.ui.menu.js +++ b/ui/jquery.ui.menu.js @@ -157,10 +157,7 @@ $.widget( "ui.menu", { .removeClass( "ui-corner-all ui-state-hover" ) .removeAttr( "tabIndex" ) .removeAttr( "role" ) - .removeAttr( "aria-haspopup" ) - // TODO: is this correct? Don't these exist in the original markup? - .children( ".ui-icon" ) - .remove(); + .removeAttr( "aria-haspopup" ); // unbind currentEventTarget click event handler $( currentEventTarget ).unbind( "click.menu" ); From ef9a0c005cf8b299262a490b1ac5a529657d6829 Mon Sep 17 00:00:00 2001 From: kborchers Date: Thu, 31 May 2012 19:55:18 -0500 Subject: [PATCH 002/112] Menu: Typo in comment --- ui/jquery.ui.menu.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/jquery.ui.menu.js b/ui/jquery.ui.menu.js index 6969eff506..daae776c05 100644 --- a/ui/jquery.ui.menu.js +++ b/ui/jquery.ui.menu.js @@ -297,7 +297,7 @@ $.widget( "ui.menu", { // initialize unlinked menu-items containing spaces and/or dashes only as dividers menus.children( ":not(.ui-menu-item)" ).each( function() { var item = $( this ); - // hypen, em dash, en dash + // hyphen, em dash, en dash if ( !/[^\-—–\s]/.test( item.text() ) ) { item.addClass( "ui-widget-content ui-menu-divider" ); } From 6e7ee9860356d203e75086a1ca92864fe1d9f246 Mon Sep 17 00:00:00 2001 From: kborchers Date: Thu, 31 May 2012 23:03:51 -0500 Subject: [PATCH 003/112] Menu: Add comment explaining extra filter from keypress --- ui/jquery.ui.menu.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ui/jquery.ui.menu.js b/ui/jquery.ui.menu.js index daae776c05..4bcfbfdb2a 100644 --- a/ui/jquery.ui.menu.js +++ b/ui/jquery.ui.menu.js @@ -229,7 +229,8 @@ $.widget( "ui.menu", { this.active.nextAll( ".ui-menu-item" ) : match; - // TODO: document what's going on here, character is reset to the original value + // If no matches on the current filter, reset to the last character pressed + // to move down the menu to the first item that starts with that character if ( !match.length ) { character = String.fromCharCode( event.keyCode ); match = this.activeMenu.children( ".ui-menu-item" ).filter(function() { From 2da2ae5070e976c23ea4e19ff705dcba822838d8 Mon Sep 17 00:00:00 2001 From: kborchers Date: Fri, 1 Jun 2012 00:03:16 -0500 Subject: [PATCH 004/112] Menu: Properly remove submenu carat icons and menu dividers during destroy and add a test for this functionality --- tests/unit/menu/menu_methods.js | 3 +++ ui/jquery.ui.menu.js | 18 ++++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/tests/unit/menu/menu_methods.js b/tests/unit/menu/menu_methods.js index c179868163..3a7b2d8fe2 100644 --- a/tests/unit/menu/menu_methods.js +++ b/tests/unit/menu/menu_methods.js @@ -46,6 +46,9 @@ test("destroy", function() { domEqual("#menu1", function() { $("#menu1").menu().menu("destroy"); }); + domEqual("#menu2", function() { + $("#menu2").menu().menu("destroy"); + }); domEqual("#menu5", function() { $("#menu5").menu().menu("destroy"); }); diff --git a/ui/jquery.ui.menu.js b/ui/jquery.ui.menu.js index 4bcfbfdb2a..986cca1684 100644 --- a/ui/jquery.ui.menu.js +++ b/ui/jquery.ui.menu.js @@ -137,7 +137,7 @@ $.widget( "ui.menu", { this.element .removeAttr( "aria-activedescendant" ) .find( ".ui-menu" ).andSelf() - .removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all" ) + .removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" ) .removeAttr( "role" ) .removeAttr( "tabIndex" ) .removeAttr( "aria-labelledby" ) @@ -157,7 +157,16 @@ $.widget( "ui.menu", { .removeClass( "ui-corner-all ui-state-hover" ) .removeAttr( "tabIndex" ) .removeAttr( "role" ) - .removeAttr( "aria-haspopup" ); + .removeAttr( "aria-haspopup" ) + .children().each( function() { + var elem = $( this ); + if ( elem.data( "ui-menu-submenu-carat" ) ) { + elem.remove(); + } + }); + + // destroy menu dividers + this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" ); // unbind currentEventTarget click event handler $( currentEventTarget ).unbind( "click.menu" ); @@ -309,11 +318,12 @@ $.widget( "ui.menu", { submenus.each(function() { var menu = $( this ), - item = menu.prev( "a" ); + item = menu.prev( "a" ), + submenuCarat = $( '' ).data( "ui-menu-submenu-carat", true ); item .attr( "aria-haspopup", "true" ) - .prepend( '' ); + .prepend( submenuCarat ); menu.attr( "aria-labelledby", item.attr( "id" ) ); }); }, From 8f42ab013469865ae790089717a56b6ca774dc75 Mon Sep 17 00:00:00 2001 From: "Amir E. Aharoni" Date: Fri, 1 Jun 2012 12:56:50 +0300 Subject: [PATCH 005/112] Datepicker: Changed Arabic dayNamesMin to one-letter strings. Fixes #8375 - Datepicker: Incorrect dayNamesMin for Arabic locale. Before this change the minimal names for days of week were the same as the long names. This caused the datepicker to be too wide. The one-letter strings come from the CLDR: http://unicode.org/repos/cldr-tmp/trunk/diff/summary/ar.html --- ui/i18n/jquery.ui.datepicker-ar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/i18n/jquery.ui.datepicker-ar.js b/ui/i18n/jquery.ui.datepicker-ar.js index f24b3ff5a1..f0d009667e 100644 --- a/ui/i18n/jquery.ui.datepicker-ar.js +++ b/ui/i18n/jquery.ui.datepicker-ar.js @@ -12,7 +12,7 @@ jQuery(function($){ monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], - dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], + dayNamesMin: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'], weekHeader: 'أسبوع', dateFormat: 'dd/mm/yy', firstDay: 6, From 6dcc5c14c824ae9d653b1bc293680f6af6baf1b4 Mon Sep 17 00:00:00 2001 From: Mike Stay Date: Wed, 6 Jun 2012 09:59:15 -0400 Subject: [PATCH 006/112] Datepicker: Pulled event handlers into static code. Fixed #3945 - DatePicker does not respond to any click events in AIR, Google Sites, Windows Metro. --- ui/jquery.ui.datepicker.js | 62 ++++++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 16 deletions(-) diff --git a/ui/jquery.ui.datepicker.js b/ui/jquery.ui.datepicker.js index a92c9fafa4..ffc57266c3 100644 --- a/ui/jquery.ui.datepicker.js +++ b/ui/jquery.ui.datepicker.js @@ -715,6 +715,7 @@ $.extend(Datepicker.prototype, { var borders = $.datepicker._getBorders(inst.dpDiv); instActive = inst; // for delegate hover events inst.dpDiv.empty().append(this._generateHTML(inst)); + this._attachHandlers(inst); var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only if( !!cover.length ){ //avoid call to outerXXXX() when not in IE6 cover.css({left: -borders[0], top: -borders[1], width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()}) @@ -1408,6 +1409,43 @@ $.extend(Datepicker.prototype, { return startDate; }, + /* Attach the onxxx handlers. These are declared statically so + * they work with static code transformers like Caja. + */ + _attachHandlers: function(inst) { + var stepMonths = this._get(inst, 'stepMonths'); + var id = '#' + inst.id; + inst.dpDiv.find('[data-handler]').map(function () { + var handler = { + prev: function () { + window['DP_jQuery_' + dpuuid].datepicker._adjustDate(id, -stepMonths, 'M'); + }, + next: function () { + window['DP_jQuery_' + dpuuid].datepicker._adjustDate(id, +stepMonths, 'M'); + }, + hide: function () { + window['DP_jQuery_' + dpuuid].datepicker._hideDatepicker(); + }, + today: function () { + window['DP_jQuery_' + dpuuid].datepicker._gotoToday(id); + }, + selectDay: function () { + window['DP_jQuery_' + dpuuid].datepicker._selectDay(id, +this.getAttribute('data-month'), +this.getAttribute('data-year'), this); + return false; + }, + selectMonth: function () { + window['DP_jQuery_' + dpuuid].datepicker._selectMonthYear(id, this, 'M'); + return false; + }, + selectYear: function () { + window['DP_jQuery_' + dpuuid].datepicker._selectMonthYear(id, this, 'Y'); + return false; + } + }; + $(this).bind(this.getAttribute('data-event'), handler[this.getAttribute('data-handler')]); + }); + }, + /* Generate the HTML for the current state of the date picker. */ _generateHTML: function(inst) { var today = new Date(); @@ -1450,8 +1488,7 @@ $.extend(Datepicker.prototype, { this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), this._getFormatConfig(inst))); var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? - '' + prevText + '' : (hideIfNoPrevNext ? '' : '' + prevText + '')); var nextText = this._get(inst, 'nextText'); @@ -1459,19 +1496,17 @@ $.extend(Datepicker.prototype, { this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), this._getFormatConfig(inst))); var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ? - '' + nextText + '' : (hideIfNoPrevNext ? '' : '' + nextText + '')); var currentText = this._get(inst, 'currentText'); var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today); currentText = (!navigationAsDateFormat ? currentText : this.formatDate(currentText, gotoDate, this._getFormatConfig(inst))); - var controls = (!inst.inline ? '' : ''); + var controls = (!inst.inline ? '' : ''); var buttonPanel = (showButtonPanel) ? '
' + (isRTL ? controls : '') + - (this._isInRange(inst, gotoDate) ? '' : '') + (isRTL ? '' : controls) + '
' : ''; var firstDay = parseInt(this._get(inst, 'firstDay'),10); firstDay = (isNaN(firstDay) ? 0 : firstDay); @@ -1550,8 +1585,7 @@ $.extend(Datepicker.prototype, { (printDate.getTime() == currentDate.getTime() ? ' ' + this._currentClass : '') + // highlight selected day (printDate.getTime() == today.getTime() ? ' ui-datepicker-today' : '')) + '"' + // highlight today (if different) ((!otherMonth || showOtherMonths) && daySettings[2] ? ' title="' + daySettings[2] + '"' : '') + // cell title - (unselectable ? '' : ' onclick="DP_jQuery_' + dpuuid + '.datepicker._selectDay(\'#' + - inst.id + '\',' + printDate.getMonth() + ',' + printDate.getFullYear() + ', this);return false;"') + '>' + // actions + (unselectable ? '' : ' data-handler="selectDay" data-event="click" data-month="' + printDate.getMonth() + '" data-year="' + printDate.getFullYear() + '"') + '>' + // actions (otherMonth && !showOtherMonths ? ' ' : // display for other months (unselectable ? '' + printDate.getDate() + '' : ''; + monthHtml += ''; + inst.yearshtml += '" ); group.find( "input[type=checkbox]" ).button(); ok( group.find( "label" ).is( ".ui-button" ) ); @@ -51,6 +55,7 @@ test( "#7092 - button creation that requires a matching label does not find labe }); test( "#7534 - Button label selector works for ids with \":\"", function() { + expect( 1 ); var group = $( "" ); group.find( "input" ).button(); ok( group.find( "label" ).is( ".ui-button" ), "Found an id with a :" ); diff --git a/tests/unit/core/core.js b/tests/unit/core/core.js index 41bc2ab5b1..5ebb9e9f4e 100644 --- a/tests/unit/core/core.js +++ b/tests/unit/core/core.js @@ -28,6 +28,7 @@ asyncTest( "focus", function() { }); test( "zIndex", function() { + expect( 7 ); var el = $( "#zIndexAutoWithParent" ), parent = el.parent(); equal( el.zIndex(), 100, "zIndex traverses up to find value" ); @@ -46,6 +47,7 @@ test( "zIndex", function() { }); test( "innerWidth - getter", function() { + expect( 2 ); var el = $( "#dimensions" ); equal( el.innerWidth(), 122, "getter passthru" ); @@ -54,6 +56,7 @@ test( "innerWidth - getter", function() { }); test( "innerWidth - setter", function() { + expect( 2 ); var el = $( "#dimensions" ); el.innerWidth( 120 ); @@ -64,6 +67,7 @@ test( "innerWidth - setter", function() { }); test( "innerHeight - getter", function() { + expect( 2 ); var el = $( "#dimensions" ); equal( el.innerHeight(), 70, "getter passthru" ); @@ -72,6 +76,7 @@ test( "innerHeight - getter", function() { }); test( "innerHeight - setter", function() { + expect( 2 ); var el = $( "#dimensions" ); el.innerHeight( 60 ); @@ -82,6 +87,7 @@ test( "innerHeight - setter", function() { }); test( "outerWidth - getter", function() { + expect( 2 ); var el = $( "#dimensions" ); equal( el.outerWidth(), 140, "getter passthru" ); @@ -90,6 +96,7 @@ test( "outerWidth - getter", function() { }); test( "outerWidth - setter", function() { + expect( 2 ); var el = $( "#dimensions" ); el.outerWidth( 130 ); @@ -100,6 +107,7 @@ test( "outerWidth - setter", function() { }); test( "outerWidth(true) - getter", function() { + expect( 2 ); var el = $( "#dimensions" ); equal( el.outerWidth(true), 154, "getter passthru w/ margin" ); @@ -108,6 +116,7 @@ test( "outerWidth(true) - getter", function() { }); test( "outerWidth(true) - setter", function() { + expect( 2 ); var el = $( "#dimensions" ); el.outerWidth( 130, true ); @@ -118,6 +127,7 @@ test( "outerWidth(true) - setter", function() { }); test( "outerHeight - getter", function() { + expect( 2 ); var el = $( "#dimensions" ); equal( el.outerHeight(), 86, "getter passthru" ); @@ -126,6 +136,7 @@ test( "outerHeight - getter", function() { }); test( "outerHeight - setter", function() { + expect( 2 ); var el = $( "#dimensions" ); el.outerHeight( 80 ); @@ -136,6 +147,7 @@ test( "outerHeight - setter", function() { }); test( "outerHeight(true) - getter", function() { + expect( 2 ); var el = $( "#dimensions" ); equal( el.outerHeight(true), 98, "getter passthru w/ margin" ); @@ -144,6 +156,7 @@ test( "outerHeight(true) - getter", function() { }); test( "outerHeight(true) - setter", function() { + expect( 2 ); var el = $( "#dimensions" ); el.outerHeight( 90, true ); @@ -154,6 +167,7 @@ test( "outerHeight(true) - setter", function() { }); test( "uniqueId / removeUniqueId", function() { + expect( 3 ); var el = $( "img" ).eq( 0 ); // support: jQuery <1.6.2 diff --git a/tests/unit/core/selector.js b/tests/unit/core/selector.js index 4309289c94..7876cdd07f 100644 --- a/tests/unit/core/selector.js +++ b/tests/unit/core/selector.js @@ -150,6 +150,8 @@ test("focusable - not natively focusable with various tabindex", function() { }); test("focusable - area elements", function() { + expect( 3 ); + isFocusable('#areaCoordsHref', 'coords and href'); isFocusable('#areaNoCoordsHref', 'href but no coords'); isNotFocusable('#areaNoImg', 'not associated with an image'); @@ -227,6 +229,8 @@ test("tabbable - not natively tabbable with various tabindex", function() { }); test("tabbable - area elements", function() { + expect( 3 ); + isTabbable('#areaCoordsHref', 'coords and href'); isTabbable('#areaNoCoordsHref', 'href but no coords'); isNotTabbable('#areaNoImg', 'not associated with an image'); diff --git a/tests/unit/datepicker/datepicker_core.js b/tests/unit/datepicker/datepicker_core.js index 4bf04d83e6..17cefe1576 100644 --- a/tests/unit/datepicker/datepicker_core.js +++ b/tests/unit/datepicker/datepicker_core.js @@ -43,16 +43,19 @@ var PROP_NAME = 'datepicker'; module("datepicker: core"); test( "widget method - empty collection", function() { + expect( 1 ); $( "#nonExist" ).datepicker(); // should create nothing ok( !$( "#ui-datepicker-div" ).length, "Non init on empty collection" ); }); test("widget method", function() { + expect( 1 ); var actual = $("#inp").datepicker().datepicker("widget")[0]; deepEqual($("body > #ui-datepicker-div:last-child")[0], actual); }); test('baseStructure', function() { + expect( 59 ); var header, title, table, thead, week, panel, inl, child, inp = init('#inp').focus(), dp = $('#ui-datepicker-div'), @@ -176,6 +179,7 @@ test('baseStructure', function() { }); test('customStructure', function() { + expect( 20 ); var iframe, header, panel, title, thead, dp = $('#ui-datepicker-div'), // Check right-to-left localisation @@ -233,6 +237,7 @@ test('customStructure', function() { }); test('keystrokes', function() { + expect( 26 ); var inp = init('#inp'), date = new Date(); inp.val('').datepicker('show'). @@ -367,6 +372,7 @@ test('keystrokes', function() { }); test('mouse', function() { + expect( 15 ); var inl, inp = init('#inp'), dp = $('#ui-datepicker-div'), diff --git a/tests/unit/datepicker/datepicker_events.js b/tests/unit/datepicker/datepicker_events.js index b3e6704ef5..e35be62cee 100644 --- a/tests/unit/datepicker/datepicker_events.js +++ b/tests/unit/datepicker/datepicker_events.js @@ -22,6 +22,7 @@ function callback2(year, month, inst) { } test('events', function() { + expect( 26 ); var dateStr, newMonthYear, inp2, inp = init('#inp', {onSelect: callback}), date = new Date(); diff --git a/tests/unit/datepicker/datepicker_methods.js b/tests/unit/datepicker/datepicker_methods.js index 6034274400..e7aa7602e1 100644 --- a/tests/unit/datepicker/datepicker_methods.js +++ b/tests/unit/datepicker/datepicker_methods.js @@ -6,6 +6,7 @@ module("datepicker: methods"); test('destroy', function() { + expect( 33 ); var inl, inp = init('#inp'); ok(inp.is('.hasDatepicker'), 'Default - marker class set'); @@ -63,6 +64,7 @@ test('destroy', function() { }); test('enableDisable', function() { + expect( 33 ); var inl, dp, inp = init('#inp'); ok(!inp.datepicker('isDisabled'), 'Enable/disable - initially marked as enabled'); diff --git a/tests/unit/datepicker/datepicker_options.js b/tests/unit/datepicker/datepicker_options.js index 3e200ecaa8..a01b9c7e0a 100644 --- a/tests/unit/datepicker/datepicker_options.js +++ b/tests/unit/datepicker/datepicker_options.js @@ -7,6 +7,7 @@ module("datepicker: options"); test('setDefaults', function() { + expect( 3 ); var inp = init('#inp'); equal($.datepicker._defaults.showOn, 'focus', 'Initial showOn'); $.datepicker.setDefaults({showOn: 'button'}); @@ -16,6 +17,7 @@ test('setDefaults', function() { }); test('option', function() { + expect( 17 ); var inp = init('#inp'), inst = $.data(inp[0], PROP_NAME); // Set option @@ -47,6 +49,7 @@ test('option', function() { }); test('change', function() { + expect( 12 ); var inp = init('#inp'), inst = $.data(inp[0], PROP_NAME); equal(inst.settings.showOn, null, 'Initial setting showOn'); @@ -67,6 +70,7 @@ test('change', function() { }); test('invocation', function() { + expect( 29 ); var button, image, inp = init('#inp'), dp = $('#ui-datepicker-div'), @@ -138,6 +142,7 @@ test('invocation', function() { }); test('otherMonths', function() { + expect( 8 ); var inp = init('#inp'), pop = $('#ui-datepicker-div'); inp.val('06/01/2009').datepicker('show'); @@ -159,6 +164,7 @@ test('otherMonths', function() { }); test('defaultDate', function() { + expect( 17 ); var inp = init('#inp'), date = new Date(); inp.val('').datepicker('show'). @@ -253,6 +259,7 @@ test('defaultDate', function() { }); test('miscellaneous', function() { + expect( 19 ); var curYear, longNames, shortNames, date, dp = $('#ui-datepicker-div'), inp = init('#inp'); @@ -314,6 +321,7 @@ test('miscellaneous', function() { }); test('minMax', function() { + expect( 17 ); var date, inp = init('#inp'), lastYear = new Date(2007, 6 - 1, 4), @@ -398,6 +406,7 @@ test('minMax', function() { }); test('setDate', function() { + expect( 24 ); var inl, alt, minDate, maxDate, dateAndTimeToSet, dateAndTimeClone, inp = init('#inp'), date1 = new Date(2008, 6 - 1, 4), @@ -477,6 +486,7 @@ test('setDate', function() { }); test('altField', function() { + expect( 10 ); var inp = init('#inp'), alt = $('#alt'); // No alternate field set @@ -515,6 +525,7 @@ test('altField', function() { }); test('autoSize', function() { + expect( 15 ); var inp = init('#inp'); equal(inp.prop('size'), 20, 'Auto size - default'); inp.datepicker('option', 'autoSize', true); @@ -550,6 +561,7 @@ test('autoSize', function() { }); test('daylightSaving', function() { + expect( 25 ); var inp = init('#inp'), dp = $('#ui-datepicker-div'); ok(true, 'Daylight saving - ' + new Date()); @@ -664,6 +676,7 @@ function calcWeek(date) { } test('callbacks', function() { + expect( 13 ); // Before show var dp, day20, day21, inp = init('#inp', {beforeShow: beforeAll}), @@ -693,6 +706,7 @@ test('callbacks', function() { }); test('localisation', function() { + expect( 24 ); var dp, month, day, date, inp = init('#inp', $.datepicker.regional.fr); inp.datepicker('option', {dateFormat: 'DD, d MM yy', showButtonPanel:true, changeMonth:true, changeYear:true}).val('').datepicker('show'); @@ -722,6 +736,7 @@ test('localisation', function() { }); test('noWeekends', function() { + expect( 31 ); var i, date; for (i = 1; i <= 31; i++) { date = new Date(2001, 1 - 1, i); @@ -731,6 +746,7 @@ test('noWeekends', function() { }); test('iso8601Week', function() { + expect( 12 ); var date = new Date(2000, 12 - 1, 31); equal($.datepicker.iso8601Week(date), 52, 'ISO 8601 week ' + date); date = new Date(2001, 1 - 1, 1); @@ -758,6 +774,7 @@ test('iso8601Week', function() { }); test('parseDate', function() { + expect( 26 ); init('#inp'); var currentYear, gmtDate, fr, settings, zh; ok($.datepicker.parseDate('d m y', '') == null, 'Parse date empty'); @@ -822,6 +839,7 @@ test('parseDate', function() { }); test('parseDateErrors', function() { + expect( 17 ); init('#inp'); var fr, settings; function expectError(expr, value, error) { @@ -874,6 +892,7 @@ test('parseDateErrors', function() { }); test('formatDate', function() { + expect( 16 ); init('#inp'); var gmtDate, fr, settings; equal($.datepicker.formatDate('d m y', new Date(2001, 2 - 1, 3)), diff --git a/tests/unit/datepicker/datepicker_tickets.js b/tests/unit/datepicker/datepicker_tickets.js index 105be63a64..e1b882a89e 100644 --- a/tests/unit/datepicker/datepicker_tickets.js +++ b/tests/unit/datepicker/datepicker_tickets.js @@ -7,6 +7,7 @@ module("datepicker: tickets"); // http://forum.jquery.com/topic/several-breaking-changes-in-jquery-ui-1-8rc1 test('beforeShowDay-getDate', function() { + expect( 3 ); var inp = init('#inp', {beforeShowDay: function(date) { inp.datepicker('getDate'); return [true, '']; }}), dp = $('#ui-datepicker-div'); inp.val('01/01/2010').datepicker('show'); @@ -25,6 +26,7 @@ test('beforeShowDay-getDate', function() { }); test('Ticket 7602: Stop datepicker from appearing with beforeShow event handler', function(){ + expect( 3 ); var inp = init('#inp',{ beforeShow: function(){ return false; @@ -58,11 +60,13 @@ test('Ticket 7602: Stop datepicker from appearing with beforeShow event handler' }); test('Ticket 6827: formatDate day of year calculation is wrong during day lights savings time', function(){ + expect( 1 ); var time = $.datepicker.formatDate("oo", new Date("2010/03/30 12:00:00 CDT")); equal(time, "089"); }); test('Ticket #7244: date parser does not fail when too many numbers are passed into the date function', function() { + expect( 4 ); var date; try{ date = $.datepicker.parseDate('dd/mm/yy', '18/04/19881'); diff --git a/tests/unit/dialog/dialog_core.js b/tests/unit/dialog/dialog_core.js index 636b957e8c..e0a5c87017 100644 --- a/tests/unit/dialog/dialog_core.js +++ b/tests/unit/dialog/dialog_core.js @@ -116,6 +116,7 @@ test("ARIA", function() { }); test("widget method", function() { + expect( 1 ); var dialog = $("
").appendTo("#main").dialog(); deepEqual(dialog.parent()[0], dialog.dialog("widget")[0]); }); diff --git a/tests/unit/dialog/dialog_methods.js b/tests/unit/dialog/dialog_methods.js index 1f84cd6b5b..ba0c2bd412 100644 --- a/tests/unit/dialog/dialog_methods.js +++ b/tests/unit/dialog/dialog_methods.js @@ -34,6 +34,8 @@ test("init", function() { }); test("destroy", function() { + expect( 4 ); + $("
").appendTo('body').dialog().dialog("destroy").remove(); ok(true, '.dialog("destroy") called on element'); @@ -49,6 +51,8 @@ test("destroy", function() { }); test("enable", function() { + expect( 3 ); + var expected = $('
').dialog(), actual = expected.dialog('enable'); equal(actual, expected, 'enable is chainable'); @@ -60,6 +64,8 @@ test("enable", function() { }); test("disable", function() { + expect( 3 ); + var expected = $('
').dialog(), actual = expected.dialog('disable'); equal(actual, expected, 'disable is chainable'); @@ -71,6 +77,8 @@ test("disable", function() { }); test("close", function() { + expect( 3 ); + var expected = $('
').dialog(), actual = expected.dialog('close'); equal(actual, expected, 'close is chainable'); @@ -98,6 +106,8 @@ test("isOpen", function() { }); test("moveToTop", function() { + expect( 3 ); + var d1, d2, dlg1, dlg2, expected = $('
').dialog(), actual = expected.dialog('moveToTop'); @@ -117,6 +127,7 @@ test("moveToTop", function() { }); test("open", function() { + expect( 3 ); var expected = $('
').dialog(), actual = expected.dialog('open'); equal(actual, expected, 'open is chainable'); diff --git a/tests/unit/dialog/dialog_options.js b/tests/unit/dialog/dialog_options.js index c071c1b092..ba217c6f46 100644 --- a/tests/unit/dialog/dialog_options.js +++ b/tests/unit/dialog/dialog_options.js @@ -106,6 +106,7 @@ test("buttons - advanced", function() { }); test("closeOnEscape", function() { + expect( 6 ); el = $('
').dialog({ closeOnEscape: false }); ok(true, 'closeOnEscape: false'); ok(dlg().is(':visible') && !dlg().is(':hidden'), 'dialog is open before ESC'); @@ -276,6 +277,7 @@ test("minWidth", function() { }); test("position, default center on window", function() { + expect( 2 ); var el = $('
').dialog(), dialog = el.dialog('widget'), offset = dialog.offset(); @@ -285,6 +287,7 @@ test("position, default center on window", function() { }); test("position, top on window", function() { + expect( 2 ); var el = $('
').dialog({ position: "top" }), dialog = el.dialog('widget'), offset = dialog.offset(); @@ -294,6 +297,7 @@ test("position, top on window", function() { }); test("position, left on window", function() { + expect( 2 ); var el = $('
').dialog({ position: "left" }), dialog = el.dialog('widget'), offset = dialog.offset(); @@ -303,6 +307,7 @@ test("position, left on window", function() { }); test("position, right bottom on window", function() { + expect( 2 ); var el = $('
').dialog({ position: "right bottom" }), dialog = el.dialog('widget'), offset = dialog.offset(); @@ -312,6 +317,7 @@ test("position, right bottom on window", function() { }); test("position, right bottom on window w/array", function() { + expect( 2 ); var el = $('
').dialog({ position: ["right", "bottom"] }), dialog = el.dialog('widget'), offset = dialog.offset(); @@ -321,6 +327,7 @@ test("position, right bottom on window w/array", function() { }); test("position, offset from top left w/array", function() { + expect( 2 ); var el = $('
').dialog({ position: [10, 10] }), dialog = el.dialog('widget'), offset = dialog.offset(); @@ -330,6 +337,7 @@ test("position, offset from top left w/array", function() { }); test("position, right bottom at right bottom via ui.position args", function() { + expect( 2 ); var el = $('
').dialog({ position: { my: "right bottom", @@ -345,6 +353,7 @@ test("position, right bottom at right bottom via ui.position args", function() { }); test("position, at another element", function() { + expect( 4 ); var parent = $('
').css({ position: 'absolute', top: 400, diff --git a/tests/unit/dialog/dialog_tickets.js b/tests/unit/dialog/dialog_tickets.js index 98983cf334..201ea3a87a 100644 --- a/tests/unit/dialog/dialog_tickets.js +++ b/tests/unit/dialog/dialog_tickets.js @@ -71,6 +71,7 @@ test("#5184: isOpen in dialogclose event is true", function() { }); test("#5531: dialog width should be at least minWidth on creation", function () { + expect( 4 ); el = $('
').dialog({ width: 200, minWidth: 300 @@ -192,6 +193,7 @@ test("#6966: Escape key closes all dialogs, not the top one", function(){ }); test("#4980: Destroy should place element back in original DOM position", function(){ + expect( 2 ); container = $('
'); modal = container.find('#modal'); modal.dialog(); diff --git a/tests/unit/effects/effects_core.js b/tests/unit/effects/effects_core.js index 04bfc12da2..9b4787a575 100644 --- a/tests/unit/effects/effects_core.js +++ b/tests/unit/effects/effects_core.js @@ -153,6 +153,7 @@ asyncTest( "animateClass clears style properties when stopped", function() { }); asyncTest( "animateClass: css and class changes during animation are not lost (#7106)", function() { + expect( 2 ); var test = $( "div.ticket7106" ); // ensure the class stays and that the css property stays diff --git a/tests/unit/effects/effects_scale.js b/tests/unit/effects/effects_scale.js index f06fa0f466..6abbcb5382 100644 --- a/tests/unit/effects/effects_scale.js +++ b/tests/unit/effects/effects_scale.js @@ -4,6 +4,7 @@ module( "effect.scale: Scale" ); function run( position, v, h, vo, ho ) { var desc = "End Position Correct: " + position + " (" + v + "," + h + ") - origin: (" + vo + "," + ho + ")"; asyncTest( desc, function() { + expect( 2 ); function complete() { equal( parseInt( test.css( h ), 10 ), target[ h ], "Horizontal Position Correct " + desc ); equal( parseInt( test.css( v ), 10 ), target[ v ], "Vertical Position Correct " + desc ); diff --git a/tests/unit/position/position_deprecated.js b/tests/unit/position/position_deprecated.js index 9a3164246c..789d4e6081 100644 --- a/tests/unit/position/position_deprecated.js +++ b/tests/unit/position/position_deprecated.js @@ -1,6 +1,7 @@ (function( $ ) { test( "offset", function() { + expect( 3 ); $( "#elx" ).position({ my: "left top", at: "left bottom", diff --git a/tests/unit/progressbar/progressbar_options.js b/tests/unit/progressbar/progressbar_options.js index f050fc5da6..fd5988ebde 100644 --- a/tests/unit/progressbar/progressbar_options.js +++ b/tests/unit/progressbar/progressbar_options.js @@ -1,6 +1,7 @@ module( "progressbar: options" ); test( "{ value : 0 }, default", function() { + expect( 1 ); $( "#progressbar" ).progressbar(); equal( 0, $( "#progressbar" ).progressbar( "value" ) ); }); @@ -28,6 +29,7 @@ test( "value: visibility of valueDiv", function() { }); test( "{ value : 5 }", function() { + expect( 1 ); $( "#progressbar" ).progressbar({ value: 5 }); @@ -35,6 +37,7 @@ test( "{ value : 5 }", function() { }); test( "{ value : -5 }", function() { + expect( 1 ); $( "#progressbar" ).progressbar({ value: -5 }); @@ -42,6 +45,7 @@ test( "{ value : -5 }", function() { }); test( "{ value : 105 }", function() { + expect( 1 ); $( "#progressbar" ).progressbar({ value: 105 }); @@ -49,6 +53,7 @@ test( "{ value : 105 }", function() { }); test( "{ max : 5, value : 10 }", function() { + expect( 1 ); $("#progressbar").progressbar({ max: 5, value: 10 diff --git a/tests/unit/tabs/tabs_methods.js b/tests/unit/tabs/tabs_methods.js index e48d353e74..a41d7069d6 100644 --- a/tests/unit/tabs/tabs_methods.js +++ b/tests/unit/tabs/tabs_methods.js @@ -6,6 +6,7 @@ var disabled = TestHelpers.tabs.disabled, module( "tabs: methods" ); test( "destroy", function() { + expect( 1 ); domEqual( "#tabs1", function() { $( "#tabs1" ).tabs().tabs( "destroy" ); }); diff --git a/tests/unit/tabs/tabs_options.js b/tests/unit/tabs/tabs_options.js index 8365a42d71..eed5b99d8b 100644 --- a/tests/unit/tabs/tabs_options.js +++ b/tests/unit/tabs/tabs_options.js @@ -69,6 +69,8 @@ test( "{ active: Number }", function() { if ( $.uiBackCompat === false ) { test( "{ active: -Number }", function() { + expect( 8 ); + var element = $( "#tabs1" ).tabs({ active: -1 }); diff --git a/tests/unit/testsuite.js b/tests/unit/testsuite.js index e4f549de68..99694a83e4 100644 --- a/tests/unit/testsuite.js +++ b/tests/unit/testsuite.js @@ -10,6 +10,8 @@ function includeScript( url ) { document.write( "" ); } +QUnit.config.requireExpects = true; + QUnit.config.urlConfig.push( "min" ); TestHelpers.loadResources = QUnit.urlParams.min ? function() { @@ -76,7 +78,9 @@ function testWidgetDefaults( widget, defaults ) { // ensure that all defaults have the correct value test( "defined defaults", function() { + var count = 0; $.each( defaults, function( key, val ) { + expect( ++count ); if ( $.isFunction( val ) ) { ok( $.isFunction( pluginDefaults[ key ] ), key ); return; @@ -87,7 +91,9 @@ function testWidgetDefaults( widget, defaults ) { // ensure that all defaults were tested test( "tested defaults", function() { + var count = 0; $.each( pluginDefaults, function( key, val ) { + expect( ++count ); ok( key in defaults, key ); }); }); @@ -96,6 +102,7 @@ function testWidgetDefaults( widget, defaults ) { function testWidgetOverrides( widget ) { if ( $.uiBackCompat === false ) { test( "$.widget overrides", function() { + expect( 4 ); $.each([ "_createWidget", "destroy", @@ -111,6 +118,8 @@ function testWidgetOverrides( widget ) { function testBasicUsage( widget ) { test( "basic usage", function() { + expect( 3 ); + var defaultElement = $.ui[ widget ].prototype.defaultElement; $( defaultElement ).appendTo( "body" )[ widget ]().remove(); ok( true, "initialized on element" ); @@ -131,6 +140,7 @@ TestHelpers.commonWidgetTests = function( widget, settings ) { testWidgetOverrides( widget ); testBasicUsage( widget ); test( "version", function() { + expect( 1 ); ok( "version" in $.ui[ widget ].prototype, "version property exists" ); }); }; diff --git a/tests/unit/tooltip/tooltip_options.js b/tests/unit/tooltip/tooltip_options.js index a4ef9f472d..771da6da79 100644 --- a/tests/unit/tooltip/tooltip_options.js +++ b/tests/unit/tooltip/tooltip_options.js @@ -3,11 +3,13 @@ module( "tooltip: options" ); test( "content: default", function() { + expect( 1 ); var element = $( "#tooltipped1" ).tooltip().tooltip( "open" ); deepEqual( $( "#" + element.data( "ui-tooltip-id" ) ).text(), "anchortitle" ); }); test( "content: return string", function() { + expect( 1 ); var element = $( "#tooltipped1" ).tooltip({ content: function() { return "customstring"; @@ -17,6 +19,7 @@ test( "content: return string", function() { }); test( "content: return jQuery", function() { + expect( 1 ); var element = $( "#tooltipped1" ).tooltip({ content: function() { return $( "
" ).html( "customstring" ); diff --git a/tests/unit/widget/widget_core.js b/tests/unit/widget/widget_core.js index 07e847926d..0296b9e4fa 100644 --- a/tests/unit/widget/widget_core.js +++ b/tests/unit/widget/widget_core.js @@ -11,6 +11,7 @@ module( "widget factory", { TestHelpers.testJshint( "widget" ); test( "widget creation", function() { + expect( 5 ); var myPrototype = { _create: function() {}, creationTest: function() {} @@ -78,6 +79,7 @@ test( "element normalization", function() { }); test( "custom selector expression", function() { + expect( 1 ); var elem = $( "
" ).appendTo( "#qunit-fixture" ); $.widget( "ui.testWidget", {} ); elem.testWidget(); @@ -300,6 +302,7 @@ test( "._getCreateEventData()", function() { }); test( "re-init", function() { + expect( 3 ); var div = $( "
" ), actions = []; @@ -329,6 +332,7 @@ test( "re-init", function() { }); test( "inheritance - options", function() { + expect( 4 ); // #5830 - Widget: Using inheritance overwrites the base classes options $.widget( "ui.testWidgetBase", { options: { @@ -441,6 +445,7 @@ test( "._superApply()", function() { }); test( ".option() - getter", function() { + expect( 6 ); $.widget( "ui.testWidget", { _create: function() {} }); @@ -472,6 +477,7 @@ test( ".option() - getter", function() { }); test( ".option() - deep option getter", function() { + expect( 5 ); $.widget( "ui.testWidget", {} ); var div = $( "
" ).testWidget({ foo: { @@ -490,6 +496,7 @@ test( ".option() - deep option getter", function() { }); test( ".option() - delegate to ._setOptions()", function() { + expect( 2 ); var div, calls = []; $.widget( "ui.testWidget", { @@ -514,6 +521,7 @@ test( ".option() - delegate to ._setOptions()", function() { }); test( ".option() - delegate to ._setOption()", function() { + expect( 2 ); var div, calls = []; $.widget( "ui.testWidget", { @@ -544,6 +552,7 @@ test( ".option() - delegate to ._setOption()", function() { }); test( ".option() - deep option setter", function() { + expect( 6 ); $.widget( "ui.testWidget", {} ); var div = $( "
" ).testWidget(); function deepOption( from, to, msg ) { @@ -592,6 +601,7 @@ test( ".disable()", function() { }); test( ".widget() - base", function() { + expect( 1 ); $.widget( "ui.testWidget", { _create: function() {} }); @@ -600,6 +610,7 @@ test( ".widget() - base", function() { }); test( ".widget() - overriden", function() { + expect( 1 ); var wrapper = $( "
" ); $.widget( "ui.testWidget", { _create: function() {}, @@ -845,6 +856,7 @@ test( "_off() - all events", function() { }); test( "._hoverable()", function() { + expect( 10 ); $.widget( "ui.testWidget", { _create: function() { this._hoverable( this.element.children() ); @@ -876,10 +888,11 @@ test( "._hoverable()", function() { }); test( "._focusable()", function() { + expect( 10 ); $.widget( "ui.testWidget", { _create: function() { - this._focusable( this.element.children() ); - } + this._focusable( this.element.children() ); + } }); var div = $( "#widget" ).testWidget().children(); @@ -959,6 +972,7 @@ test( "._trigger() - cancelled event", function() { }); test( "._trigger() - cancelled callback", function() { + expect( 1 ); $.widget( "ui.testWidget", { _create: function() {} }); From 25d5aa1fa1c92eebccbacba6f5149a33389c4d23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Thu, 28 Jun 2012 05:38:08 -0700 Subject: [PATCH 078/112] Menu tests: Split out markup structure and accessibility assertions. --- tests/unit/menu/menu_core.js | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/tests/unit/menu/menu_core.js b/tests/unit/menu/menu_core.js index ee737ceb11..5ee28c14aa 100644 --- a/tests/unit/menu/menu_core.js +++ b/tests/unit/menu/menu_core.js @@ -2,23 +2,29 @@ module( "menu: core" ); +test( "markup structure", function() { + expect( 6 ); + var element = $( "#menu1" ).menu(); + ok( element.hasClass( "ui-menu" ), "main element is .ui-menu" ); + element.children().each(function( index ) { + ok( $( this ).hasClass( "ui-menu-item" ), "child " + index + " is .ui-menu-item" ); + }); +}); + test( "accessibility", function () { - expect( 5 ); - var item, - element = $( "#menu1" ).menu(), - item0 = $( "li:eq(0) a" ); + expect( 4 ); + var element = $( "#menu1" ).menu(); - ok( element.hasClass( "ui-menu ui-widget ui-widget-content ui-corner-all" ), "menu class"); equal( element.attr( "role" ), "menu", "main role" ); - ok( !element.attr( "aria-activedescendant" ), "aria attribute not yet active" ); + ok( !element.attr( "aria-activedescendant" ), "aria-activedescendant not set" ); - item = element.find( "li:first" ).find( "a" ).attr( "id", "xid" ).end(); - element.menu( "focus", $.Event(), item ); - equal( element.attr( "aria-activedescendant" ), "xid", "aria attribute, id from DOM" ); + element.menu( "focus", $.Event(), element.children().eq( -2 ) ); + equal( element.attr( "aria-activedescendant" ), "testID1", "aria-activedescendant from existing id" ); - item = element.find( "li:last" ); - element.menu( "focus", $.Event(), item ); - ok( /^ui-id-\d+$/.test( element.attr( "aria-activedescendant" ) ), "aria attribute, generated id"); + element.menu( "focus", $.Event(), element.children().eq( 0 ) ); + ok( /^ui-id-\d+$/.test( element.attr( "aria-activedescendant" ) ), "aria-activedescendant from generated id" ); + + // Item roles are tested in the role option tests }); })( jQuery ); From 7ce30694fde16073cdea071237c2474fdba22abb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Thu, 28 Jun 2012 05:41:39 -0700 Subject: [PATCH 079/112] Updated AUTHORS.txt. --- AUTHORS.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/AUTHORS.txt b/AUTHORS.txt index d7cb18d167..1e9c72f677 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -187,3 +187,10 @@ Jason Moon Martin Frost Eneko Illarramendi EungJun Yi +Courtland Allen +Viktar Varvanovich +Danny Trunk +Pavel Stetina +Mike Stay +Steven Roussey +Mike Hollis From 730446edcaae94549e4a33cd7b791e22db278763 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Thu, 28 Jun 2012 05:45:25 -0700 Subject: [PATCH 080/112] Effects: Update jquery-color. --- ui/.jshintrc | 1 - ui/jquery.ui.effect.js | 26 +++++++++++--------------- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/ui/.jshintrc b/ui/.jshintrc index eaa9f4b0ba..415d69e905 100644 --- a/ui/.jshintrc +++ b/ui/.jshintrc @@ -1,5 +1,4 @@ { - "boss": true, "browser": true, "curly": true, "eqnull": true, diff --git a/ui/jquery.ui.effect.js b/ui/jquery.ui.effect.js index 366c2d1903..b4e0787dad 100644 --- a/ui/jquery.ui.effect.js +++ b/ui/jquery.ui.effect.js @@ -21,7 +21,7 @@ $.effects = { * jQuery Color Animations * http://jquery.org/ * - * Copyright 2011 John Resig + * Copyright 2012 John Resig * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license */ @@ -149,7 +149,6 @@ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightCo floor: true } }, - rgbaspace = spaces.rgba.props, support = color.support = {}, // colors = jQuery.Color.names @@ -158,11 +157,11 @@ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightCo // local aliases of functions called often each = jQuery.each; -spaces.hsla.props.alpha = rgbaspace.alpha; +spaces.hsla.props.alpha = spaces.rgba.props.alpha; function clamp( value, prop, alwaysAllowEmpty ) { var type = propTypes[ prop.type ] || {}, - allowEmpty = prop.empty || alwaysAllowEmpty; + allowEmpty = alwaysAllowEmpty || prop.empty; if ( allowEmpty && value == null ) { return null; @@ -179,7 +178,7 @@ function clamp( value, prop, alwaysAllowEmpty ) { return prop.def; } if ( type.mod ) { - value = value % type.mod; + value %= type.mod; // -10 -> 350 return value < 0 ? type.mod + value : value; } @@ -226,21 +225,18 @@ function stringParse( string ) { return inst; } - // named colors / default - filter back through parse function - if ( string = colors[ string ] ) { - return string; - } + // named colors + return colors[ string ]; } -color.fn = color.prototype = { - constructor: color, +color.fn = jQuery.extend( color.prototype, { parse: function( red, green, blue, alpha ) { if ( red === undefined ) { this._rgba = [ null, null, null, null ]; return this; } - if ( red instanceof jQuery || red.nodeType ) { - red = red instanceof jQuery ? red.css( green ) : jQuery( red ).css( green ); + if ( red.jquery || red.nodeType ) { + red = jQuery( red ).css( green ); green = undefined; } @@ -260,7 +256,7 @@ color.fn = color.prototype = { } if ( type === "array" ) { - each( rgbaspace, function( key, prop ) { + each( spaces.rgba.props, function( key, prop ) { rgba[ prop.idx ] = clamp( red[ prop.idx ], prop ); }); return this; @@ -428,7 +424,7 @@ color.fn = color.prototype = { toString: function() { return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString(); } -}; +}); color.fn.parse.prototype = color.fn; // hsla conversions adapted from: From 6d22ee597b0d0081d38b06cb1b91a201fa24f5fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Thu, 28 Jun 2012 06:18:52 -0700 Subject: [PATCH 081/112] Tagging version 1.9.0-beta.1. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3c371bf76c..bfa258b6f4 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "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", + "version": "1.9.0-beta.1", "homepage": "https://github.com/jquery/jquery-ui", "author": { "name": "AUTHORS.txt" From c942575ed73657639af800e18b9be9f6792369c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Thu, 28 Jun 2012 06:19:56 -0700 Subject: [PATCH 082/112] Setting version back to 1.9.0pre. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bfa258b6f4..3c371bf76c 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "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.0-beta.1", + "version": "1.9.0pre", "homepage": "https://github.com/jquery/jquery-ui", "author": { "name": "AUTHORS.txt" From a4534bb993887236849adff9da2f43a51fc3df1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Wed, 4 Jul 2012 09:08:08 -0400 Subject: [PATCH 083/112] Update copyright to jQuery Foundation. --- MIT-LICENSE.txt | 3 ++- package.json | 2 +- tests/jquery.simulate.js | 3 ++- themes/base/jquery.ui.accordion.css | 3 ++- themes/base/jquery.ui.all.css | 3 ++- themes/base/jquery.ui.autocomplete.css | 3 ++- themes/base/jquery.ui.base.css | 3 ++- themes/base/jquery.ui.button.css | 3 ++- themes/base/jquery.ui.core.css | 3 ++- themes/base/jquery.ui.datepicker.css | 3 ++- themes/base/jquery.ui.dialog.css | 3 ++- themes/base/jquery.ui.menu.css | 3 ++- themes/base/jquery.ui.progressbar.css | 3 ++- themes/base/jquery.ui.resizable.css | 3 ++- themes/base/jquery.ui.selectable.css | 3 ++- themes/base/jquery.ui.slider.css | 3 ++- themes/base/jquery.ui.spinner.css | 3 ++- themes/base/jquery.ui.tabs.css | 3 ++- themes/base/jquery.ui.theme.css | 3 ++- themes/base/jquery.ui.tooltip.css | 3 ++- ui/jquery.ui.accordion.js | 3 ++- ui/jquery.ui.autocomplete.js | 3 ++- ui/jquery.ui.button.js | 3 ++- ui/jquery.ui.core.js | 5 +++-- ui/jquery.ui.datepicker.js | 3 ++- ui/jquery.ui.dialog.js | 3 ++- ui/jquery.ui.draggable.js | 3 ++- ui/jquery.ui.droppable.js | 3 ++- ui/jquery.ui.effect-blind.js | 3 ++- ui/jquery.ui.effect-bounce.js | 3 ++- ui/jquery.ui.effect-clip.js | 3 ++- ui/jquery.ui.effect-drop.js | 3 ++- ui/jquery.ui.effect-explode.js | 3 ++- ui/jquery.ui.effect-fade.js | 3 ++- ui/jquery.ui.effect-fold.js | 3 ++- ui/jquery.ui.effect-highlight.js | 3 ++- ui/jquery.ui.effect-pulsate.js | 3 ++- ui/jquery.ui.effect-scale.js | 3 ++- ui/jquery.ui.effect-shake.js | 3 ++- ui/jquery.ui.effect-slide.js | 3 ++- ui/jquery.ui.effect-transfer.js | 3 ++- ui/jquery.ui.effect.js | 3 ++- ui/jquery.ui.menu.js | 3 ++- ui/jquery.ui.mouse.js | 3 ++- ui/jquery.ui.position.js | 3 ++- ui/jquery.ui.progressbar.js | 3 ++- ui/jquery.ui.resizable.js | 3 ++- ui/jquery.ui.selectable.js | 3 ++- ui/jquery.ui.slider.js | 3 ++- ui/jquery.ui.sortable.js | 3 ++- ui/jquery.ui.spinner.js | 3 ++- ui/jquery.ui.tabs.js | 3 ++- ui/jquery.ui.tooltip.js | 3 ++- ui/jquery.ui.widget.js | 3 ++- 54 files changed, 108 insertions(+), 55 deletions(-) diff --git a/MIT-LICENSE.txt b/MIT-LICENSE.txt index 29652242a9..741585591f 100644 --- a/MIT-LICENSE.txt +++ b/MIT-LICENSE.txt @@ -1,4 +1,5 @@ -Copyright (c) 2012 Paul Bakaus, http://jqueryui.com/ +Copyright 2012 jQuery Foundation and other contributors, +http://jqueryui.com/ This software consists of voluntary contributions made by many individuals (AUTHORS.txt, http://jqueryui.com/about) For exact diff --git a/package.json b/package.json index 3c371bf76c..0254992285 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "version": "1.9.0pre", "homepage": "https://github.com/jquery/jquery-ui", "author": { - "name": "AUTHORS.txt" + "name": "jQuery Foundation and other contributors" }, "repository": { "type": "git", diff --git a/tests/jquery.simulate.js b/tests/jquery.simulate.js index 2dae34c285..874d274cc2 100644 --- a/tests/jquery.simulate.js +++ b/tests/jquery.simulate.js @@ -1,7 +1,8 @@ /* * jquery.simulate - simulate browser mouse and keyboard events + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license */ diff --git a/themes/base/jquery.ui.accordion.css b/themes/base/jquery.ui.accordion.css index 32c1a72425..71319ac283 100644 --- a/themes/base/jquery.ui.accordion.css +++ b/themes/base/jquery.ui.accordion.css @@ -1,7 +1,8 @@ /*! * jQuery UI Accordion @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/themes/base/jquery.ui.all.css b/themes/base/jquery.ui.all.css index e2310973a1..958dac4bee 100644 --- a/themes/base/jquery.ui.all.css +++ b/themes/base/jquery.ui.all.css @@ -1,7 +1,8 @@ /*! * jQuery UI CSS Framework @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/themes/base/jquery.ui.autocomplete.css b/themes/base/jquery.ui.autocomplete.css index 5e331b63d2..e1b127470b 100644 --- a/themes/base/jquery.ui.autocomplete.css +++ b/themes/base/jquery.ui.autocomplete.css @@ -1,7 +1,8 @@ /*! * jQuery UI Autocomplete @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/themes/base/jquery.ui.base.css b/themes/base/jquery.ui.base.css index f52f00f28e..36a5dd2745 100644 --- a/themes/base/jquery.ui.base.css +++ b/themes/base/jquery.ui.base.css @@ -1,7 +1,8 @@ /*! * jQuery UI CSS Framework @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/themes/base/jquery.ui.button.css b/themes/base/jquery.ui.button.css index 0f3eab474c..f5453fb9f3 100644 --- a/themes/base/jquery.ui.button.css +++ b/themes/base/jquery.ui.button.css @@ -1,7 +1,8 @@ /*! * jQuery UI Button @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/themes/base/jquery.ui.core.css b/themes/base/jquery.ui.core.css index dc27c564a1..33a6c96be2 100644 --- a/themes/base/jquery.ui.core.css +++ b/themes/base/jquery.ui.core.css @@ -1,7 +1,8 @@ /*! * jQuery UI CSS Framework @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/themes/base/jquery.ui.datepicker.css b/themes/base/jquery.ui.datepicker.css index 60ed0c82d3..0f4e715625 100644 --- a/themes/base/jquery.ui.datepicker.css +++ b/themes/base/jquery.ui.datepicker.css @@ -1,7 +1,8 @@ /*! * jQuery UI Datepicker @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/themes/base/jquery.ui.dialog.css b/themes/base/jquery.ui.dialog.css index 0ee0d4dd51..22523c82cd 100644 --- a/themes/base/jquery.ui.dialog.css +++ b/themes/base/jquery.ui.dialog.css @@ -1,7 +1,8 @@ /*! * jQuery UI Dialog @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/themes/base/jquery.ui.menu.css b/themes/base/jquery.ui.menu.css index b96d439ab6..85c3873874 100644 --- a/themes/base/jquery.ui.menu.css +++ b/themes/base/jquery.ui.menu.css @@ -1,7 +1,8 @@ /*! * jQuery UI Menu @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/themes/base/jquery.ui.progressbar.css b/themes/base/jquery.ui.progressbar.css index d198bb4a32..877666589b 100644 --- a/themes/base/jquery.ui.progressbar.css +++ b/themes/base/jquery.ui.progressbar.css @@ -1,7 +1,8 @@ /*! * jQuery UI Progressbar @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/themes/base/jquery.ui.resizable.css b/themes/base/jquery.ui.resizable.css index 0bb688d5b5..bca140eda4 100644 --- a/themes/base/jquery.ui.resizable.css +++ b/themes/base/jquery.ui.resizable.css @@ -1,7 +1,8 @@ /*! * jQuery UI Resizable @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/themes/base/jquery.ui.selectable.css b/themes/base/jquery.ui.selectable.css index 2aa7319aaa..0fa8942aad 100644 --- a/themes/base/jquery.ui.selectable.css +++ b/themes/base/jquery.ui.selectable.css @@ -1,7 +1,8 @@ /*! * jQuery UI Selectable @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/themes/base/jquery.ui.slider.css b/themes/base/jquery.ui.slider.css index 94d883a44f..39d15b0343 100644 --- a/themes/base/jquery.ui.slider.css +++ b/themes/base/jquery.ui.slider.css @@ -1,7 +1,8 @@ /*! * jQuery UI Slider @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/themes/base/jquery.ui.spinner.css b/themes/base/jquery.ui.spinner.css index 50d8e19b7c..41ffe539cc 100644 --- a/themes/base/jquery.ui.spinner.css +++ b/themes/base/jquery.ui.spinner.css @@ -1,7 +1,8 @@ /*! * jQuery UI Spinner @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/themes/base/jquery.ui.tabs.css b/themes/base/jquery.ui.tabs.css index 2f12da74ab..a2efae8b01 100644 --- a/themes/base/jquery.ui.tabs.css +++ b/themes/base/jquery.ui.tabs.css @@ -1,7 +1,8 @@ /*! * jQuery UI Tabs @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/themes/base/jquery.ui.theme.css b/themes/base/jquery.ui.theme.css index 3a9cfae822..86da8a2950 100644 --- a/themes/base/jquery.ui.theme.css +++ b/themes/base/jquery.ui.theme.css @@ -1,7 +1,8 @@ /*! * jQuery UI CSS Framework @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/themes/base/jquery.ui.tooltip.css b/themes/base/jquery.ui.tooltip.css index d144b0a7fe..ed29c137a2 100644 --- a/themes/base/jquery.ui.tooltip.css +++ b/themes/base/jquery.ui.tooltip.css @@ -1,7 +1,8 @@ /*! * jQuery UI Tooltip @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license */ diff --git a/ui/jquery.ui.accordion.js b/ui/jquery.ui.accordion.js index e8a10b7465..7d98886e74 100644 --- a/ui/jquery.ui.accordion.js +++ b/ui/jquery.ui.accordion.js @@ -1,7 +1,8 @@ /*! * jQuery UI Accordion @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.autocomplete.js b/ui/jquery.ui.autocomplete.js index b8d86644c2..25d909f8d9 100644 --- a/ui/jquery.ui.autocomplete.js +++ b/ui/jquery.ui.autocomplete.js @@ -1,7 +1,8 @@ /*! * jQuery UI Autocomplete @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.button.js b/ui/jquery.ui.button.js index 89f6626f8f..1aa44abdd5 100644 --- a/ui/jquery.ui.button.js +++ b/ui/jquery.ui.button.js @@ -1,7 +1,8 @@ /*! * jQuery UI Button @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.core.js b/ui/jquery.ui.core.js index a511de24bf..ad0ab25d71 100644 --- a/ui/jquery.ui.core.js +++ b/ui/jquery.ui.core.js @@ -1,7 +1,8 @@ /*! - * jQuery UI @VERSION + * jQuery UI Core @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.datepicker.js b/ui/jquery.ui.datepicker.js index 6f3e2f34f5..06db79ba79 100644 --- a/ui/jquery.ui.datepicker.js +++ b/ui/jquery.ui.datepicker.js @@ -1,7 +1,8 @@ /*! * jQuery UI Datepicker @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.dialog.js b/ui/jquery.ui.dialog.js index a22eef8060..818363d0be 100644 --- a/ui/jquery.ui.dialog.js +++ b/ui/jquery.ui.dialog.js @@ -1,7 +1,8 @@ /*! * jQuery UI Dialog @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.draggable.js b/ui/jquery.ui.draggable.js index a9b8cadbb7..2f05ad6a40 100644 --- a/ui/jquery.ui.draggable.js +++ b/ui/jquery.ui.draggable.js @@ -1,7 +1,8 @@ /*! * jQuery UI Draggable @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.droppable.js b/ui/jquery.ui.droppable.js index e2ad221e15..17a56787a4 100644 --- a/ui/jquery.ui.droppable.js +++ b/ui/jquery.ui.droppable.js @@ -1,7 +1,8 @@ /*! * jQuery UI Droppable @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.effect-blind.js b/ui/jquery.ui.effect-blind.js index 4f25f8cd26..7cc353525a 100644 --- a/ui/jquery.ui.effect-blind.js +++ b/ui/jquery.ui.effect-blind.js @@ -1,7 +1,8 @@ /*! * jQuery UI Effects Blind @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.effect-bounce.js b/ui/jquery.ui.effect-bounce.js index 1e7801331f..0a93bda08f 100644 --- a/ui/jquery.ui.effect-bounce.js +++ b/ui/jquery.ui.effect-bounce.js @@ -1,7 +1,8 @@ /*! * jQuery UI Effects Bounce @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.effect-clip.js b/ui/jquery.ui.effect-clip.js index 0b2d7e24ab..6539acf240 100644 --- a/ui/jquery.ui.effect-clip.js +++ b/ui/jquery.ui.effect-clip.js @@ -1,7 +1,8 @@ /*! * jQuery UI Effects Clip @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.effect-drop.js b/ui/jquery.ui.effect-drop.js index 8eda32d8e5..3246c09b0c 100644 --- a/ui/jquery.ui.effect-drop.js +++ b/ui/jquery.ui.effect-drop.js @@ -1,7 +1,8 @@ /*! * jQuery UI Effects Drop @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.effect-explode.js b/ui/jquery.ui.effect-explode.js index a7447da739..1048b0a42c 100644 --- a/ui/jquery.ui.effect-explode.js +++ b/ui/jquery.ui.effect-explode.js @@ -1,7 +1,8 @@ /*! * jQuery UI Effects Explode @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.effect-fade.js b/ui/jquery.ui.effect-fade.js index 92d9ca0a47..ee031fcd8b 100644 --- a/ui/jquery.ui.effect-fade.js +++ b/ui/jquery.ui.effect-fade.js @@ -1,7 +1,8 @@ /*! * jQuery UI Effects Fade @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.effect-fold.js b/ui/jquery.ui.effect-fold.js index 47b7a83958..7619285c2e 100644 --- a/ui/jquery.ui.effect-fold.js +++ b/ui/jquery.ui.effect-fold.js @@ -1,7 +1,8 @@ /*! * jQuery UI Effects Fold @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.effect-highlight.js b/ui/jquery.ui.effect-highlight.js index 333e37d72c..f6868d1362 100644 --- a/ui/jquery.ui.effect-highlight.js +++ b/ui/jquery.ui.effect-highlight.js @@ -1,7 +1,8 @@ /*! * jQuery UI Effects Highlight @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.effect-pulsate.js b/ui/jquery.ui.effect-pulsate.js index ce9faf64f5..543f6310d7 100644 --- a/ui/jquery.ui.effect-pulsate.js +++ b/ui/jquery.ui.effect-pulsate.js @@ -1,7 +1,8 @@ /*! * jQuery UI Effects Pulsate @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.effect-scale.js b/ui/jquery.ui.effect-scale.js index 9352ac0277..5e1dc85402 100644 --- a/ui/jquery.ui.effect-scale.js +++ b/ui/jquery.ui.effect-scale.js @@ -1,7 +1,8 @@ /*! * jQuery UI Effects Scale @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.effect-shake.js b/ui/jquery.ui.effect-shake.js index e0fb17d347..51d8e11297 100644 --- a/ui/jquery.ui.effect-shake.js +++ b/ui/jquery.ui.effect-shake.js @@ -1,7 +1,8 @@ /*! * jQuery UI Effects Shake @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.effect-slide.js b/ui/jquery.ui.effect-slide.js index 0de9bed94f..d61047b8b5 100644 --- a/ui/jquery.ui.effect-slide.js +++ b/ui/jquery.ui.effect-slide.js @@ -1,7 +1,8 @@ /*! * jQuery UI Effects Slide @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.effect-transfer.js b/ui/jquery.ui.effect-transfer.js index fefa551b4b..7d6c109330 100644 --- a/ui/jquery.ui.effect-transfer.js +++ b/ui/jquery.ui.effect-transfer.js @@ -1,7 +1,8 @@ /*! * jQuery UI Effects Transfer @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.effect.js b/ui/jquery.ui.effect.js index b4e0787dad..da3c70b7c3 100644 --- a/ui/jquery.ui.effect.js +++ b/ui/jquery.ui.effect.js @@ -1,7 +1,8 @@ /*! * jQuery UI Effects @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.menu.js b/ui/jquery.ui.menu.js index 5d97343d72..2a4c0b5405 100644 --- a/ui/jquery.ui.menu.js +++ b/ui/jquery.ui.menu.js @@ -1,7 +1,8 @@ /*! * jQuery UI Menu @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.mouse.js b/ui/jquery.ui.mouse.js index e2e06897c6..6f95765f21 100644 --- a/ui/jquery.ui.mouse.js +++ b/ui/jquery.ui.mouse.js @@ -1,7 +1,8 @@ /*! * jQuery UI Mouse @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.position.js b/ui/jquery.ui.position.js index bd7bfb015c..2802b2ce0d 100644 --- a/ui/jquery.ui.position.js +++ b/ui/jquery.ui.position.js @@ -1,7 +1,8 @@ /*! * jQuery UI Position @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.progressbar.js b/ui/jquery.ui.progressbar.js index 68cccc5540..74a2d69236 100644 --- a/ui/jquery.ui.progressbar.js +++ b/ui/jquery.ui.progressbar.js @@ -1,7 +1,8 @@ /*! * jQuery UI Progressbar @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.resizable.js b/ui/jquery.ui.resizable.js index abe540c599..be174dd7ee 100644 --- a/ui/jquery.ui.resizable.js +++ b/ui/jquery.ui.resizable.js @@ -1,7 +1,8 @@ /*! * jQuery UI Resizable @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.selectable.js b/ui/jquery.ui.selectable.js index 2db9a88861..1da7fffa3b 100644 --- a/ui/jquery.ui.selectable.js +++ b/ui/jquery.ui.selectable.js @@ -1,7 +1,8 @@ /*! * jQuery UI Selectable @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.slider.js b/ui/jquery.ui.slider.js index e44d20f7c7..adceb356c6 100644 --- a/ui/jquery.ui.slider.js +++ b/ui/jquery.ui.slider.js @@ -1,7 +1,8 @@ /*! * jQuery UI Slider @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.sortable.js b/ui/jquery.ui.sortable.js index c8ea737021..7e58752001 100644 --- a/ui/jquery.ui.sortable.js +++ b/ui/jquery.ui.sortable.js @@ -1,7 +1,8 @@ /*! * jQuery UI Sortable @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.spinner.js b/ui/jquery.ui.spinner.js index d6ebc6d87d..6acb3693e2 100644 --- a/ui/jquery.ui.spinner.js +++ b/ui/jquery.ui.spinner.js @@ -1,7 +1,8 @@ /*! * jQuery UI Spinner @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.tabs.js b/ui/jquery.ui.tabs.js index 980ecfe897..588b8cdb24 100644 --- a/ui/jquery.ui.tabs.js +++ b/ui/jquery.ui.tabs.js @@ -1,7 +1,8 @@ /*! * jQuery UI Tabs @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.tooltip.js b/ui/jquery.ui.tooltip.js index 5ef5051afe..8bfe78c054 100644 --- a/ui/jquery.ui.tooltip.js +++ b/ui/jquery.ui.tooltip.js @@ -1,7 +1,8 @@ /*! * jQuery UI Tooltip @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * diff --git a/ui/jquery.ui.widget.js b/ui/jquery.ui.widget.js index dfad192203..628b63bb0b 100644 --- a/ui/jquery.ui.widget.js +++ b/ui/jquery.ui.widget.js @@ -1,7 +1,8 @@ /*! * jQuery UI Widget @VERSION + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * From 02676a8810cfe4bab2960241ea781b023f740001 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Wed, 4 Jul 2012 09:28:39 -0400 Subject: [PATCH 084/112] Update package.json to contain more information. --- package.json | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 0254992285..ebff55a86c 100644 --- a/package.json +++ b/package.json @@ -3,17 +3,43 @@ "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": "https://github.com/jquery/jquery-ui", + "homepage": "http://jqueryui.com", "author": { - "name": "jQuery Foundation and other contributors" + "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": { - "url": "http://bugs.jqueryui.com/" - }, + "bugs": "http://bugs.jqueryui.com/", "licenses": [ { "type": "MIT", From d46c27ab57d565017e7f735ab05a14972d1f3257 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Thu, 5 Jul 2012 10:14:52 -0400 Subject: [PATCH 085/112] Update AUTHORS.txt. --- AUTHORS.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AUTHORS.txt b/AUTHORS.txt index 1e9c72f677..6f97e4e95d 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -42,7 +42,7 @@ Adam Sontag Carl Fürstenberg Kevin Dalman Alberto Fernández Capel -Jacek Jędrzejewski +Jacek Jędrzejewski (http://jacek.jedrzejewski.name) Ting Kuei Samuel Cormier-Iijima Jon Palmer From be58dcf708bcb8ba087d0979515afd0673554ff8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Thu, 5 Jul 2012 14:17:56 -0400 Subject: [PATCH 086/112] Menu: Added missing position dependency to header comment. --- ui/jquery.ui.menu.js | 1 + 1 file changed, 1 insertion(+) diff --git a/ui/jquery.ui.menu.js b/ui/jquery.ui.menu.js index 2a4c0b5405..7586761997 100644 --- a/ui/jquery.ui.menu.js +++ b/ui/jquery.ui.menu.js @@ -11,6 +11,7 @@ * Depends: * jquery.ui.core.js * jquery.ui.widget.js + * jquery.ui.position.js */ (function( $, undefined ) { From 7716c3d46116722b7d6b4cc5470956f203376b7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Thu, 5 Jul 2012 14:34:15 -0400 Subject: [PATCH 087/112] Grunt: Use grunt-git-authors plugin to generate authors list. --- build/tasks/build.js | 24 ------------------------ grunt.js | 1 + package.json | 1 + 3 files changed, 2 insertions(+), 24 deletions(-) diff --git a/build/tasks/build.js b/build/tasks/build.js index 51c2fefdb6..06a4b98a27 100644 --- a/build/tasks/build.js +++ b/build/tasks/build.js @@ -185,28 +185,4 @@ grunt.registerTask( "clean", function() { require( "rimraf" ).sync( "dist" ); }); -grunt.registerTask( "authors", function() { - var done = this.async(); - - grunt.utils.spawn({ - cmd: "git", - args: [ "log", "--pretty=%an <%ae>" ] - }, function( err, result ) { - if ( err ) { - grunt.log.error( err ); - return done( false ); - } - - var authors, - tracked = {}; - authors = result.split( "\n" ).reverse().filter(function( author ) { - var first = !tracked[ author ]; - tracked[ author ] = true; - return first; - }).join( "\n" ); - grunt.log.writeln( authors ); - done(); - }); -}); - }; \ No newline at end of file diff --git a/grunt.js b/grunt.js index 8ec70c6474..a861be2e0c 100644 --- a/grunt.js +++ b/grunt.js @@ -85,6 +85,7 @@ grunt.loadNpmTasks( "grunt-css" ); grunt.loadNpmTasks( "grunt-html" ); grunt.loadNpmTasks( "grunt-compare-size" ); grunt.loadNpmTasks( "grunt-junit" ); +grunt.loadNpmTasks( "grunt-git-authors" ); // local testswarm and build tasks grunt.loadTasks( "build/tasks" ); diff --git a/package.json b/package.json index ebff55a86c..5053d23d54 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "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" From c2a488903f8feed93585d5cecede6a675e458b1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Thu, 5 Jul 2012 14:34:56 -0400 Subject: [PATCH 088/112] Allow newer 0.3.x releases of grunt. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5053d23d54..d48520264d 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ ], "dependencies": {}, "devDependencies": { - "grunt": "0.3.9", + "grunt": "~0.3.9", "grunt-css": "0.2.0", "grunt-compare-size": "0.1.4", "grunt-html": "0.1.1", From ab260f70626b89c993467f90f260a461a25d92b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Thu, 5 Jul 2012 16:16:49 -0400 Subject: [PATCH 089/112] Update AUTHORS.txt. --- AUTHORS.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AUTHORS.txt b/AUTHORS.txt index 6f97e4e95d..c2947b2b74 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -170,7 +170,7 @@ Ian Simpson Lev Kitsis TJ VanToll Justin Domnitz -Douglas Cerna +Douglas Cerna Bert ter Heide Jasvir Nagra Petr Hromadko From c6567ba8800c2ddf0b2b2a18682f670ba77a3a2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Thu, 5 Jul 2012 20:49:00 -0400 Subject: [PATCH 090/112] Tabs tests: Add tests for accessibility of ajax tabs. --- tests/unit/tabs/tabs_core.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/tests/unit/tabs/tabs_core.js b/tests/unit/tabs/tabs_core.js index fd9cc7d63c..f1a2d72c1a 100644 --- a/tests/unit/tabs/tabs_core.js +++ b/tests/unit/tabs/tabs_core.js @@ -118,8 +118,24 @@ test( "accessibility", function() { equal( tabs.eq( 2 ).attr( "aria-disabled" ), "true", "disabled tab has aria-disabled=true" ); equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "inactive panel has aria-expanded=false" ); equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "inactive panel has aria-hidden=true" ); +}); - // TODO: aria-live and aria-busy tests for ajax tabs +asyncTest( "accessibility - ajax", function() { + expect( 4 ); + var element = $( "#tabs2" ).tabs(), + tab = element.find( ".ui-tabs-nav li" ).eq( 3 ), + panel = $( "#custom-id" ); + + equal( panel.attr( "aria-live" ), "polite", "remote panel has aria-live" ); + equal( panel.attr( "aria-busy" ), null, "does not have aria-busy on init" ); + element.tabs( "option", "active", 3 ); + equal( panel.attr( "aria-busy" ), "true", "panel has aria-busy during load" ); + element.one( "tabsload", function() { + setTimeout(function() { + equal( panel.attr( "aria-busy" ), null, "panel does not have aria-busy after load" ); + start(); + }, 1 ); + }); }); asyncTest( "keyboard support - LEFT, RIGHT, UP, DOWN, HOME, END, SPACE, ENTER", function() { From a6e6a0504f7ebdee9726cfb31091e6e8b7f62a1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Thu, 5 Jul 2012 21:07:49 -0400 Subject: [PATCH 091/112] Tabs tests: Added tests for show and hide options. --- tests/unit/tabs/tabs_options.js | 50 ++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/tests/unit/tabs/tabs_options.js b/tests/unit/tabs/tabs_options.js index eed5b99d8b..5a90ff8952 100644 --- a/tests/unit/tabs/tabs_options.js +++ b/tests/unit/tabs/tabs_options.js @@ -280,6 +280,54 @@ test( "{ heightStyle: 'fill' } with multiple siblings", function() { equalHeight( element, 335 ); }); -// TODO: add animation tests +test( "hide and show: false", function() { + expect( 3 ); + var element = $( "#tabs1" ).tabs({ + show: false, + hide: false + }), + widget = element.data( "tabs" ), + panels = element.find( ".ui-tabs-panel" ); + widget._show = function() { + ok( false, "_show() called" ); + }; + widget._hide = function() { + ok( false, "_hide() called" ); + }; + + ok( panels.eq( 0 ).is( ":visible" ), "first panel visible" ); + element.tabs( "option", "active", 1 ); + ok( panels.eq( 0 ).is( ":hidden" ), "first panel hidden" ); + ok( panels.eq( 1 ).is( ":visible" ), "second panel visible" ); +}); + +asyncTest( "hide and show - animation", function() { + expect( 5 ); + var element = $( "#tabs1" ).tabs({ + show: "drop", + hide: 2000 + }), + widget = element.data( "tabs" ), + panels = element.find( ".ui-tabs-panel" ); + widget._show = function( element, options, callback ) { + strictEqual( element[ 0 ], panels[ 1 ], "correct element in _show()" ); + equal( options, "drop", "correct options in _show()" ); + setTimeout(function() { + callback(); + }, 1 ); + }; + widget._hide = function( element, options, callback ) { + strictEqual( element[ 0 ], panels[ 0 ], "correct element in _hide()" ); + equal( options, 2000, "correct options in _hide()" ); + setTimeout(function() { + callback(); + start(); + }, 1 ); + }; + + ok( panels.eq( 0 ).is( ":visible" ), "first panel visible" ); + element.tabs( "option", "active", 1 ); +}); + }( jQuery ) ); From 5a952856a0013c44bde67f9fcfd7e47826d8cf15 Mon Sep 17 00:00:00 2001 From: Lee Rowlands Date: Thu, 5 Jul 2012 21:23:39 -0400 Subject: [PATCH 092/112] Dialog: Prevent tabbing out of modal dialog. Partial fix for #7862 - Dialog: modal accessibility. --- ui/jquery.ui.dialog.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/jquery.ui.dialog.js b/ui/jquery.ui.dialog.js index 818363d0be..85e4b3e2b3 100644 --- a/ui/jquery.ui.dialog.js +++ b/ui/jquery.ui.dialog.js @@ -316,7 +316,7 @@ $.widget("ui.dialog", { return; } - var tabbables = $( ":tabbable", this ), + var tabbables = $( ":tabbable", uiDialog ), first = tabbables.filter( ":first" ), last = tabbables.filter( ":last" ); From 2d643032c553ea2804946b4f0cdba4b7820e1bfc Mon Sep 17 00:00:00 2001 From: Timmy Willison Date: Sat, 7 Jul 2012 14:28:52 -0400 Subject: [PATCH 093/112] Core: Adjust data pseudo creation to use new Sizzle pseudo creation for pseudos with arguments. --- ui/jquery.ui.core.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/ui/jquery.ui.core.js b/ui/jquery.ui.core.js index ad0ab25d71..3e102f181e 100644 --- a/ui/jquery.ui.core.js +++ b/ui/jquery.ui.core.js @@ -216,9 +216,16 @@ function visible( element ) { } $.extend( $.expr[ ":" ], { - data: function( elem, i, match ) { - return !!$.data( elem, match[ 3 ] ); - }, + data: $.expr.createPseudo ? + $.expr.createPseudo(function( dataName ) { + return function( elem ) { + return !!$.data( elem, dataName ); + }; + }) : + // support: jQuery <1.8 + function( elem, i, match ) { + return !!$.data( elem, match[ 3 ] ); + }, focusable: function( element ) { return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) ); From 508598124117f3dd501c3e7bcd4dd08f6cfb0064 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Mon, 9 Jul 2012 11:46:24 -0400 Subject: [PATCH 094/112] Effects: Update jQuery Color. --- ui/jquery.ui.effect.js | 206 +++++++++++++++++------------------------ 1 file changed, 87 insertions(+), 119 deletions(-) diff --git a/ui/jquery.ui.effect.js b/ui/jquery.ui.effect.js index da3c70b7c3..93e85ebfd9 100644 --- a/ui/jquery.ui.effect.js +++ b/ui/jquery.ui.effect.js @@ -20,15 +20,15 @@ $.effects = { /*! * jQuery Color Animations - * http://jquery.org/ + * http://jquery.com/ * - * Copyright 2012 John Resig + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license */ (function( jQuery, undefined ) { -var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color outlineColor".split(" "), + var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor".split(" "), // plusequals test for += 100 -= 100 rplusequals = /^([\-+])=\s*(\d+\.?\d*)/, @@ -47,14 +47,15 @@ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightCo re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/, parse: function( execResult ) { return [ - 2.55 * execResult[1], - 2.55 * execResult[2], - 2.55 * execResult[3], + execResult[ 1 ] * 2.55, + execResult[ 2 ] * 2.55, + execResult[ 3 ] * 2.55, execResult[ 4 ] ]; } }, { - re: /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/, + // this regex ignores A-F because it's compared against an already lowercased string + re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/, parse: function( execResult ) { return [ parseInt( execResult[ 1 ], 16 ), @@ -63,7 +64,8 @@ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightCo ]; } }, { - re: /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/, + // this regex ignores A-F because it's compared against an already lowercased string + re: /#([a-f0-9])([a-f0-9])([a-f0-9])/, parse: function( execResult ) { return [ parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ), @@ -76,10 +78,10 @@ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightCo space: "hsla", parse: function( execResult ) { return [ - execResult[1], - execResult[2] / 100, - execResult[3] / 100, - execResult[4] + execResult[ 1 ], + execResult[ 2 ] / 100, + execResult[ 3 ] / 100, + execResult[ 4 ] ]; } }], @@ -90,47 +92,35 @@ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightCo }, spaces = { rgba: { - cache: "_rgba", props: { red: { idx: 0, - type: "byte", - empty: true + type: "byte" }, green: { idx: 1, - type: "byte", - empty: true + type: "byte" }, blue: { idx: 2, - type: "byte", - empty: true - }, - alpha: { - idx: 3, - type: "percent", - def: 1 + type: "byte" } } }, + hsla: { - cache: "_hsla", props: { hue: { idx: 0, - type: "degrees", - empty: true + type: "degrees" }, saturation: { idx: 1, - type: "percent", - empty: true + type: "percent" }, lightness: { idx: 2, - type: "percent", - empty: true + type: "percent" } } } @@ -138,11 +128,9 @@ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightCo propTypes = { "byte": { floor: true, - min: 0, max: 255 }, "percent": { - min: 0, max: 1 }, "degrees": { @@ -152,40 +140,54 @@ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightCo }, support = color.support = {}, + // element for support tests + supportElem = jQuery( "

" )[ 0 ], + // colors = jQuery.Color.names colors, // local aliases of functions called often each = jQuery.each; -spaces.hsla.props.alpha = spaces.rgba.props.alpha; +// determine rgba support immediately +supportElem.style.cssText = "background-color:rgba(1,1,1,.5)"; +support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1; -function clamp( value, prop, alwaysAllowEmpty ) { - var type = propTypes[ prop.type ] || {}, - allowEmpty = alwaysAllowEmpty || prop.empty; +// define cache name and alpha properties +// for rgba and hsla spaces +each( spaces, function( spaceName, space ) { + space.cache = "_" + spaceName; + space.props.alpha = { + idx: 3, + type: "percent", + def: 1 + }; +}); - if ( allowEmpty && value == null ) { - return null; +function clamp( value, prop, allowEmpty ) { + var type = propTypes[ prop.type ] || {}; + + if ( value == null ) { + return (allowEmpty || !prop.def) ? null : prop.def; } - if ( prop.def && value == null ) { - return prop.def; - } - if ( type.floor ) { - value = ~~value; - } else { - value = parseFloat( value ); - } - if ( value == null || isNaN( value ) ) { + + // ~~ is an short way of doing floor for positive numbers + value = type.floor ? ~~value : parseFloat( value ); + + // IE will pass in empty strings as value for alpha, + // which will hit this case + if ( isNaN( value ) ) { return prop.def; } + if ( type.mod ) { - value %= type.mod; - // -10 -> 350 - return value < 0 ? type.mod + value : value; + // we add mod before modding to make sure that negatives values + // get converted properly: -10 -> 350 + return (value + type.mod) % type.mod; } // for now all property types without mod have min and max - return type.min > value ? type.min : type.max < value ? type.max : value; + return 0 > value ? 0 : type.max < value ? type.max : value; } function stringParse( string ) { @@ -195,19 +197,17 @@ function stringParse( string ) { string = string.toLowerCase(); each( stringParsers, function( i, parser ) { - var match = parser.re.exec( string ), + var parsed, + match = parser.re.exec( string ), values = match && parser.parse( match ), - parsed, - spaceName = parser.space || "rgba", - cache = spaces[ spaceName ].cache; - + spaceName = parser.space || "rgba"; if ( values ) { parsed = inst[ spaceName ]( values ); // if this was an rgba parse the assignment might happen twice // oh well.... - inst[ cache ] = parsed[ cache ]; + inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ]; rgba = inst._rgba = parsed._rgba; // exit each( stringParsers ) here because we matched @@ -216,11 +216,11 @@ function stringParse( string ) { }); // Found a stringParser that handled it - if ( rgba.length !== 0 ) { + if ( rgba.length ) { // if this came from a parsed string, force "transparent" when alpha is 0 // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0) - if ( Math.max.apply( Math, rgba ) === 0 ) { + if ( rgba.join() === "0,0,0,0" ) { jQuery.extend( rgba, colors.transparent ); } return inst; @@ -280,7 +280,7 @@ color.fn = jQuery.extend( color.prototype, { // if the value was null, we don't need to copy it // if the key was alpha, we don't need to copy it either - if ( red[ key ] == null || key === "alpha") { + if ( key === "alpha" || red[ key ] == null ) { return; } inst[ cache ] = space.to( inst._rgba ); @@ -298,13 +298,13 @@ color.fn = jQuery.extend( color.prototype, { is: function( compare ) { var is = color( compare ), same = true, - myself = this; + inst = this; each( spaces, function( _, space ) { - var isCache = is[ space.cache ], - localCache; + var localCache, + isCache = is[ space.cache ]; if (isCache) { - localCache = myself[ space.cache ] || space.to && space.to( myself._rgba ) || []; + localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || []; each( space.props, function( _, prop ) { if ( isCache[ prop.idx ] != null ) { same = ( isCache[ prop.idx ] === localCache[ prop.idx ] ); @@ -330,7 +330,8 @@ color.fn = jQuery.extend( color.prototype, { var end = color( other ), spaceName = end._space(), space = spaces[ spaceName ], - start = this[ space.cache ] || space.to( this._rgba ), + startColor = this.alpha() === 0 ? color( "transparent" ) : this, + start = startColor[ space.cache ] || space.to( startColor._rgba ), result = start.slice(); end = end[ space.cache ]; @@ -355,7 +356,7 @@ color.fn = jQuery.extend( color.prototype, { startValue -= type.mod; } } - result[ prop.idx ] = clamp( ( endValue - startValue ) * distance + startValue, prop ); + result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop ); } }); return this[ spaceName ]( result ); @@ -385,7 +386,7 @@ color.fn = jQuery.extend( color.prototype, { prefix = "rgb("; } - return prefix + rgba.join(",") + ")"; + return prefix + rgba.join() + ")"; }, toHslaString: function() { var prefix = "hsla(", @@ -405,7 +406,7 @@ color.fn = jQuery.extend( color.prototype, { hsla.pop(); prefix = "hsl("; } - return prefix + hsla.join(",") + ")"; + return prefix + hsla.join() + ")"; }, toHexString: function( includeAlpha ) { var rgba = this._rgba.slice(), @@ -429,12 +430,12 @@ color.fn = jQuery.extend( color.prototype, { color.fn.parse.prototype = color.fn; // hsla conversions adapted from: -// http://www.google.com/codesearch/p#OAMlx_jo-ck/src/third_party/WebKit/Source/WebCore/inspector/front-end/Color.js&d=7&l=193 +// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021 function hue2rgb( p, q, h ) { h = ( h + 1 ) % 1; if ( h * 6 < 1 ) { - return p + (q - p) * 6 * h; + return p + (q - p) * h * 6; } if ( h * 2 < 1) { return q; @@ -518,10 +519,10 @@ each( spaces, function( spaceName, space ) { return this[ cache ].slice(); } - var type = jQuery.type( value ), + var ret, + type = jQuery.type( value ), arr = ( type === "array" || type === "object" ) ? value : arguments, - local = this[ cache ].slice(), - ret; + local = this[ cache ].slice(); each( props, function( key, prop ) { var val = arr[ type === "object" ? key : prop.idx ]; @@ -548,7 +549,7 @@ each( spaces, function( spaceName, space ) { } color.fn[ key ] = function( value ) { var vtype = jQuery.type( value ), - fn = ( key === 'alpha' ? ( this._hsla ? 'hsla' : 'rgba' ) : spaceName ), + fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ), local = this[ fn ](), cur = local[ prop.idx ], match; @@ -582,13 +583,12 @@ each( stepHooks, function( i, hook ) { set: function( elem, value ) { var parsed, backgroundColor, curElem; - if ( jQuery.type( value ) !== 'string' || ( parsed = stringParse( value ) ) ) - { + if ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) { value = color( parsed || value ); if ( !support.rgba && value._rgba[ 3 ] !== 1 ) { curElem = hook === "backgroundColor" ? elem.parentNode : elem; do { - backgroundColor = jQuery.curCSS( curElem, "backgroundColor" ); + backgroundColor = jQuery.css( curElem, "backgroundColor" ); } while ( ( backgroundColor === "" || backgroundColor === "transparent" ) && ( curElem = curElem.parentNode ) && @@ -619,63 +619,31 @@ each( stepHooks, function( i, hook ) { }; }); -// detect rgba support -jQuery(function() { - var div = document.createElement( "div" ), - div_style = div.style; - - div_style.cssText = "background-color:rgba(1,1,1,.5)"; - support.rgba = div_style.backgroundColor.indexOf( "rgba" ) > -1; -}); - -// Some named colors to work with -// From Interface by Stefan Petre -// http://interface.eyecon.ro/ +// Basic color names only. +// Usage of any of the other color names requires adding yourself or including +// jquery.color.svg-names.js. colors = jQuery.Color.names = { + // 4.1. Basic color keywords aqua: "#00ffff", - azure: "#f0ffff", - beige: "#f5f5dc", black: "#000000", blue: "#0000ff", - brown: "#a52a2a", - cyan: "#00ffff", - darkblue: "#00008b", - darkcyan: "#008b8b", - darkgrey: "#a9a9a9", - darkgreen: "#006400", - darkkhaki: "#bdb76b", - darkmagenta: "#8b008b", - darkolivegreen: "#556b2f", - darkorange: "#ff8c00", - darkorchid: "#9932cc", - darkred: "#8b0000", - darksalmon: "#e9967a", - darkviolet: "#9400d3", fuchsia: "#ff00ff", - gold: "#ffd700", + gray: "#808080", green: "#008000", - indigo: "#4b0082", - khaki: "#f0e68c", - lightblue: "#add8e6", - lightcyan: "#e0ffff", - lightgreen: "#90ee90", - lightgrey: "#d3d3d3", - lightpink: "#ffb6c1", - lightyellow: "#ffffe0", lime: "#00ff00", - magenta: "#ff00ff", maroon: "#800000", navy: "#000080", olive: "#808000", - orange: "#ffa500", - pink: "#ffc0cb", purple: "#800080", - violet: "#800080", red: "#ff0000", silver: "#c0c0c0", + teal: "#008080", white: "#ffffff", yellow: "#ffff00", + + // 4.2.3. ‘transparent’ color keyword transparent: [ null, null, null, 0 ], + _default: "#ffffff" }; From 1991a9073d746757179353ed1529f597d95e54b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Mon, 9 Jul 2012 12:57:01 -0400 Subject: [PATCH 095/112] Menu: Remove extraneous spaces from selector. --- ui/jquery.ui.menu.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/jquery.ui.menu.js b/ui/jquery.ui.menu.js index 7586761997..127a09bb51 100644 --- a/ui/jquery.ui.menu.js +++ b/ui/jquery.ui.menu.js @@ -303,7 +303,7 @@ $.widget( "ui.menu", { // Don't refresh list items that are already adapted menus = submenus.add( this.element ); - menus.children( ":not( .ui-menu-item ):has( a )" ) + menus.children( ":not(.ui-menu-item):has(a)" ) .addClass( "ui-menu-item" ) .attr( "role", "presentation" ) .children( "a" ) From 0fc3afb2a168eef501b272ea45dc4758d007bf74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Mon, 9 Jul 2012 12:57:28 -0400 Subject: [PATCH 096/112] Tests: Add jQuery 1.6.2 to testswarm-multi-jquery grunt task. --- build/tasks/testswarm.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/tasks/testswarm.js b/build/tasks/testswarm.js index 118887ca64..c0244ebad4 100644 --- a/build/tasks/testswarm.js +++ b/build/tasks/testswarm.js @@ -63,7 +63,7 @@ grunt.registerTask( "testswarm", function( commit, configFile ) { grunt.registerTask( "testswarm-multi-jquery", function( commit, configFile ) { var allTests = {}; - "1.6 1.6.1 1.6.3 1.6.4 1.7 1.7.1 1.7.2 git".split(" ").forEach(function( version ) { + "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 ) { for ( var test in tests ) { allTests[ test + "-" + version ] = tests[ test ] + "?nojshint=true&jquery=" + version; } From a79d09a905740ce299f57602144144eee9b03af2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Mon, 9 Jul 2012 16:02:43 -0400 Subject: [PATCH 097/112] Widget: Create lowercase pseudo selectors. Fixes #8433 - Widget: Create lowercase pseudo selectors. --- tests/unit/widget/widget_core.js | 2 +- ui/jquery.ui.widget.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unit/widget/widget_core.js b/tests/unit/widget/widget_core.js index 0296b9e4fa..5efd91268a 100644 --- a/tests/unit/widget/widget_core.js +++ b/tests/unit/widget/widget_core.js @@ -83,7 +83,7 @@ test( "custom selector expression", function() { var elem = $( "

" ).appendTo( "#qunit-fixture" ); $.widget( "ui.testWidget", {} ); elem.testWidget(); - deepEqual( $( ":ui-testWidget" )[0], elem[0] ); + deepEqual( $( ":ui-testwidget" )[0], elem[0] ); elem.testWidget( "destroy" ); }); diff --git a/ui/jquery.ui.widget.js b/ui/jquery.ui.widget.js index 628b63bb0b..b5dfaa344d 100644 --- a/ui/jquery.ui.widget.js +++ b/ui/jquery.ui.widget.js @@ -36,7 +36,7 @@ $.widget = function( name, base, prototype ) { } // create selector for plugin - $.expr[ ":" ][ fullName ] = function( elem ) { + $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) { return !!$.data( elem, fullName ); }; From 019dcc26e307614681a6dfd0fcd9665548cb6ab6 Mon Sep 17 00:00:00 2001 From: kborchers Date: Mon, 9 Jul 2012 23:20:43 -0500 Subject: [PATCH 098/112] Menu: Remove incorrect scroll check behavior from focus event handler --- ui/jquery.ui.menu.js | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/ui/jquery.ui.menu.js b/ui/jquery.ui.menu.js index 127a09bb51..3658bd8d56 100644 --- a/ui/jquery.ui.menu.js +++ b/ui/jquery.ui.menu.js @@ -101,25 +101,13 @@ $.widget( "ui.menu", { "mouseleave .ui-menu": "collapseAll", focus: function( event ) { var menuTop, - menu = this.element, - // Default to focusing the first item - item = menu.children( ".ui-menu-item" ).eq( 0 ); + item, + menu = this.element; // If there's already an active item, keep it active - if ( this.active ) { - item = this.active; - // If there's no active item and the menu is scrolled, - // then find the first visible item - } else if ( this._hasScroll() ) { - menuTop = menu.offset().top; - menu.children().each(function() { - var currentItem = $( this ); - if ( currentItem.offset().top - menuTop >= 0 ) { - item = currentItem; - return false; - } - }); - } + // If not, activate the first item + item = this.active || menu.children( ".ui-menu-item" ).eq( 0 ); + this.focus( event, item ); }, blur: function( event ) { From 22d078aac608628323c687d1b7fe4424f47fd37f Mon Sep 17 00:00:00 2001 From: kborchers Date: Mon, 9 Jul 2012 23:37:27 -0500 Subject: [PATCH 099/112] Menu: Move regular expression creation outside of the loops --- ui/jquery.ui.menu.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ui/jquery.ui.menu.js b/ui/jquery.ui.menu.js index 3658bd8d56..4e565de453 100644 --- a/ui/jquery.ui.menu.js +++ b/ui/jquery.ui.menu.js @@ -173,7 +173,7 @@ $.widget( "ui.menu", { }, _keydown: function( event ) { - var match, prev, character, skip, + var match, prev, character, skip, regex, preventDefault = true; function escape( value ) { @@ -228,9 +228,9 @@ $.widget( "ui.menu", { character = prev + character; } + regex = new RegExp( "^" + escape( character ), "i" ); match = this.activeMenu.children( ".ui-menu-item" ).filter(function() { - return new RegExp( "^" + escape( character ), "i" ) - .test( $( this ).children( "a" ).text() ); + return regex.test( $( this ).children( "a" ).text() ); }); match = skip && match.index( this.active.next() ) !== -1 ? this.active.nextAll( ".ui-menu-item" ) : @@ -240,9 +240,9 @@ $.widget( "ui.menu", { // to move down the menu to the first item that starts with that character if ( !match.length ) { character = String.fromCharCode( event.keyCode ); + regex = new RegExp( "^" + escape( character ), "i" ); match = this.activeMenu.children( ".ui-menu-item" ).filter(function() { - return new RegExp( "^" + escape( character ), "i" ) - .test( $( this ).children( "a" ).text() ); + return regex.test( $( this ).children( "a" ).text() ); }); } From 1a22a675d89b421556bf02ee1565587c6ec5a13d Mon Sep 17 00:00:00 2001 From: kborchers Date: Mon, 9 Jul 2012 23:43:52 -0500 Subject: [PATCH 100/112] Menu: Remove unnecessary returns from expand and collapse --- ui/jquery.ui.menu.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/ui/jquery.ui.menu.js b/ui/jquery.ui.menu.js index 4e565de453..7861230aa7 100644 --- a/ui/jquery.ui.menu.js +++ b/ui/jquery.ui.menu.js @@ -483,7 +483,6 @@ $.widget( "ui.menu", { if ( newItem && newItem.length ) { this._close(); this.focus( event, newItem ); - return true; } }, @@ -501,7 +500,6 @@ $.widget( "ui.menu", { this._delay(function() { this.focus( event, newItem ); }, 20 ); - return true; } }, From db3fabedb46011224a5a2a1dd300cb954dd61b8d Mon Sep 17 00:00:00 2001 From: kborchers Date: Tue, 10 Jul 2012 00:12:39 -0500 Subject: [PATCH 101/112] Menu: Expose the submenu indicator icon as an icon option --- tests/unit/menu/menu_common.js | 1 + tests/visual/menu/menu.html | 5 +++-- ui/jquery.ui.menu.js | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/unit/menu/menu_common.js b/tests/unit/menu/menu_common.js index 07295f1af0..02e0befe8a 100644 --- a/tests/unit/menu/menu_common.js +++ b/tests/unit/menu/menu_common.js @@ -7,6 +7,7 @@ TestHelpers.commonWidgetTests( "menu", { at: "right top" }, role: "menu", + icon: "ui-icon-carat-1-e", // callbacks blur: null, diff --git a/tests/visual/menu/menu.html b/tests/visual/menu/menu.html index 5bda32eae9..205cb10c9a 100644 --- a/tests/visual/menu/menu.html +++ b/tests/visual/menu/menu.html @@ -26,7 +26,8 @@ $( "#menu6" ).menu({ menus: ".menuElement", - select: logger + select: logger, + icon: "ui-icon-carat-1-s" }); }); @@ -212,7 +213,7 @@
-

Menu with custom markup, multi-line items

+

Menu with custom markup, multi-line items and a custom submenu icon