From 3af0923b73317750ac7a7e431e3fa515f18e5092 Mon Sep 17 00:00:00 2001 From: Scott González Date: Fri, 15 Apr 2011 00:08:03 -0400 Subject: Datepicker: Fixed dateFormat for nl locale. Fixes #7250 - Datepicker: Incorrect dateFormat in jquery.ui.datepicker-nl.js. --- ui/i18n/jquery.ui.datepicker-nl.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/i18n/jquery.ui.datepicker-nl.js b/ui/i18n/jquery.ui.datepicker-nl.js index 663d6bb26..40be2cfa4 100644 --- a/ui/i18n/jquery.ui.datepicker-nl.js +++ b/ui/i18n/jquery.ui.datepicker-nl.js @@ -14,7 +14,7 @@ jQuery(function($){ dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'], dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'], weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', + dateFormat: 'dd-mm-yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, -- cgit v1.2.3 From 59c787fa4a975547e7789928126028bdfe132582 Mon Sep 17 00:00:00 2001 From: Lopo Date: Tue, 12 Apr 2011 12:43:19 +0200 Subject: Datepicker: Fixed Slovak locale. Fixes #7254 - Datepicker: Incorrect day name for Slovak localization. --- ui/i18n/jquery.ui.datepicker-sk.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/i18n/jquery.ui.datepicker-sk.js b/ui/i18n/jquery.ui.datepicker-sk.js index a9179c179..83ae8e811 100644 --- a/ui/i18n/jquery.ui.datepicker-sk.js +++ b/ui/i18n/jquery.ui.datepicker-sk.js @@ -10,7 +10,7 @@ jQuery(function($){ 'Júl','August','September','Október','November','December'], monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún', 'Júl','Aug','Sep','Okt','Nov','Dec'], - dayNames: ['Nedel\'a','Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota'], + dayNames: ['Nedeľa','Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota'], dayNamesShort: ['Ned','Pon','Uto','Str','Štv','Pia','Sob'], dayNamesMin: ['Ne','Po','Ut','St','Št','Pia','So'], weekHeader: 'Ty', -- cgit v1.2.3 From d3e10de6bce82bc6184eb7b5a4fd68247bc5905b Mon Sep 17 00:00:00 2001 From: Scott González Date: Fri, 15 Apr 2011 08:53:05 -0400 Subject: Tabs: Better tests for tab state. --- tests/unit/tabs/tabs.html | 14 ++++++++- tests/unit/tabs/tabs_deprecated.html | 14 ++++++++- tests/unit/tabs/tabs_methods.js | 61 ++---------------------------------- tests/unit/tabs/tabs_options.js | 14 ++++++++- 4 files changed, 42 insertions(+), 61 deletions(-) diff --git a/tests/unit/tabs/tabs.html b/tests/unit/tabs/tabs.html index c800894ff..bba0e8a58 100644 --- a/tests/unit/tabs/tabs.html +++ b/tests/unit/tabs/tabs.html @@ -30,7 +30,19 @@ function tabs_state( tabs ) { var expected = $.makeArray( arguments ).slice( 1 ); var actual = tabs.find( ".ui-tabs-nav li" ).map(function() { - return $( this ).hasClass( "ui-state-active" ) ? 1 : 0; + var tab = $( this ), + panel = $( $.ui.tabs.prototype._sanitizeSelector( + "#" + tab.find( "a" ).attr( "aria-controls" ) ) ), + tabIsActive = tab.hasClass( "ui-state-active" ), + panelIsActive = panel.is( ":visible" ); + + if ( tabIsActive && panelIsActive ) { + return 1; + } + if ( !tabIsActive && !panelIsActive ) { + return 0; + } + return -1; // mixed state - invalid }).get(); same( actual, expected ); } diff --git a/tests/unit/tabs/tabs_deprecated.html b/tests/unit/tabs/tabs_deprecated.html index 54e0c39d6..1fb50352b 100644 --- a/tests/unit/tabs/tabs_deprecated.html +++ b/tests/unit/tabs/tabs_deprecated.html @@ -29,7 +29,19 @@ function tabs_state( tabs ) { var expected = $.makeArray( arguments ).slice( 1 ); var actual = tabs.find( ".ui-tabs-nav li" ).map(function() { - return $( this ).hasClass( "ui-state-active" ) ? 1 : 0; + var tab = $( this ), + panel = $( $.ui.tabs.prototype._sanitizeSelector( + "#" + tab.find( "a" ).attr( "aria-controls" ) ) ), + tabIsActive = tab.hasClass( "ui-state-active" ), + panelIsActive = panel.is( ":visible" ); + + if ( tabIsActive && panelIsActive ) { + return 1; + } + if ( !tabIsActive && !panelIsActive ) { + return 0; + } + return -1; // mixed state - invalid }).get(); same( actual, expected ); } diff --git a/tests/unit/tabs/tabs_methods.js b/tests/unit/tabs/tabs_methods.js index 8fcd2a848..7c72cd26d 100644 --- a/tests/unit/tabs/tabs_methods.js +++ b/tests/unit/tabs/tabs_methods.js @@ -1,61 +1,6 @@ -/* - * tabs_methods.js - */ -(function($) { +(function( $ ) { -module("tabs: methods"); - -test('init', function() { - expect(9); - - el = $('#tabs1').tabs(); - - ok(true, '.tabs() called on element'); - ok( el.is('.ui-tabs.ui-widget.ui-widget-content.ui-corner-all'), 'attach classes to container'); - ok( $('ul', el).is('.ui-tabs-nav.ui-helper-reset.ui-helper-clearfix.ui-widget-header.ui-corner-all'), 'attach classes to list' ); - ok( $('div:eq(0)', el).is('.ui-tabs-panel.ui-widget-content.ui-corner-bottom'), 'attach classes to panel' ); - ok( $('li:eq(0)', el).is('.ui-tabs-active.ui-state-active.ui-corner-top'), 'attach classes to active li'); - ok( $('li:eq(1)', el).is('.ui-state-default.ui-corner-top'), 'attach classes to inactive li'); - equals( el.tabs('option', 'active'), 0, 'active option set' ); - equals( $('li', el).index( $('li.ui-tabs-active', el) ), 0, 'second tab active'); - equals( $('div', el).index( $('div:hidden', '#tabs1') ), 1, 'second panel should be hidden' ); -}); - -test('init with hash', function() { - expect(5); - - //set a hash in the url - location.hash = '#fragment-2'; - - //selection of tab with divs ordered differently than list - el = $('#tabs1').tabs(); - - equals(el.tabs('option', 'active'), 1, 'second tab should be active'); - - ok(!$('#tabs1 ul li:eq(0)').is('.ui-tabs-active.ui-state-active'), 'first tab should not be selected nor active'); - ok($('#tabs1 div:eq(0)').is(':hidden'), 'first div for first tab should be hidden'); - - ok($('#tabs1 ul li:eq(1)').is('.ui-tabs-active.ui-state-active'), 'second tab should be selected and active'); - ok(!$('#tabs1 div:eq(1)').is(':hidden'), 'second div for second tab should not be hidden'); -}); - -test('init mismatched order with hash', function() { - expect(5); - - //set a hash in the url - location.hash = '#tabs7-2'; - - //selection of tab with divs ordered differently than list - el = $('#tabs7').tabs(); - - equals(el.tabs('option', 'active'), 1, 'second tab should be active'); - - ok(!$('#tabs7-list li:eq(0)').is('.ui-tabs-active.ui-state-active'), 'first tab should not be selected nor active'); - ok($('#tabs7 div:eq(1)').is(':hidden'), 'second div for first tab should be hidden'); - - ok($('#tabs7-list li:eq(1)').is('.ui-tabs-active.ui-state-active'), 'second tab should be selected and active'); - ok(!$('#tabs7 div:eq(0)').is(':hidden'), 'first div for second tab should not be hidden'); -}); +module( "tabs: methods" ); test('destroy', function() { expect(6); @@ -162,4 +107,4 @@ test('load', function() { ok(false, "missing test - untested code is broken code."); }); -})(jQuery); +}( jQuery ) ); diff --git a/tests/unit/tabs/tabs_options.js b/tests/unit/tabs/tabs_options.js index 3cce96e1c..884a566c6 100644 --- a/tests/unit/tabs/tabs_options.js +++ b/tests/unit/tabs/tabs_options.js @@ -10,10 +10,11 @@ test( "{ active: default }", function() { tabs_state( element, 1, 0, 0 ); element.tabs( "destroy" ); - window.location.hash = "#fragment-3"; + location.hash = "#fragment-3"; element = $( "#tabs1" ).tabs(); equals( element.tabs( "option", "active" ), 2, "should be 2 based on URL" ); tabs_state( element, 0, 0, 1 ); + element.tabs( "destroy" ); }); test( "{ active: false }", function() { @@ -83,6 +84,17 @@ if ( $.uiBackCompat === false ) { }); } +test( "active - mismatched tab/panel order", function() { + expect( 3 ); + + location.hash = "#tabs7-2"; + var element = $( "#tabs7" ).tabs(); + equals( element.tabs( "option", "active" ), 1, "should be 1 based on URL" ); + tabs_state( element, 0, 1 ); + element.tabs( "option", "active", 0 ); + tabs_state( element, 1, 0 ); +}); + test( "{ collapsible: false }", function() { expect( 4 ); -- cgit v1.2.3 From ae8963f054902b44c8b510ed09ad941eb4e7f64f Mon Sep 17 00:00:00 2001 From: Scott González Date: Fri, 15 Apr 2011 11:04:49 -0400 Subject: Tabs: Rewrote some ticket tests and moved to approriate file. --- tests/unit/tabs/tabs_core.js | 16 +++++++++++ tests/unit/tabs/tabs_tickets.js | 62 ----------------------------------------- 2 files changed, 16 insertions(+), 62 deletions(-) diff --git a/tests/unit/tabs/tabs_core.js b/tests/unit/tabs/tabs_core.js index 30d58c254..c9b16e3a8 100644 --- a/tests/unit/tabs/tabs_core.js +++ b/tests/unit/tabs/tabs_core.js @@ -26,6 +26,22 @@ $.each({ }); }); +// #5893 - Sublist in the tab list are considered as tab +test( "nested list", function() { + expect( 1 ); + + var element = $( "#tabs6" ).tabs(); + equals( element.data( "tabs" ).anchors.length, 2, "should contain 2 tab" ); +}); + +test( "disconnected from DOM", function() { + expect( 2 ); + + var element = $( "#tabs1" ).remove().tabs(); + equals( element.find( ".ui-tabs-nav" ).length, 1, "should initialize nav" ); + equals( element.find( ".ui-tabs-panel" ).length, 3, "should initialize panels" ); +}); + test( "aria-controls", function() { expect( 7 ); var element = $( "#tabs1" ).tabs(), diff --git a/tests/unit/tabs/tabs_tickets.js b/tests/unit/tabs/tabs_tickets.js index d65f0285a..d7a59cb5b 100644 --- a/tests/unit/tabs/tabs_tickets.js +++ b/tests/unit/tabs/tabs_tickets.js @@ -5,39 +5,6 @@ module("tabs: tickets"); -test('#2715 - id containing colon', function() { - // http://dev.jqueryui.com/ticket/2715 - expect(4); - - el = $('#tabs2').tabs(); - ok( $('div.ui-tabs-panel:eq(0)', '#tabs2').is(':visible'), 'first panel should be visible' ); - ok( $('div.ui-tabs-panel:eq(1)', '#tabs2').is(':hidden'), 'second panel should be hidden' ); - - el.tabs('option', 'active', 1).tabs('option', 'active', 0); - ok( $('div.ui-tabs-panel:eq(0)', '#tabs2').is(':visible'), 'first panel should be visible' ); - ok( $('div.ui-tabs-panel:eq(1)', '#tabs2').is(':hidden'), 'second panel should be hidden' ); - -}); - -test('#???? - panel containing inline style', function() { - expect(3); - - var inlineStyle = function(property) { - return $('#inline-style')[0].style[property]; - }; - var expected = inlineStyle('height'); - - el = $('#tabs2').tabs(); - equals(inlineStyle('height'), expected, 'init should not remove inline style'); - - el.tabs('option', 'active', 1); - equals(inlineStyle('height'), expected, 'show tab should not remove inline style'); - - el.tabs('option', 'active', 0); - equals(inlineStyle('height'), expected, 'hide tab should not remove inline style'); - -}); - test('#3627 - Ajax tab with url containing a fragment identifier fails to load', function() { // http://dev.jqueryui.com/ticket/3627 expect(1); @@ -67,33 +34,4 @@ test('#4033 - IE expands hash to full url and misinterprets tab as ajax', functi equals($('a', el).attr('aria-controls'), 'tab', 'aria-contorls attribute is correct'); }); -test('#5893 - Sublist in the tab list are considered as tab', function() { - // http://dev.jqueryui.com/ticket/5893 - expect(1); - - el = $('#tabs6').tabs(); - equals(el.data("tabs").anchors.length, 2, 'should contain 2 tab'); - -}); - -test('#6710 - selectors are global', function() { - // http://bugs.jqueryui.com/ticket/6710 - expect(1); - - var container = $('\ -
\ -
\ - \ -

