aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Petersen <public@petersendidit.com>2011-04-17 21:09:47 -0400
committerScott González <scott.gonzalez@gmail.com>2011-04-28 09:37:56 -0400
commit0e7769c66958a0f86ffda0209caa4039d96c79b2 (patch)
tree8684775829fa724f21bd0ce322d5ed880f261135
parentabe4c37748628d17627493070abddbd8084b3b36 (diff)
downloadjquery-ui-0e7769c66958a0f86ffda0209caa4039d96c79b2.tar.gz
jquery-ui-0e7769c66958a0f86ffda0209caa4039d96c79b2.zip
Tabs: enable/disable handle when current state already matches, fix error when disabled = true and enable gets called
-rw-r--r--tests/unit/tabs/tabs_methods.js22
-rwxr-xr-xui/jquery.ui.tabs.js10
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;
umber.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
<!doctype html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title>jQuery UI Selectmenu - Custom Rendering</title>
	<link rel="stylesheet" href="../../themes/base/all.css">
	<link rel="stylesheet" href="../demos.css">
	<script src="../../external/requirejs/require.js"></script>
	<script src="../bootstrap.js">
		$.widget( "custom.iconselectmenu", $.ui.selectmenu, {
			_renderItem: function( ul, item ) {
				var li = $( "<li>" ),
					wrapper = $( "<div>", { text: item.label } );

				if ( item.disabled ) {
					li.addClass( "ui-state-disabled" );
				}

				$( "<span>", {
					style: item.element.attr( "data-style" ),
					"class": "ui-icon " + item.element.attr( "data-class" )
				})
					.appendTo( wrapper );

				return li.append( wrapper ).appendTo( ul );
			}
		});

		$( "#filesA" )
			.iconselectmenu()
			.iconselectmenu( "menuWidget" )
				.addClass( "ui-menu-icons" );

		$( "#filesB" )
			.iconselectmenu()
			.iconselectmenu( "menuWidget" )
				.addClass( "ui-menu-icons customicons" );

		$( "#people" )
			.iconselectmenu()
			.iconselectmenu( "menuWidget")
				.addClass( "ui-menu-icons avatar" );
	</script>
	<style>
		h2 {
			margin: 30px 0 0 0
		}
		fieldset {
			border: 0;
		}
		label {
			display: block;
		}

		/* select with custom icons */
		.ui-selectmenu-menu .ui-menu.customicons .ui-menu-item-wrapper {
			padding: 0.5em 0 0.5em 3em;
		}
		.ui-selectmenu-menu .ui-menu.customicons .ui-menu-item .ui-icon {
			height: 24px;
			width: 24px;
			top: 0.1em;
		}
		.ui-icon.video {
			background: url("images/24-video-square.png") 0 0 no-repeat;
		}
		.ui-icon.podcast {
			background: url("images/24-podcast-square.png") 0 0 no-repeat;
		}
		.ui-icon.rss {
			background: url("images/24-rss-square.png") 0 0 no-repeat;
		}

		/* select with CSS avatar icons */
		option.avatar {
			background-repeat: no-repeat !important;
			padding-left: 20px;
		}
		.avatar .ui-icon {
			background-position: left top;
		}
	</style>
</head>
<body>

<div class="demo">

<form action="#">
	<h2>Selectmenu with framework icons</h2>
	<fieldset>
		<label for="filesA">Select a File:</label>
		<select name="filesA" id="filesA">
			<option value="jquery" data-class="ui-icon-script">jQuery.js</option>
			<option value="jquerylogo" data-class="ui-icon-image">jQuery Logo</option>
			<option value="jqueryui" data-class="ui-icon-script">ui.jQuery.js</option>
			<option value="jqueryuilogo" selected="selected" data-class="ui-icon-image">jQuery UI Logo</option>
			<option value="somefile" disabled="disabled" data-class="ui-icon-help">Some unknown file</option>
		</select>
	</fieldset>

	<h2>Selectmenu with custom icon images</h2>
	<fieldset>
		<label for="filesB">Select a podcast:</label>
		<select name="filesB" id="filesB">
			<option value="mypodcast" data-class="podcast">John Resig Podcast</option>
			<option value="myvideo" data-class="video">Scott González Video</option>
			<option value="myrss" data-class="rss">jQuery RSS XML</option>
		</select>
	</fieldset>

	<h2>Selectmenu with custom avatar 16x16 images as CSS background</h2>
	<fieldset>
		<label for="people">Select a Person:</label>
		<select name="people" id="people">
			<option value="1" data-class="avatar" data-style="background-image: url('http://www.gravatar.com/avatar/b3e04a46e85ad3e165d66f5d927eb609?d=monsterid&amp;r=g&amp;s=16');">John Resig</option>
			<option value="2" data-class="avatar" data-style="background-image: url('http://www.gravatar.com/avatar/e42b1e5c7cfd2be0933e696e292a4d5f?d=monsterid&amp;r=g&amp;s=16');">Tauren Mills</option>
			<option value="3" data-class="avatar" data-style="background-image: url('http://www.gravatar.com/avatar/bdeaec11dd663f26fa58ced0eb7facc8?d=monsterid&amp;r=g&amp;s=16');">Jane Doe</option>
		</select>
	</fieldset>
</form>

</div>

<div class="demo-description">
<p>The whole rendering process is extendable to make custom styling as easy as possible.</p>
</div>
</body>
</html>