first

\ -

second

\ -
\ -
'); - container.find('#tabs_6710').tabs(); - ok( container.find('#tabs-2_6710').is(':hidden'), 'should find panels and add corresponding classes' ); -}); - - })(jQuery); -- cgit v1.2.3 From 4547da1ba56641a490f03043241003aca505e3e4 Mon Sep 17 00:00:00 2001 From: Scott González Date: Fri, 15 Apr 2011 11:29:26 -0400 Subject: Accordion tests: Coding standards. --- tests/unit/accordion/accordion.html | 2 +- tests/unit/accordion/accordion_core.js | 28 ++-- tests/unit/accordion/accordion_deprecated.html | 2 +- tests/unit/accordion/accordion_deprecated.js | 198 +++++++++++----------- tests/unit/accordion/accordion_events.js | 58 +++---- tests/unit/accordion/accordion_methods.js | 26 +-- tests/unit/accordion/accordion_options.js | 222 ++++++++++++------------- 7 files changed, 268 insertions(+), 268 deletions(-) diff --git a/tests/unit/accordion/accordion.html b/tests/unit/accordion/accordion.html index 8ffdc22a4..c260ef22f 100644 --- a/tests/unit/accordion/accordion.html +++ b/tests/unit/accordion/accordion.html @@ -20,7 +20,7 @@ - - - - - - - - - - - - -
- - - - - -

Default

- - - -

- -
- -

Drilldown

- - - -
- -

- -
- -

Flyout / nested

- - - -
- - - - diff --git a/tests/static/menu/default.html b/tests/static/menu/default.html deleted file mode 100644 index dd1e0ba7d..000000000 --- a/tests/static/menu/default.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - Menu Static Test : Default - - - - - - - - - - - - - - -- cgit v1.2.3 From 03132f93fc961fc23771b1784ada7d46c104dea1 Mon Sep 17 00:00:00 2001 From: Hans Hillen Date: Wed, 20 Apr 2011 20:15:26 +0200 Subject: Fix menubar escape key + minor css fix --- tests/visual/menu/menubar.html | 4 ++-- tests/visual/menu/menubar.js | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/visual/menu/menubar.html b/tests/visual/menu/menubar.html index 1b4b331f6..d2185e97c 100644 --- a/tests/visual/menu/menubar.html +++ b/tests/visual/menu/menubar.html @@ -55,9 +55,9 @@ .ui-menubar .ui-button { float: left; font-weight: normal; border-top-width: 0 !important; border-bottom-width: 0 !important; margin: 0; outline: none; } .ui-menubar .ui-menubar-link { border-right: 1px dashed transparent; border-left: 1px dashed transparent; } - .ui-menubar, .ui-menubar { + .ui-menubar { list-style: none; - margin-left: 0; + margin: 0; padding-left: 0; } diff --git a/tests/visual/menu/menubar.js b/tests/visual/menu/menubar.js index e6f6ab069..13a508811 100644 --- a/tests/visual/menu/menubar.js +++ b/tests/visual/menu/menubar.js @@ -38,7 +38,6 @@ $.widget("ui.menubar", { var menu = $(this); if (menu.is(":hidden")) return; - event.stopPropagation(); switch (event.keyCode) { case $.ui.keyCode.LEFT: self._left(event); @@ -119,7 +118,7 @@ $.widget("ui.menubar", { } }) self._bind({ - keyup: function(event) { + keydown: function(event) { if (event.keyCode == $.ui.keyCode.ESCAPE && self.open) { if (self.active.menu("left", event) !== true) { var active = self.active; -- cgit v1.2.3 From 5a5ce51aad3a60093905e0c93e7503aca2d59688 Mon Sep 17 00:00:00 2001 From: maggiewachs Date: Thu, 21 Apr 2011 11:30:29 -0400 Subject: Removed duplicate selector reference --- themes/base/jquery.ui.menu.css | 2 -- 1 file changed, 2 deletions(-) diff --git a/themes/base/jquery.ui.menu.css b/themes/base/jquery.ui.menu.css index a700d2895..d5d802821 100644 --- a/themes/base/jquery.ui.menu.css +++ b/themes/base/jquery.ui.menu.css @@ -29,8 +29,6 @@ padding:.2em .4em; line-height:1.5; zoom:1; -} -.ui-menu .ui-menu-item a { font-weight: normal; } .ui-menu .ui-menu-item a.ui-state-focus, -- cgit v1.2.3 From 49556995d2dffb7b57169bc2462aef5e17370d41 Mon Sep 17 00:00:00 2001 From: maggiewachs Date: Thu, 21 Apr 2011 14:29:45 -0400 Subject: Set menu item link top padding to px (in place of em); this fixes the issue where the submenu jumped when mousing over the parent item's menu icon. --- themes/base/jquery.ui.menu.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/themes/base/jquery.ui.menu.css b/themes/base/jquery.ui.menu.css index d5d802821..ed4b4a13a 100644 --- a/themes/base/jquery.ui.menu.css +++ b/themes/base/jquery.ui.menu.css @@ -26,7 +26,7 @@ .ui-menu .ui-menu-item a { text-decoration:none; display:block; - padding:.2em .4em; + padding: 2px .4em; line-height:1.5; zoom:1; font-weight: normal; -- cgit v1.2.3 From 45c418d29327c83a54c06553ad0f7505ede64cbb Mon Sep 17 00:00:00 2001 From: Hans Hillen Date: Fri, 22 Apr 2011 20:22:16 +0200 Subject: Added focusin & focusout handler for menubar --- tests/visual/menu/menubar.js | 44 ++++++++++++++++---------------------------- 1 file changed, 16 insertions(+), 28 deletions(-) diff --git a/tests/visual/menu/menubar.js b/tests/visual/menu/menubar.js index 13a508811..0fd5d0ecd 100644 --- a/tests/visual/menu/menubar.js +++ b/tests/visual/menu/menubar.js @@ -47,14 +47,8 @@ $.widget("ui.menubar", { self._right(event); event.preventDefault(); break; - case $.ui.keyCode.TAB: - self.open= false; - break; }; - }).blur(function( event ) { - if (!self.open) - self._close( event ); - }); + }) }); items.each(function() { var input = $(this), @@ -107,19 +101,9 @@ $.widget("ui.menubar", { }; }); - self._bind(document, { - click: function(event) { - if (self.open) { - var menubar = $(event.target).closest(".ui-menubar"); - if (!menubar.length || menubar.get(0) !== self.element.get(0)) { - self._close(); - } - } - } - }) self._bind({ keydown: function(event) { - if (event.keyCode == $.ui.keyCode.ESCAPE && self.open) { + if (event.keyCode == $.ui.keyCode.ESCAPE) { if (self.active.menu("left", event) !== true) { var active = self.active; self.active.blur(); @@ -127,6 +111,14 @@ $.widget("ui.menubar", { active.prev().focus(); } } + }, + focusout : function( event ) { + self.closeTimer = setTimeout(function() { + self._close( event ); + }, 100); + }, + focusin :function( event ) { + clearTimeout(self.closeTimer); } }); }, @@ -158,7 +150,7 @@ $.widget("ui.menubar", { .removeAttr("aria-hidden", "true") .removeAttr("aria-expanded", "false") .removeAttr("tabindex") - .unbind("keydown", "blur") + .unbind("keydown", "blur", "focusin", "focusout") ; }, @@ -168,11 +160,7 @@ $.widget("ui.menubar", { this.active.menu("closeAll").hide().attr("aria-hidden", "true").attr("aria-expanded", "false"); this.active.prev().removeClass("ui-state-active").removeAttr("tabIndex"); this.active = null; - var self = this; - // delay for the next focus event to see it as still "open" - self.timer = setTimeout(function() { - self.open = false; - }, 13); + self.open = false; }, _open: function(event, menu) { @@ -185,8 +173,6 @@ $.widget("ui.menubar", { this.active.menu("closeAll").hide().attr("aria-hidden", "true").attr("aria-expanded", "false"); this.active.prev().removeClass("ui-state-active"); } - clearTimeout(this.timer); - this.open = true; // set tabIndex -1 to have the button skipped on shift-tab when menu is open (it gets focus) var button = menu.prev().addClass("ui-state-active").attr("tabIndex", -1); this.active = menu.show().position({ @@ -196,8 +182,10 @@ $.widget("ui.menubar", { }) .removeAttr("aria-hidden").attr("aria-expanded", "true") .menu("focus", event, menu.children("li").first()) - .focus(); - + .focus() + .focusin() + ; + self.open = true; }, _prev: function( event, button ) { -- cgit v1.2.3 From dc7410f55b4398891e278efec110d1ed5e6f1f92 Mon Sep 17 00:00:00 2001 From: Hans Hillen Date: Fri, 22 Apr 2011 20:22:56 +0200 Subject: Prevent branch menuitems from firing select event --- ui/jquery.ui.menu.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/ui/jquery.ui.menu.js b/ui/jquery.ui.menu.js index 0a06fe0b5..f9ad84fda 100644 --- a/ui/jquery.ui.menu.js +++ b/ui/jquery.ui.menu.js @@ -108,9 +108,16 @@ $.widget("ui.menu", { event.preventDefault(); break; case $.ui.keyCode.ENTER: - self.select( event ); + if (self.active.children("a[aria-haspopup='true']").length) { + if (self.right( event )) { + event.stopImmediatePropagation(); + } + } + else { + self.select( event ); + event.stopImmediatePropagation(); + } event.preventDefault(); - event.stopImmediatePropagation(); break; case $.ui.keyCode.ESCAPE: if ( self.left( event ) ) { -- cgit v1.2.3 From 42e11d8e41253571d67a7e1a62caa9376771c292 Mon Sep 17 00:00:00 2001 From: Hans Hillen Date: Fri, 22 Apr 2011 23:11:53 +0200 Subject: Fix error for Escape key on menubar item --- tests/visual/menu/menubar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/visual/menu/menubar.js b/tests/visual/menu/menubar.js index 0fd5d0ecd..8c0bd4904 100644 --- a/tests/visual/menu/menubar.js +++ b/tests/visual/menu/menubar.js @@ -104,7 +104,7 @@ $.widget("ui.menubar", { self._bind({ keydown: function(event) { if (event.keyCode == $.ui.keyCode.ESCAPE) { - if (self.active.menu("left", event) !== true) { + if (self.active && self.active.menu("left", event) !== true) { var active = self.active; self.active.blur(); self._close( event ); -- cgit v1.2.3 From 84f918ae44ed6002d67f568ecffbb262f1e9e115 Mon Sep 17 00:00:00 2001 From: Hans Hillen Date: Fri, 22 Apr 2011 23:14:04 +0200 Subject: Fix collapsing submenus issue --- ui/jquery.ui.menu.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ui/jquery.ui.menu.js b/ui/jquery.ui.menu.js index f9ad84fda..8738f5c27 100644 --- a/ui/jquery.ui.menu.js +++ b/ui/jquery.ui.menu.js @@ -283,17 +283,15 @@ $.widget("ui.menu", { }, _open: function(submenu) { + clearTimeout(this.timer); this.element.find(".ui-menu").not(submenu.parents()).hide().attr("aria-hidden", "true"); - var position = $.extend({}, { of: this.active }, $.type(this.options.position) == "function" ? this.options.position(this.active) : this.options.position ); - submenu.show().removeAttr("aria-hidden").attr("aria-expanded", "true").position(position); - this.active.find(">a:first").addClass("ui-state-active"); }, -- cgit v1.2.3 From 54795b56509cb5562fb9385ae59f10552df5cd78 Mon Sep 17 00:00:00 2001 From: Hans Hillen Date: Sat, 23 Apr 2011 17:31:25 +0200 Subject: change self.open to this.open --- tests/visual/menu/menubar.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/visual/menu/menubar.js b/tests/visual/menu/menubar.js index 8c0bd4904..8e2d51e30 100644 --- a/tests/visual/menu/menubar.js +++ b/tests/visual/menu/menubar.js @@ -160,7 +160,7 @@ $.widget("ui.menubar", { this.active.menu("closeAll").hide().attr("aria-hidden", "true").attr("aria-expanded", "false"); this.active.prev().removeClass("ui-state-active").removeAttr("tabIndex"); this.active = null; - self.open = false; + this.open = false; }, _open: function(event, menu) { @@ -185,7 +185,7 @@ $.widget("ui.menubar", { .focus() .focusin() ; - self.open = true; + this.open = true; }, _prev: function( event, button ) { -- cgit v1.2.3 From f7d2fdbab8f6e0ea37fb02f9458489990305ff2f Mon Sep 17 00:00:00 2001 From: Hans Hillen Date: Sat, 23 Apr 2011 17:35:03 +0200 Subject: removed unbind for focusin and focusout --- tests/visual/menu/menubar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/visual/menu/menubar.js b/tests/visual/menu/menubar.js index 8e2d51e30..cc3258d4a 100644 --- a/tests/visual/menu/menubar.js +++ b/tests/visual/menu/menubar.js @@ -150,7 +150,7 @@ $.widget("ui.menubar", { .removeAttr("aria-hidden", "true") .removeAttr("aria-expanded", "false") .removeAttr("tabindex") - .unbind("keydown", "blur", "focusin", "focusout") + .unbind("keydown", "blur") ; }, -- cgit v1.2.3 From 6326da3fdb29ea4f40e39bc06abf14cde5ba5c8c Mon Sep 17 00:00:00 2001 From: jzaefferer Date: Sat, 23 Apr 2011 17:36:52 +0200 Subject: Menu: Add ui-state-active to parent item when submenu item receives focus. --- ui/jquery.ui.menu.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ui/jquery.ui.menu.js b/ui/jquery.ui.menu.js index 3b48d29a3..7c0c8d3d3 100644 --- a/ui/jquery.ui.menu.js +++ b/ui/jquery.ui.menu.js @@ -229,6 +229,9 @@ $.widget("ui.menu", { // need to remove the attribute before adding it for the screenreader to pick up the change // see http://groups.google.com/group/jquery-a11y/msg/929e0c1e8c5efc8f this.element.removeAttr("aria-activedescendant").attr("aria-activedescendant", self.itemId) + + // highlight active parent menu item, if any + this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"); self.timer = setTimeout(function() { self._close(); @@ -277,8 +280,6 @@ $.widget("ui.menu", { ); submenu.show().position(position); - - this.active.find(">a:first").addClass("ui-state-active"); }, closeAll: function() { -- cgit v1.2.3 From c4c36e557ef2b3450bc365708064f7314bc6fdc4 Mon Sep 17 00:00:00 2001 From: Scott González Date: Mon, 25 Apr 2011 08:10:39 -0400 Subject: Accordion, Autocomplete, Tabs: Separate callbacks and options in the defaults. --- tests/unit/accordion/accordion_defaults.js | 6 +++- .../accordion/accordion_defaults_deprecated.js | 8 ++++- tests/unit/autocomplete/autocomplete_defaults.js | 41 ++++++++++++---------- tests/unit/tabs/tabs_defaults.js | 8 +++-- tests/unit/tabs/tabs_defaults_deprecated.js | 22 ++++++------ ui/jquery.ui.accordion.js | 11 +++++- ui/jquery.ui.autocomplete.js | 11 +++++- ui/jquery.ui.tabs.js | 8 +++-- 8 files changed, 77 insertions(+), 38 deletions(-) diff --git a/tests/unit/accordion/accordion_defaults.js b/tests/unit/accordion/accordion_defaults.js index 95a478057..847a394e2 100644 --- a/tests/unit/accordion/accordion_defaults.js +++ b/tests/unit/accordion/accordion_defaults.js @@ -10,6 +10,10 @@ commonWidgetTests( "accordion", { icons: { "activeHeader": "ui-icon-triangle-1-s", "header": "ui-icon-triangle-1-e" - } + }, + + // callbacks + activate: null, + beforeActivate: null } }); diff --git a/tests/unit/accordion/accordion_defaults_deprecated.js b/tests/unit/accordion/accordion_defaults_deprecated.js index b90b472e2..bdc059d10 100644 --- a/tests/unit/accordion/accordion_defaults_deprecated.js +++ b/tests/unit/accordion/accordion_defaults_deprecated.js @@ -16,6 +16,12 @@ commonWidgetTests( "accordion", { "headerSelected": "ui-icon-triangle-1-s" }, navigation: false, - navigationFilter: function() {} + navigationFilter: function() {}, + + // callbacks + activate: null, + beforeActivate: null, + change: null, + changestart: null } }); diff --git a/tests/unit/autocomplete/autocomplete_defaults.js b/tests/unit/autocomplete/autocomplete_defaults.js index dd5007089..05897b848 100644 --- a/tests/unit/autocomplete/autocomplete_defaults.js +++ b/tests/unit/autocomplete/autocomplete_defaults.js @@ -1,19 +1,24 @@ -/* - * autocomplete_defaults.js - */ +commonWidgetTests( "autocomplete", { + defaults: { + appendTo: "body", + autoFocus: false, + delay: 300, + disabled: false, + minLength: 1, + position: { + my: "left top", + at: "left bottom", + collision: "none" + }, + source: null, -var autocomplete_defaults = { - appendTo: "body", - autoFocus: false, - delay: 300, - disabled: false, - minLength: 1, - position: { - my: "left top", - at: "left bottom", - collision: "none" - }, - source: null -}; - -commonWidgetTests('autocomplete', { defaults: autocomplete_defaults }); + // callbacks + change: null, + close: null, + focus: null, + open: null, + response: null, + search: null, + select: null + } +}); diff --git a/tests/unit/tabs/tabs_defaults.js b/tests/unit/tabs/tabs_defaults.js index e15d618de..0750094e4 100644 --- a/tests/unit/tabs/tabs_defaults.js +++ b/tests/unit/tabs/tabs_defaults.js @@ -1,13 +1,15 @@ commonWidgetTests( "tabs", { defaults: { - activate: null, active: null, - beforeLoad: null, - beforeActivate: null, collapsible: false, disabled: false, event: "click", fx: null, + + // callbacks + activate: null, + beforeActivate: null, + beforeLoad: null, load: null } }); diff --git a/tests/unit/tabs/tabs_defaults_deprecated.js b/tests/unit/tabs/tabs_defaults_deprecated.js index 2d9772c6d..84f7de073 100644 --- a/tests/unit/tabs/tabs_defaults_deprecated.js +++ b/tests/unit/tabs/tabs_defaults_deprecated.js @@ -1,26 +1,28 @@ commonWidgetTests( "tabs", { defaults: { - activate: null, active: null, - add: null, ajaxOptions: null, - beforeLoad: null, - beforeActivate: null, cache: false, collapsible: false, cookie: null, - disable: null, disabled: false, - enable: null, event: "click", fx: null, idPrefix: "ui-tabs-", - load: null, panelTemplate: "
", + spinner: "Loading…", + tabTemplate: "
  • #{label}
  • ", + + // callbacks + activate: null, + add: null, + beforeActivate: null, + beforeLoad: null, + disable: null, + enable: null, + load: null, remove: null, select: null, - show: null, - spinner: "Loading…", - tabTemplate: "
  • #{label}
  • " + show: null } }); diff --git a/ui/jquery.ui.accordion.js b/ui/jquery.ui.accordion.js index 455c66a28..0cc1f9e2a 100644 --- a/ui/jquery.ui.accordion.js +++ b/ui/jquery.ui.accordion.js @@ -25,7 +25,11 @@ $.widget( "ui.accordion", { icons: { activeHeader: "ui-icon-triangle-1-s", header: "ui-icon-triangle-1-e" - } + }, + + // callbacks + activate: null, + beforeActivate: null }, _create: function() { @@ -649,6 +653,11 @@ if ( $.uiBackCompat !== false ) { // change events (function( $, prototype ) { + $.extend( prototype.options, { + change: null, + changestart: null + }); + var _trigger = prototype._trigger; prototype._trigger = function( type, event, data ) { var ret = _trigger.apply( this, arguments ); diff --git a/ui/jquery.ui.autocomplete.js b/ui/jquery.ui.autocomplete.js index 1685c0652..526eb3869 100644 --- a/ui/jquery.ui.autocomplete.js +++ b/ui/jquery.ui.autocomplete.js @@ -30,7 +30,16 @@ $.widget( "ui.autocomplete", { at: "left bottom", collision: "none" }, - source: null + source: null, + + // callbacks + change: null, + close: null, + focus: null, + open: null, + response: null, + search: null, + select: null }, pending: 0, diff --git a/ui/jquery.ui.tabs.js b/ui/jquery.ui.tabs.js index 699c1a5ee..82d3f186d 100755 --- a/ui/jquery.ui.tabs.js +++ b/ui/jquery.ui.tabs.js @@ -26,13 +26,15 @@ function getNextListId() { $.widget( "ui.tabs", { options: { - activate: null, active: null, - beforeActivate: null, - beforeLoad: null, collapsible: false, event: "click", fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 } + + // callbacks + activate: null, + beforeActivate: null, + beforeLoad: null, load: null }, -- cgit v1.2.3 From 325ee6e87133dd2a507c820dd3c356e3b897a3ec Mon Sep 17 00:00:00 2001 From: Scott González Date: Mon, 25 Apr 2011 14:04:30 -0400 Subject: Widget: define a null default for the create callback. --- tests/unit/accordion/accordion_defaults.js | 3 +- .../accordion/accordion_defaults_deprecated.js | 3 +- tests/unit/autocomplete/autocomplete_defaults.js | 1 + tests/unit/button/button_defaults.js | 25 ++++---- tests/unit/dialog/dialog_defaults.js | 67 +++++++++++----------- tests/unit/dialog/dialog_options.js | 4 +- tests/unit/menu/menu_defaults.js | 21 ++++--- tests/unit/progressbar/progressbar_defaults.js | 19 +++--- tests/unit/slider/slider_defaults.js | 37 ++++++------ tests/unit/spinner/spinner_defaults.js | 29 +++++----- tests/unit/tabs/tabs_defaults.js | 1 + tests/unit/tabs/tabs_defaults_deprecated.js | 1 + tests/unit/tooltip/tooltip_defaults.js | 27 +++++---- tests/unit/widget/widget_core.js | 3 + ui/jquery.ui.widget.js | 5 +- 15 files changed, 125 insertions(+), 121 deletions(-) diff --git a/tests/unit/accordion/accordion_defaults.js b/tests/unit/accordion/accordion_defaults.js index 847a394e2..9aa58e650 100644 --- a/tests/unit/accordion/accordion_defaults.js +++ b/tests/unit/accordion/accordion_defaults.js @@ -14,6 +14,7 @@ commonWidgetTests( "accordion", { // callbacks activate: null, - beforeActivate: null + beforeActivate: null, + create: null } }); diff --git a/tests/unit/accordion/accordion_defaults_deprecated.js b/tests/unit/accordion/accordion_defaults_deprecated.js index bdc059d10..3f45a1f10 100644 --- a/tests/unit/accordion/accordion_defaults_deprecated.js +++ b/tests/unit/accordion/accordion_defaults_deprecated.js @@ -22,6 +22,7 @@ commonWidgetTests( "accordion", { activate: null, beforeActivate: null, change: null, - changestart: null + changestart: null, + create: null } }); diff --git a/tests/unit/autocomplete/autocomplete_defaults.js b/tests/unit/autocomplete/autocomplete_defaults.js index 05897b848..ac83eaea4 100644 --- a/tests/unit/autocomplete/autocomplete_defaults.js +++ b/tests/unit/autocomplete/autocomplete_defaults.js @@ -15,6 +15,7 @@ commonWidgetTests( "autocomplete", { // callbacks change: null, close: null, + create: null, focus: null, open: null, response: null, diff --git a/tests/unit/button/button_defaults.js b/tests/unit/button/button_defaults.js index b81fa7cbb..96c7e5bfa 100644 --- a/tests/unit/button/button_defaults.js +++ b/tests/unit/button/button_defaults.js @@ -1,15 +1,14 @@ -/* - * button_defaults.js - */ +commonWidgetTests( "button", { + defaults: { + disabled: null, + icons: { + primary: null, + secondary: null + }, + label: null, + text: true, -var button_defaults = { - disabled: null, - text: true, - label: null, - icons: { - primary: null, - secondary: null + // callbacks + create: null } -}; - -commonWidgetTests('button', { defaults: button_defaults }); +}); diff --git a/tests/unit/dialog/dialog_defaults.js b/tests/unit/dialog/dialog_defaults.js index 612fd58c8..9f2e4c6a8 100644 --- a/tests/unit/dialog/dialog_defaults.js +++ b/tests/unit/dialog/dialog_defaults.js @@ -1,35 +1,34 @@ -/* - * dialog_defaults.js - */ +commonWidgetTests( "dialog", { + defaults: { + autoOpen: true, + buttons: {}, + closeOnEscape: true, + closeText: 'close', + disabled: false, + dialogClass: '', + draggable: true, + height: 'auto', + hide: null, + maxHeight: false, + maxWidth: false, + minHeight: 150, + minWidth: 150, + modal: false, + position: { + my: 'center', + at: 'center', + of: window, + collision: 'fit', + using: $.ui.dialog.prototype.options.position.using + }, + resizable: true, + show: null, + stack: true, + title: '', + width: 300, + zIndex: 1000, -var dialog_defaults = { - autoOpen: true, - buttons: {}, - closeOnEscape: true, - closeText: 'close', - disabled: false, - dialogClass: '', - draggable: true, - height: 'auto', - hide: null, - maxHeight: false, - maxWidth: false, - minHeight: 150, - minWidth: 150, - modal: false, - position: { - my: 'center', - at: 'center', - of: window, - collision: 'fit', - using: $.ui.dialog.prototype.options.position.using - }, - resizable: true, - show: null, - stack: true, - title: '', - width: 300, - zIndex: 1000 -}; - -commonWidgetTests('dialog', { defaults: dialog_defaults }); + // callbacks + create: null + } +}); diff --git a/tests/unit/dialog/dialog_options.js b/tests/unit/dialog/dialog_options.js index fb8dea775..5705da079 100644 --- a/tests/unit/dialog/dialog_options.js +++ b/tests/unit/dialog/dialog_options.js @@ -180,7 +180,7 @@ test("height", function() { expect(3); el = $('
    ').dialog(); - equals(dlg().height(), dialog_defaults.minHeight, "default height"); + equals(dlg().height(), 150, "default height"); el.remove(); el = $('
    ').dialog({ height: 237 }); @@ -431,7 +431,7 @@ test("width", function() { expect(3); el = $('
    ').dialog(); - equals(dlg().width(), dialog_defaults.width, "default width"); + equals(dlg().width(), 300, "default width"); el.remove(); el = $('
    ').dialog({width: 437 }); diff --git a/tests/unit/menu/menu_defaults.js b/tests/unit/menu/menu_defaults.js index 58122fea2..dd182ca09 100644 --- a/tests/unit/menu/menu_defaults.js +++ b/tests/unit/menu/menu_defaults.js @@ -1,13 +1,12 @@ -/* - * menu_defaults.js - */ +commonWidgetTests( "menu", { + defaults: { + disabled: false, + position: { + my: "left top", + at: "right top" + }, -var menu_defaults = { - disabled: false, - position: { - my: "left top", - at: "right top" + // callbacks + create: null } -}; - -commonWidgetTests('menu', { defaults: menu_defaults }); +}); diff --git a/tests/unit/progressbar/progressbar_defaults.js b/tests/unit/progressbar/progressbar_defaults.js index 925510871..3856e31a0 100644 --- a/tests/unit/progressbar/progressbar_defaults.js +++ b/tests/unit/progressbar/progressbar_defaults.js @@ -1,11 +1,10 @@ -/* - * progressbar_defaults.js - */ +commonWidgetTests( "progressbar", { + defaults: { + disabled: false, + value: 0, + max: 100, -var progressbar_defaults = { - disabled: false, - value: 0, - max: 100 -}; - -commonWidgetTests('progressbar', { defaults: progressbar_defaults }); + //callbacks + create: null + } +}); diff --git a/tests/unit/slider/slider_defaults.js b/tests/unit/slider/slider_defaults.js index 76e5da8ea..03f2a4f8e 100644 --- a/tests/unit/slider/slider_defaults.js +++ b/tests/unit/slider/slider_defaults.js @@ -1,20 +1,19 @@ -/* - * slider_defaults.js - */ +commonWidgetTests( "slider", { + defaults: { + animate: false, + cancel: function() {}, + delay: 0, + disabled: false, + distance: 0, + max: 100, + min: 0, + orientation: 'horizontal', + range: false, + step: 1, + value: 0, + values: null, -var slider_defaults = { - animate: false, - cancel: function() {}, - delay: 0, - disabled: false, - distance: 0, - max: 100, - min: 0, - orientation: 'horizontal', - range: false, - step: 1, - value: 0, - values: null -}; - -commonWidgetTests('slider', { defaults: slider_defaults }); + // callbacks + create: null + } +}); diff --git a/tests/unit/spinner/spinner_defaults.js b/tests/unit/spinner/spinner_defaults.js index 0389ab169..f6081b1f3 100644 --- a/tests/unit/spinner/spinner_defaults.js +++ b/tests/unit/spinner/spinner_defaults.js @@ -1,16 +1,15 @@ -/* - * spinner_defaults.js - */ +commonWidgetTests( "spinner", { + defaults: { + disabled: false, + incremental: true, + max: null, + min: null, + numberformat: null, + page: 10, + step: null, + value: null, -var spinner_defaults = { - disabled: false, - incremental: true, - max: null, - min: null, - numberformat: null, - page: 10, - step: null, - value: null -}; - -commonWidgetTests('spinner', { defaults: spinner_defaults }); + // callbacks + create: null + } +}); diff --git a/tests/unit/tabs/tabs_defaults.js b/tests/unit/tabs/tabs_defaults.js index 0750094e4..52b6f8a71 100644 --- a/tests/unit/tabs/tabs_defaults.js +++ b/tests/unit/tabs/tabs_defaults.js @@ -10,6 +10,7 @@ commonWidgetTests( "tabs", { activate: null, beforeActivate: null, beforeLoad: null, + create: null, load: null } }); diff --git a/tests/unit/tabs/tabs_defaults_deprecated.js b/tests/unit/tabs/tabs_defaults_deprecated.js index 84f7de073..1a56297e9 100644 --- a/tests/unit/tabs/tabs_defaults_deprecated.js +++ b/tests/unit/tabs/tabs_defaults_deprecated.js @@ -18,6 +18,7 @@ commonWidgetTests( "tabs", { add: null, beforeActivate: null, beforeLoad: null, + create: null, disable: null, enable: null, load: null, diff --git a/tests/unit/tooltip/tooltip_defaults.js b/tests/unit/tooltip/tooltip_defaults.js index 419d7a085..c1fc49f1a 100644 --- a/tests/unit/tooltip/tooltip_defaults.js +++ b/tests/unit/tooltip/tooltip_defaults.js @@ -1,16 +1,15 @@ -/* - * tooltip_defaults.js - */ +commonWidgetTests( "tooltip", { + defaults: { + disabled: false, + items: "[title]", + content: $.ui.tooltip.prototype.options.content, + position: { + my: "left center", + at: "right center", + offset: "15 0" + }, -var tooltip_defaults = { - disabled: false, - items: "[title]", - content: $.ui.tooltip.prototype.options.content, - position: { - my: "left center", - at: "right center", - offset: "15 0" + // callbacks + create: null } -}; - -commonWidgetTests('tooltip', { defaults: tooltip_defaults }); +}); diff --git a/tests/unit/widget/widget_core.js b/tests/unit/widget/widget_core.js index 5a6717560..b1c27b104 100644 --- a/tests/unit/widget/widget_core.js +++ b/tests/unit/widget/widget_core.js @@ -202,6 +202,7 @@ test( "merge multiple option arguments", function() { $.widget( "ui.testWidget", { _create: function() { same( this.options, { + create: null, disabled: false, option1: "value1", option2: "value2", @@ -249,6 +250,7 @@ test( "._getCreateOptions()", function() { }, _create: function() { same( this.options, { + create: null, disabled: false, option1: "override1", option2: "value2", @@ -418,6 +420,7 @@ test( ".option() - getter", function() { var options = div.testWidget( "option" ); same( options, { + create: null, disabled: false, foo: "bar", baz: 5, diff --git a/ui/jquery.ui.widget.js b/ui/jquery.ui.widget.js index 27d08ccd2..55b9f7984 100644 --- a/ui/jquery.ui.widget.js +++ b/ui/jquery.ui.widget.js @@ -155,7 +155,10 @@ $.Widget.prototype = { widgetEventPrefix: "", defaultElement: "
    ", options: { - disabled: false + disabled: false, + + // callbacks + create: null }, _createWidget: function( options, element ) { element = $( element || this.defaultElement || this )[ 0 ]; -- cgit v1.2.3 From 60d4e0ae42efd780e6147f981c55bdfeafdfaa54 Mon Sep 17 00:00:00 2001 From: Scott González Date: Wed, 27 Apr 2011 10:42:21 -0400 Subject: Class Animation: Use .attr( "class" ) instead of .attr( "className" ) and adjust the queueing logic for jQuery 1.6 compatibility. Fixes #7275 - $.effects.animateClass broken in jQuery 1.6." --- ui/jquery.effects.core.js | 49 +++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/ui/jquery.effects.core.js b/ui/jquery.effects.core.js index 573cb2554..581fb0861 100644 --- a/ui/jquery.effects.core.js +++ b/ui/jquery.effects.core.js @@ -234,12 +234,12 @@ $.effects.animateClass = function( value, duration, easing, callback ) { easing = null; } - return this.queue( 'fx', function() { + return this.queue(function() { var that = $( this ), originalStyleAttr = that.attr( 'style' ) || ' ', originalStyle = filterStyles( getElementStyles.call( this ) ), newStyle, - className = that.attr( 'className' ); + className = that.attr( 'class' ); $.each( classAnimationActions, function(i, action) { if ( value[ action ] ) { @@ -247,32 +247,31 @@ $.effects.animateClass = function( value, duration, easing, callback ) { } }); newStyle = filterStyles( getElementStyles.call( this ) ); - that.attr( 'className', className ); - - that.animate( styleDifference( originalStyle, newStyle ), duration, easing, function() { - $.each( classAnimationActions, function( i, action ) { - if ( value[ action ] ) { - that[ action + 'Class' ]( value[ action ] ); + that.attr( 'class', className ); + + that.animate( styleDifference( originalStyle, newStyle ), { + queue: false, + duration: duration, + easing: easing, + complete: function() { + $.each( classAnimationActions, function( i, action ) { + if ( value[ action ] ) { + that[ action + 'Class' ]( value[ action ] ); + } + }); + // work around bug in IE by clearing the cssText before setting it + if ( typeof that.attr( 'style' ) == 'object' ) { + that.attr( 'style' ).cssText = ''; + that.attr( 'style' ).cssText = originalStyleAttr; + } else { + that.attr( 'style', originalStyleAttr ); } - }); - // work around bug in IE by clearing the cssText before setting it - if ( typeof that.attr( 'style' ) == 'object' ) { - that.attr( 'style' ).cssText = ''; - that.attr( 'style' ).cssText = originalStyleAttr; - } else { - that.attr( 'style', originalStyleAttr ); - } - if ( callback ) { - callback.apply( this, arguments ); + if ( callback ) { + callback.apply( this, arguments ); + } + $.dequeue( this ); } }); - - // $.animate adds a function to the end of the queue - // but we want it at the front - var queue = $.queue( this ), - anim = queue.splice( queue.length - 1, 1 )[ 0 ]; - queue.splice( 1, 0, anim ); - $.dequeue( this ); }); }; -- cgit v1.2.3 From a1473042b44e2fb1415ad4d996397d315ddb462c Mon Sep 17 00:00:00 2001 From: David Petersen Date: Thu, 28 Apr 2011 09:07:54 -0400 Subject: Tabs: Make sure prototype.url is defined before trying to shim it --- ui/jquery.ui.tabs.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/ui/jquery.ui.tabs.js b/ui/jquery.ui.tabs.js index 82d3f186d..d4ee9984f 100755 --- a/ui/jquery.ui.tabs.js +++ b/ui/jquery.ui.tabs.js @@ -628,6 +628,14 @@ $.extend( $.ui.tabs, { // DEPRECATED if ( $.uiBackCompat !== false ) { + + // url method + (function( $, prototype ) { + prototype.url = function( index, url ) { + this.anchors.eq( index ).attr( "href", url ); + }; + }( jQuery, jQuery.ui.tabs.prototype ) ); + // ajaxOptions and cache options (function( $, prototype ) { $.extend( prototype.options, { @@ -638,7 +646,7 @@ if ( $.uiBackCompat !== false ) { var _create = prototype._create, _setOption = prototype._setOption, _destroy = prototype._destroy, - oldurl = prototype._url; + oldurl = prototype.url || $.noop; $.extend( prototype, { _create: function() { @@ -864,13 +872,6 @@ if ( $.uiBackCompat !== false ) { }; }( jQuery, jQuery.ui.tabs.prototype ) ); - // url method - (function( $, prototype ) { - prototype.url = function( index, url ) { - this.anchors.eq( index ).attr( "href", url ); - }; - }( jQuery, jQuery.ui.tabs.prototype ) ); - // panel ids (idPrefix option + title attribute) (function( $, prototype ) { $.extend( prototype.options, { -- cgit v1.2.3 From abe4c37748628d17627493070abddbd8084b3b36 Mon Sep 17 00:00:00 2001 From: David Petersen Date: Sun, 17 Apr 2011 19:51:45 -0400 Subject: Tabs: simplify disabled logic --- ui/jquery.ui.tabs.js | 86 ++++++++++++++++++++++++---------------------------- 1 file changed, 40 insertions(+), 46 deletions(-) diff --git a/ui/jquery.ui.tabs.js b/ui/jquery.ui.tabs.js index d4ee9984f..f73799f02 100755 --- a/ui/jquery.ui.tabs.js +++ b/ui/jquery.ui.tabs.js @@ -181,14 +181,7 @@ $.widget( "ui.tabs", { this.lis.addClass( "ui-state-default ui-corner-top" ); this.panels.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ); - if ( !options.disabled.length ) { - options.disabled = false; - } - - // disable tabs - for ( var i = 0, li; ( li = this.lis[ i ] ); i++ ) { - $( li ).toggleClass( "ui-state-disabled", $.inArray( i, options.disabled ) !== -1 ); - } + this._setupDisabled( options.disabled ); this._setupEvents( options.event ); @@ -260,6 +253,23 @@ $.widget( "ui.tabs", { .data( "destroy.tabs", true ); }, + _setupDisabled: function( disabled ) { + if ( $.isArray( disabled ) ) { + if ( !disabled.length ) { + disabled = false; + } else if ( disabled.length === this.anchors.length ) { + disabled = true; + } + } + + // disable tabs + for ( var i = 0, li; ( li = this.lis[ i ] ); i++ ) { + $( li ).toggleClass( "ui-state-disabled", ( disabled === true || $.inArray( i, disabled ) !== -1 ) ); + } + + this.options.disabled = disabled; + }, + _setupFx: function( fx ) { // set up animations if ( fx ) { @@ -502,53 +512,37 @@ $.widget( "ui.tabs", { }, enable: function( index ) { + var disabled = this.options.disabled; + if ( index === undefined ) { - for ( var i = 0, len = this.lis.length; i < len; i++ ) { - this.enable( i ); + disabled = false; + } else { + index = this._getIndex( index ); + if ( $.isArray( disabled ) ) { + disabled = $.map( disabled, function( num ) { + return num !== index ? num : null; + }); + } else { + disabled = [ index ]; } - return this; } - index = this._getIndex( index ); - var o = this.options; - if ( !o.disabled || ($.isArray( o.disabled ) && $.inArray( index, o.disabled ) == -1 ) ) { - return; - } - - this.lis.eq( index ).removeClass( "ui-state-disabled" ); - o.disabled = this.lis.map( function( i ) { - return $(this).is( ".ui-state-disabled" ) ? i : null; - }).get(); - - if ( !o.disabled.length ) { - o.disabled = false; - } - - return this; + this._setupDisabled( disabled ); }, disable: function( index ) { + var disabled = this.options.disabled; + if ( index === undefined ) { - for ( var i = 0, len = this.lis.length; i < len; i++ ) { - this.disable( i ); - } - return this; - } - index = this._getIndex( index ); - var o = this.options; - if ( !o.disabled || ($.isArray( o.disabled ) && $.inArray( index, o.disabled ) == -1 ) ) { - this.lis.eq( index ).addClass( "ui-state-disabled" ); - - o.disabled = this.lis.map( function( i ) { - return $(this).is( ".ui-state-disabled" ) ? i : null; - }).get(); - - if ( o.disabled.length === this.anchors.length ) { - o.disabled = true; + disabled = true; + } else { + index = this._getIndex( index ); + if ( $.isArray( disabled ) ) { + disabled = $.merge( [ index ], disabled ).sort(); + } else { + disabled = [ index ]; } - } - - return this; + this._setupDisabled( disabled ); }, load: function( index, event ) { -- cgit v1.2.3 From 0e7769c66958a0f86ffda0209caa4039d96c79b2 Mon Sep 17 00:00:00 2001 From: David Petersen Date: Sun, 17 Apr 2011 21:09:47 -0400 Subject: Tabs: enable/disable handle when current state already matches, fix error when disabled = true and enable gets called --- tests/unit/tabs/tabs_methods.js | 22 ++++++++++++++++++++-- ui/jquery.ui.tabs.js | 10 +++++++++- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/tests/unit/tabs/tabs_methods.js b/tests/unit/tabs/tabs_methods.js index 7c72cd26d..bd28316c5 100644 --- a/tests/unit/tabs/tabs_methods.js +++ b/tests/unit/tabs/tabs_methods.js @@ -18,7 +18,7 @@ test('destroy', function() { }); test('enable', function() { - expect(8); + expect(12); el = $('#tabs1').tabs({ disabled: [ 0, 1 ] }); el.tabs("enable", 1); @@ -31,6 +31,18 @@ test('enable', function() { ok( !$('li.ui-state-disabled', el).length, 'enable all'); same(el.tabs('option', 'disabled'), false, 'update property'); + // enable one tab + el.tabs({ disabled: true }); + el.tabs("enable", 1); + ok( $('li:eq(1)', el).is(':not(.ui-state-disabled)'), 'remove class from li'); + same(el.tabs('option', 'disabled'), [ 0, 2 ], 'update property'); + + // all tabs already enabled + el.tabs({ disabled: false }); + el.tabs("enable", 1); + ok( !$('li.ui-state-disabled', el).length, 'enable all'); + same(el.tabs('option', 'disabled'), false, 'update property'); + el.tabs('destroy'); // enable all tabs one by one el.tabs({ disabled: [ 1, 2 ] }); @@ -43,7 +55,7 @@ test('enable', function() { }); test('disable', function() { - expect(12); + expect(14); // normal el = $('#tabs1').tabs(); @@ -61,6 +73,12 @@ test('disable', function() { same( $('li.ui-state-disabled', el).length, 3, 'disable all'); same(el.tabs('option', 'disabled'), true, 'set to true'); + // all tabs already disabled + el.tabs({ disabled: true }); + el.tabs("disable", 1); + ok( $('li.ui-state-disabled', el).length, 'disable all'); + same(el.tabs('option', 'disabled'), true, 'set to true'); + el.tabs("destroy"); // disable all tabs one by one el.tabs(); diff --git a/ui/jquery.ui.tabs.js b/ui/jquery.ui.tabs.js index f73799f02..5c525b34a 100755 --- a/ui/jquery.ui.tabs.js +++ b/ui/jquery.ui.tabs.js @@ -513,6 +513,9 @@ $.widget( "ui.tabs", { enable: function( index ) { var disabled = this.options.disabled; + if ( disabled === false ) { + return; + } if ( index === undefined ) { disabled = false; @@ -523,7 +526,9 @@ $.widget( "ui.tabs", { return num !== index ? num : null; }); } else { - disabled = [ index ]; + disabled = $.map( this.lis, function( li, num ) { + return num !== index ? num : null; + }); } } this._setupDisabled( disabled ); @@ -531,6 +536,9 @@ $.widget( "ui.tabs", { disable: function( index ) { var disabled = this.options.disabled; + if ( disabled === true ) { + return; + } if ( index === undefined ) { disabled = true; -- cgit v1.2.3 From d819cdd3a92d9d152a33ce6aecbd5cd9737a3ade Mon Sep 17 00:00:00 2001 From: Scott González Date: Thu, 28 Apr 2011 12:04:08 -0400 Subject: Tabs: Fixed disable method and cleaned up tests for enable and disable methods. --- tests/unit/tabs/tabs.html | 35 +++++++++ tests/unit/tabs/tabs_deprecated.html | 35 +++++++++ tests/unit/tabs/tabs_methods.js | 134 ++++++++++++++++------------------- ui/jquery.ui.tabs.js | 3 + 4 files changed, 136 insertions(+), 71 deletions(-) diff --git a/tests/unit/tabs/tabs.html b/tests/unit/tabs/tabs.html index bba0e8a58..3e38f5f25 100644 --- a/tests/unit/tabs/tabs.html +++ b/tests/unit/tabs/tabs.html @@ -46,6 +46,41 @@ }).get(); same( actual, expected ); } + + function tabs_disabled( tabs, state ) { + var expected = $.map( new Array( tabs.find ( ".ui-tabs-nav li" ).length ), function( _, index ) { + if ( typeof state === "boolean" ) { + return state ? 1 : 0; + } else { + return $.inArray( index, state ) !== -1 ? 1 : 0; + } + }); + + var internalState = tabs.tabs( "option", "disabled" ); + if ( internalState === false ) { + internalState = []; + } + if ( internalState === true ) { + internalState = $.map( new Array( tabs.find( ".ui-tabs-nav li" ).length ), function( _, index ) { + return index; + }); + } + + var actual = tabs.find( ".ui-tabs-nav li" ).map(function( index ) { + var tab = $( this ), + tabIsDisabled = tab.hasClass( "ui-state-disabled" ); + + if ( tabIsDisabled && $.inArray( index, internalState ) !== -1 ) { + return 1; + } + if ( !tabIsDisabled && $.inArray( index, internalState ) === -1 ) { + return 0; + } + return -1; // mixed state - invalid + }).get(); + same( tabs.tabs( "option", "disabled" ), state ); + same( actual, expected ); + } -- cgit v1.2.3 From 1bacdec6be7e9d543224c69344041aaccde059c0 Mon Sep 17 00:00:00 2001 From: Scott González Date: Thu, 28 Apr 2011 21:35:04 -0400 Subject: Tabs: Cleaned up add and remove methods. --- tests/unit/tabs/tabs.html | 2 +- tests/unit/tabs/tabs_deprecated.html | 2 +- tests/unit/tabs/tabs_deprecated.js | 103 ++++++++++++++++++++++------------- ui/jquery.ui.tabs.js | 54 ++++++++++-------- 4 files changed, 96 insertions(+), 65 deletions(-) diff --git a/tests/unit/tabs/tabs.html b/tests/unit/tabs/tabs.html index 3e38f5f25..565a0b427 100644 --- a/tests/unit/tabs/tabs.html +++ b/tests/unit/tabs/tabs.html @@ -34,7 +34,7 @@ panel = $( $.ui.tabs.prototype._sanitizeSelector( "#" + tab.find( "a" ).attr( "aria-controls" ) ) ), tabIsActive = tab.hasClass( "ui-state-active" ), - panelIsActive = panel.is( ":visible" ); + panelIsActive = panel.css( "display" ) !== "none"; if ( tabIsActive && panelIsActive ) { return 1; diff --git a/tests/unit/tabs/tabs_deprecated.html b/tests/unit/tabs/tabs_deprecated.html index aae11c33d..e71fea3d4 100644 --- a/tests/unit/tabs/tabs_deprecated.html +++ b/tests/unit/tabs/tabs_deprecated.html @@ -33,7 +33,7 @@ panel = $( $.ui.tabs.prototype._sanitizeSelector( "#" + tab.find( "a" ).attr( "aria-controls" ) ) ), tabIsActive = tab.hasClass( "ui-state-active" ), - panelIsActive = panel.is( ":visible" ); + panelIsActive = panel.css( "display" ) !== "none"; if ( tabIsActive && panelIsActive ) { return 1; diff --git a/tests/unit/tabs/tabs_deprecated.js b/tests/unit/tabs/tabs_deprecated.js index c221868fc..359847d14 100644 --- a/tests/unit/tabs/tabs_deprecated.js +++ b/tests/unit/tabs/tabs_deprecated.js @@ -247,42 +247,78 @@ test('select', function() { equals( evenObj.originalEvent.type, "click", "select triggered by click" ); }); -module("tabs (deprecated): methods"); - -test('add', function() { - expect(4); - - el = $('#tabs1').tabs(); - el.tabs('add', '#new', 'New'); - - var added = $('li:last', el).simulate('mouseover'); - ok(added.is('.ui-state-hover'), 'should add mouseover handler to added tab'); - added.simulate('mouseout'); - var other = $('li:first', el).simulate('mouseover'); - ok(other.is('.ui-state-hover'), 'should not remove mouseover handler from existing tab'); - other.simulate('mouseout'); +module( "tabs (deprecated): methods" ); + +test( "add", function() { + expect( 18 ); + + var element = $( "#tabs1" ).tabs(); + tabs_state( element, 1, 0, 0 ); + + // add without index + element.tabs( "add", "#new", "New" ); + tabs_state( element, 1, 0, 0, 0 ); + var tab = element.find( ".ui-tabs-nav li" ).last(), + anchor = tab.find( "a" ); + equals( tab.text(), "New", "label" ); + equals( anchor.attr( "href" ), "#new", "href" ); + equals( anchor.attr( "aria-controls" ), "new", "aria-controls" ); + ok( !tab.hasClass( "ui-state-hover" ), "not hovered" ); + anchor.simulate( "mouseover" ); + ok( tab.hasClass( "ui-state-hover" ), "hovered" ); + anchor.simulate( "click" ); + tabs_state( element, 0, 0, 0, 1 ); + + // add remote tab with index + element.tabs( "add", "data/test.html", "New Remote", 1 ); + tabs_state( element, 0, 0, 0, 0, 1 ); + tab = element.find( ".ui-tabs-nav li" ).eq( 1 ); + anchor = tab.find( "a" ); + equals( tab.text(), "New Remote", "label" ); + equals( anchor.attr( "href" ), "data/test.html", "href" ); + ok( /^ui-tabs-\d+$/.test( anchor.attr( "aria-controls" ) ), "aria controls" ); + ok( !tab.hasClass( "ui-state-hover" ), "not hovered" ); + anchor.simulate( "mouseover" ); + ok( tab.hasClass( "ui-state-hover" ), "hovered" ); + anchor.simulate( "click" ); + tabs_state( element, 0, 1, 0, 0, 0 ); + + // add to empty tab set + element = $( "
      " ).tabs(); + equals( element.tabs( "option", "active" ), false, "active: false on init" ); + element.tabs( "add", "#first", "First" ); + tabs_state( element, 1 ); + equals( element.tabs( "option", "active" ), 0, "active: 0 after add" ); +}); - equals($('a', added).attr('href'), '#new', 'should not expand href to full url of current page'); +test( "#5069 - ui.tabs.add creates two tab panels when using a full URL", function() { + expect( 2 ); - ok(false, "missing test - untested code is broken code."); + var element = $( "#tabs2" ).tabs(); + equals( element.children( "div" ).length, element.find( ".ui-tabs-nav li" ).length ); + element.tabs( "add", "/new", "New" ); + equals( element.children( "div" ).length, element.find( ".ui-tabs-nav li" ).length ); }); -test('remove', function() { - expect(4); +test( "remove", function() { + expect( 8 ); - el = $('#tabs1').tabs(); + var element = $( "#tabs1" ).tabs({ active: 1 }); + tabs_state( element, 0, 1, 0 ); - el.tabs('remove', 0); - equals(el.tabs('length'), 2, 'remove tab'); - equals($('li a[href$="fragment-1"]', el).length, 0, 'remove associated list item'); - equals($('#fragment-1').length, 0, 'remove associated panel'); + element.tabs( "remove", 1 ); + tabs_state( element, 0, 1 ); + equals( element.tabs( "option", "active" ), 1 ); + equals( element.find( ".ui-tabs-nav li a[href$='fragment-2']" ).length, 0, + "remove correct list item" ); + equals( element.find( "#fragment-2" ).length, 0, "remove correct panel" ); - // TODO delete tab -> focus tab to right - // TODO delete last tab -> focus tab to left + element.tabs( "remove", 1 ); + tabs_state( element, 1 ); + equals( element.tabs( "option", "active"), 0 ); - el.tabs('select', 1); - el.tabs('remove', 1); - equals(el.tabs('option', 'selected'), 0, 'update selected property'); + element.tabs( "remove", 0 ); + equals( element.tabs( "option", "active" ), false ); }); test('select', function() { @@ -314,17 +350,6 @@ test('select', function() { equals(el.tabs('option', 'active'), 1, 'should select tab by id'); }); - -test('#5069 - ui.tabs.add creates two tab panels when using a full URL', function() { - // http://dev.jqueryui.com/ticket/5069 - expect(2); - - el = $('#tabs2').tabs(); - equals(el.children('div').length, el.find('> ul > li').length, 'After creation, number of panels should be equal to number of tabs'); - el.tabs('add', '/ajax_html_echo', 'Test'); - equals(el.children('div').length, el.find('> ul > li').length, 'After add, number of panels should be equal to number of tabs'); -}); - test( "length", function() { expect( 2 ); diff --git a/ui/jquery.ui.tabs.js b/ui/jquery.ui.tabs.js index 490ca71a3..7946cc667 100755 --- a/ui/jquery.ui.tabs.js +++ b/ui/jquery.ui.tabs.js @@ -826,33 +826,39 @@ if ( $.uiBackCompat !== false ) { index = this.anchors.length; } - var self = this, - o = this.options, - $li = $( o.tabTemplate.replace( /#\{href\}/g, url ).replace( /#\{label\}/g, label ) ), - id = !url.indexOf( "#" ) ? url.replace( "#", "" ) : this._tabId( $( "a", $li )[ 0 ] ); + var options = this.options, + li = $( options.tabTemplate + .replace( /#\{href\}/g, url ) + .replace( /#\{label\}/g, label ) ), + id = !url.indexOf( "#" ) ? + url.replace( "#", "" ) : + this._tabId( li.find( "a" )[ 0 ] ); - $li.addClass( "ui-state-default ui-corner-top" ).data( "destroy.tabs", true ); + li.addClass( "ui-state-default ui-corner-top" ).data( "destroy.tabs", true ); + li.find( "a" ).attr( "aria-controls", id ); // try to find an existing element before creating a new one - var $panel = self.element.find( "#" + id ); - if ( !$panel.length ) { - $panel = self._createPanel( id ); + var panel = this.element.find( "#" + id ); + if ( !panel.length ) { + panel = this._createPanel( id ); } - $panel.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ).hide(); + panel.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ).hide(); if ( index >= this.lis.length ) { - $li.appendTo( this.list ); - $panel.appendTo( this.list[ 0 ].parentNode ); + li.appendTo( this.list ); + panel.appendTo( this.list[ 0 ].parentNode ); } else { - $li.insertBefore( this.lis[ index ] ); - $panel.insertBefore( this.panels[ index ] ); + li.insertBefore( this.lis[ index ] ); + panel.insertBefore( this.panels[ index ] ); } - - o.disabled = $.map( o.disabled, function( n, i ) { + options.disabled = $.map( options.disabled, function( n ) { return n >= index ? ++n : n; }); this.refresh(); + if ( this.lis.length === 1 && options.active === false ) { + this.option( "active", 0 ); + } this._trigger( "add", null, this._ui( this.anchors[ index ], this.panels[ index ] ) ); return this; @@ -860,27 +866,27 @@ if ( $.uiBackCompat !== false ) { prototype.remove = function( index ) { index = this._getIndex( index ); - var o = this.options, - $li = this.lis.eq( index ).remove(), - $panel = this.panels.eq( index ).remove(); + var options = this.options, + tab = this.lis.eq( index ).remove(), + panel = this.panels.eq( index ).remove(); // If selected tab was removed focus tab to the right or // in case the last tab was removed the tab to the left. - if ( $li.hasClass( "ui-tabs-active" ) && this.anchors.length > 1) { + if ( tab.hasClass( "ui-tabs-active" ) && this.anchors.length > 1) { this._activate( index + ( index + 1 < this.anchors.length ? 1 : -1 ) ); } - o.disabled = $.map( - $.grep( o.disabled, function(n, i) { - return n != index; + options.disabled = $.map( + $.grep( options.disabled, function( n ) { + return n !== index; }), - function( n, i ) { + function( n ) { return n >= index ? --n : n; }); this.refresh(); - this._trigger( "remove", null, this._ui( $li.find( "a" )[ 0 ], $panel[ 0 ] ) ); + this._trigger( "remove", null, this._ui( tab.find( "a" )[ 0 ], panel[ 0 ] ) ); return this; }; }( jQuery, jQuery.ui.tabs.prototype ) ); -- cgit v1.2.3 From 468e66ae62026a4a8c2be9c06222decbbcde4285 Mon Sep 17 00:00:00 2001 From: Scott González Date: Thu, 28 Apr 2011 22:12:59 -0400 Subject: Tabs: Added tests for add and remove events. --- tests/unit/tabs/tabs_deprecated.js | 53 +++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/tests/unit/tabs/tabs_deprecated.js b/tests/unit/tabs/tabs_deprecated.js index 359847d14..25877e69c 100644 --- a/tests/unit/tabs/tabs_deprecated.js +++ b/tests/unit/tabs/tabs_deprecated.js @@ -187,25 +187,6 @@ test('disable', function() { equals(uiObj.index, 1, 'contain index'); }); -test('add', function() { - - // TODO move to methods, not at all event related... - - var el = $('
        ').tabs(); - equals(el.tabs('option', 'selected'), -1, 'Initially empty, no selected tab'); - - el.tabs('add', '#test1', 'Test 1'); - equals(el.tabs('option', 'selected'), 0, 'First tab added should be auto selected'); - - el.tabs('add', '#test2', 'Test 2'); - equals(el.tabs('option', 'selected'), 0, 'Second tab added should not be auto selected'); - -}); - -test('remove', function() { - ok(false, "missing test - untested code is broken code."); -}); - test('show', function() { expect(5); @@ -250,12 +231,17 @@ test('select', function() { module( "tabs (deprecated): methods" ); test( "add", function() { - expect( 18 ); + expect( 27 ); var element = $( "#tabs1" ).tabs(); tabs_state( element, 1, 0, 0 ); // add without index + element.one( "tabsadd", function( event, ui ) { + equal( ui.index, 3, "ui.index" ); + equal( $( ui.tab ).text(), "New", "ui.tab" ); + equal( ui.panel.id, "new", "ui.panel" ); + }); element.tabs( "add", "#new", "New" ); tabs_state( element, 1, 0, 0, 0 ); var tab = element.find( ".ui-tabs-nav li" ).last(), @@ -270,6 +256,11 @@ test( "add", function() { tabs_state( element, 0, 0, 0, 1 ); // add remote tab with index + element.one( "tabsadd", function( event, ui ) { + equal( ui.index, 1, "ui.index" ); + equal( $( ui.tab ).text(), "New Remote", "ui.tab" ); + equal( ui.panel.id, $( ui.tab ).attr( "aria-controls" ), "ui.panel" ); + }); element.tabs( "add", "data/test.html", "New Remote", 1 ); tabs_state( element, 0, 0, 0, 0, 1 ); tab = element.find( ".ui-tabs-nav li" ).eq( 1 ); @@ -286,6 +277,11 @@ test( "add", function() { // add to empty tab set element = $( "
          " ).tabs(); equals( element.tabs( "option", "active" ), false, "active: false on init" ); + element.one( "tabsadd", function( event, ui ) { + equal( ui.index, 0, "ui.index" ); + equal( $( ui.tab ).text(), "First", "ui.tab" ); + equal( ui.panel.id, "first", "ui.panel" ); + }); element.tabs( "add", "#first", "First" ); tabs_state( element, 1 ); equals( element.tabs( "option", "active" ), 0, "active: 0 after add" ); @@ -301,11 +297,16 @@ test( "#5069 - ui.tabs.add creates two tab panels when using a full URL", functi }); test( "remove", function() { - expect( 8 ); + expect( 17 ); var element = $( "#tabs1" ).tabs({ active: 1 }); tabs_state( element, 0, 1, 0 ); + element.one( "tabsremove", function( event, ui ) { + equal( ui.index, -1, "ui.index" ); + equal( $( ui.tab ).text(), "2", "ui.tab" ); + equal( ui.panel.id, "fragment-2", "ui.panel" ); + }); element.tabs( "remove", 1 ); tabs_state( element, 0, 1 ); equals( element.tabs( "option", "active" ), 1 ); @@ -313,10 +314,20 @@ test( "remove", function() { "remove correct list item" ); equals( element.find( "#fragment-2" ).length, 0, "remove correct panel" ); + element.one( "tabsremove", function( event, ui ) { + equal( ui.index, -1, "ui.index" ); + equal( $( ui.tab ).text(), "3", "ui.tab" ); + equal( ui.panel.id, "fragment-3", "ui.panel" ); + }); element.tabs( "remove", 1 ); tabs_state( element, 1 ); equals( element.tabs( "option", "active"), 0 ); + element.one( "tabsremove", function( event, ui ) { + equal( ui.index, -1, "ui.index" ); + equal( $( ui.tab ).text(), "1", "ui.tab" ); + equal( ui.panel.id, "fragment-1", "ui.panel" ); + }); element.tabs( "remove", 0 ); equals( element.tabs( "option", "active" ), false ); }); -- cgit v1.2.3 From 5058ac3ce7a45c5823f4c108b0ae3ae45346d0f8 Mon Sep 17 00:00:00 2001 From: Richard Worth Date: Fri, 29 Apr 2011 07:00:58 -0400 Subject: Resizable: switch data: background image to valid image file, small 1px transparent gif. Fixed #7293 - Resizable: Chrome dev tools console shows GET data: undefined (undefined) --- themes/base/jquery.ui.resizable.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/themes/base/jquery.ui.resizable.css b/themes/base/jquery.ui.resizable.css index 05f855a71..2c1de870e 100644 --- a/themes/base/jquery.ui.resizable.css +++ b/themes/base/jquery.ui.resizable.css @@ -12,7 +12,7 @@ /* http://bugs.jqueryui.com/ticket/7233 - Resizable: resizable handles fail to work in IE if transparent and content overlaps */ - background-image:url(data:); + background-image:url(data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=); } .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } -- cgit v1.2.3 From fe3b36b8efcabf3d1f1d60523cae87c69a882f27 Mon Sep 17 00:00:00 2001 From: adambaratz Date: Fri, 15 Apr 2011 07:51:56 -0700 Subject: Core: reuse tabindex value. Fixed #7257 - optimize :tabbable. --- ui/jquery.ui.core.js | 46 +++++++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/ui/jquery.ui.core.js b/ui/jquery.ui.core.js index 51f6b71d7..8bcc4c441 100644 --- a/ui/jquery.ui.core.js +++ b/ui/jquery.ui.core.js @@ -174,6 +174,27 @@ $.each( [ "Width", "Height" ], function( i, name ) { }); // selectors +function focusable( element, isTabIndexNotNaN ) { + var nodeName = element.nodeName.toLowerCase(); + if ( "area" === nodeName ) { + var map = element.parentNode, + mapName = map.name, + img; + if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { + return false; + } + img = $( "img[usemap=#" + mapName + "]" )[0]; + return !!img && visible( img ); + } + return ( /input|select|textarea|button|object/.test( nodeName ) + ? !element.disabled + : "a" == nodeName + ? element.href || isTabIndexNotNaN + : isTabIndexNotNaN) + // the element and all of its ancestors must be visible + && visible( element ); +} + function visible( element ) { return !$( element ).parents().andSelf().filter(function() { return $.curCSS( this, "visibility" ) === "hidden" || @@ -187,30 +208,13 @@ $.extend( $.expr[ ":" ], { }, focusable: function( element ) { - var nodeName = element.nodeName.toLowerCase(), - tabIndex = $.attr( element, "tabindex" ); - if ( "area" === nodeName ) { - var map = element.parentNode, - mapName = map.name, - img; - if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { - return false; - } - img = $( "img[usemap=#" + mapName + "]" )[0]; - return !!img && visible( img ); - } - return ( /input|select|textarea|button|object/.test( nodeName ) - ? !element.disabled - : "a" == nodeName - ? element.href || !isNaN( tabIndex ) - : !isNaN( tabIndex )) - // the element and all of its ancestors must be visible - && visible( element ); + return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) ); }, tabbable: function( element ) { - var tabIndex = $.attr( element, "tabindex" ); - return ( isNaN( tabIndex ) || tabIndex >= 0 ) && $( element ).is( ":focusable" ); + var tabIndex = $.attr( element, "tabindex" ), + isTabIndexNaN = isNaN( tabIndex ); + return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN ); } }); -- cgit v1.2.3 From f270d48786186569a2878d4adf0fe670fcbf2cad Mon Sep 17 00:00:00 2001 From: Jörn Zaefferer Date: Mon, 2 May 2011 12:34:26 +0200 Subject: Tooltip: Add video player demo --- demos/tooltip/index.html | 2 +- demos/tooltip/video-player.html | 91 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 demos/tooltip/video-player.html diff --git a/demos/tooltip/index.html b/demos/tooltip/index.html index 3563350c5..4ad189ed2 100644 --- a/demos/tooltip/index.html +++ b/demos/tooltip/index.html @@ -14,7 +14,7 @@
        • Track the mouse
        • Custom animation
        • Delegation Mixbag
        • -
        • Lots
        • +
        • Video Player
        • diff --git a/demos/tooltip/video-player.html b/demos/tooltip/video-player.html new file mode 100644 index 000000000..0c251ea83 --- /dev/null +++ b/demos/tooltip/video-player.html @@ -0,0 +1,91 @@ + + + + jQuery UI Tooltip - Video Player demo + + + + + + + + + + + + + + + +
          + +
          Here Be Video (HTML5?)
          +
          + + + + + + + + + + + +
          +
          + +
          + + + +
          + +

          A fake video player with like/share/stats button, each with a tooltip.

          + +
          + + + + + -- cgit v1.2.3 From 0f24c5a5c99d8ad0b1cff0d613fe71a3d5f418b0 Mon Sep 17 00:00:00 2001 From: Jörn Zaefferer Date: Mon, 2 May 2011 12:42:45 +0200 Subject: Tooltip: Custom styles for video player demo --- demos/tooltip/video-player.html | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/demos/tooltip/video-player.html b/demos/tooltip/video-player.html index 0c251ea83..bf11692c5 100644 --- a/demos/tooltip/video-player.html +++ b/demos/tooltip/video-player.html @@ -43,6 +43,12 @@ .player { width: 500px; height: 300px; border: 2px groove gray; background: rgb(200, 200, 200); text-align: center; line-height: 300px; } /* TODO load from jquery.ui.popup.css */ .ui-popup { position: absolute; z-index: 5000; } + + .ui-tooltip { + border: 1px solid white; + background: rgba(20, 20, 20, 1); + color: white; + } -- cgit v1.2.3 From 0c674ca7e35b84bc2c34ce47acd83dc7441bea35 Mon Sep 17 00:00:00 2001 From: Jörn Zaefferer Date: Mon, 2 May 2011 13:01:27 +0200 Subject: Tooltip: Update demo description --- demos/tooltip/video-player.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/tooltip/video-player.html b/demos/tooltip/video-player.html index bf11692c5..9af1c8b10 100644 --- a/demos/tooltip/video-player.html +++ b/demos/tooltip/video-player.html @@ -87,7 +87,7 @@
          -

          A fake video player with like/share/stats button, each with a tooltip.

          +

          A fake video player with like/share/stats button, each with a custom-styled tooltip.

          -- cgit v1.2.3