<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>musings of Aamir Afridi</title>
	<atom:link href="http://aamirafridi.com/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://aamirafridi.com/blog</link>
	<description></description>
	<lastBuildDate>Thu, 05 Aug 2010 10:34:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>jQuery-ui Scrollable tabs plugin</title>
		<link>http://aamirafridi.com/blog/jquery/jquery-scrollable-tabs</link>
		<comments>http://aamirafridi.com/blog/jquery/jquery-scrollable-tabs#comments</comments>
		<pubDate>Thu, 08 Jul 2010 13:29:00 +0000</pubDate>
		<dc:creator>Aamir Afridi</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[carousel]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jquery-ui]]></category>
		<category><![CDATA[scrollable]]></category>
		<category><![CDATA[scrollto]]></category>
		<category><![CDATA[tabs]]></category>

		<guid isPermaLink="false">http://aamirafridi.com/blog/?p=1</guid>
		<description><![CDATA[Share Problem: jQuery UI tabs is one of my favorite jquery plugin I use in most of my projects. It is so simple to use and it degrade gracefully. It has some very nice features and the events are really helpful. However while I was working on a project where all the tabs contents are [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:right;"><div class="socialize-in-button-right"><script type="text/javascript">
			<!-- 
			tweetmeme_url = "http://aamirafridi.com/blog/jquery/jquery-scrollable-tabs";
			tweetmeme_source = "tweetmeme";
			//-->
		</script>
		<script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div><div class="socialize-in-button-right"><a name="fb_share" type="box_count" share_url="http://aamirafridi.com/blog/jquery/jquery-scrollable-tabs" href="http://www.facebook.com/sharer.php">Share</a><script src="http://static.ak.fbcdn.net/connect.php/js/FB.Share" type="text/javascript"></script></div></div><p></p>
<h3>Problem:</h3>
<p>
<a href="http://jqueryui.com/demos/tabs" target="jquery">jQuery UI tabs</a> is one of my favorite jquery plugin I use in most of my projects. It is so simple to use and it degrade gracefully. It has some very nice features and the events are really helpful.
</p>
<p>
However while I was working on a project where all the tabs contents are dynamic i.e user perform a search and than the results will be grouped up in tabs but the problem was that you never know how many tabs do i need as it can be just 1 or it can be 50. The problem is that you should know the number of tabs so you can give a width to the wrapper so all tabs can fit in one row.
</p>
<p>
Unfortunately in my case I could not use it because I cannot give the wrapper a width of like 1000px for many tabs. If you give the wrapper a fixed width, the tabs will try to adjust it self in as many rows as it can to adjust all the tabs, something like this:
</p>
<pre name="code" class="js">
//jQuery ui tabs
$('#example_1').tabs();
</pre>
<p>
<a class="ui-state-default ui-corner-all" id="addTab_1" href="#" style="padding:6px 6px 6px 17px;text-decoration:none;position:relative"><span class="ui-icon ui-icon-plus" style="position:absolute;top:4px;left:1px"></span>Add new tab</a></p>
<div id="example_1" class="tabs">
<ul style="margin:0px !important">
<li><a href="#tabs-1">Tab 1</a></li>
<li><a href="#tabs-2">This is tab 2</a></li>
<li><a href="#tabs-3">This is tab number 3</a></li>
<li><a href="#tabs-4">Tab no 4</a></li>
<li><a href="#tabs-5">And tab number 5</a></li>
<li><a href="#tabs-6">Tab number 6</a></li>
<li><a href="#tabs-7">And last tab number 7</a></li>
</ul>
<div id="tabs-1">Tab 1<br />Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque hendrerit vulputate porttitor. Fusce purus leo, faucibus a sagittis congue, molestie tempus felis. Donec convallis semper enim, varius sagittis eros imperdiet in. Vivamus semper sem at metus mattis a aliquam neque ornare. Proin sed semper lacus.</div>
<div id="tabs-2">This is tab 2<br />Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque hendrerit vulputate porttitor. Fusce purus leo, faucibus a sagittis congue, molestie tempus felis. Donec convallis semper enim, varius sagittis eros imperdiet in. Vivamus semper sem at metus mattis a aliquam neque ornare. Proin sed semper lacus.</div>
<div id="tabs-3">This is tab number 3<br />Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque hendrerit vulputate porttitor. Fusce purus leo, faucibus a sagittis congue, molestie tempus felis. Donec convallis semper enim, varius sagittis eros imperdiet in. Vivamus semper sem at metus mattis a aliquam neque ornare. Proin sed semper lacus.</div>
<div id="tabs-4">Tab no 4<br />Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque hendrerit vulputate porttitor. Fusce purus leo, faucibus a sagittis congue, molestie tempus felis. Donec convallis semper enim, varius sagittis eros imperdiet in. Vivamus semper sem at metus mattis a aliquam neque ornare. Proin sed semper lacus.</div>
<div id="tabs-5">And this is the tab number 5<br />Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque hendrerit vulputate porttitor. Fusce purus leo, faucibus a sagittis congue, molestie tempus felis. Donec convallis semper enim, varius sagittis eros imperdiet in. Vivamus semper sem at metus mattis a aliquam neque ornare. Proin sed semper lacus.</div>
<div id="tabs-6">Tab number 6<br />Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque hendrerit vulputate porttitor. Fusce purus leo, faucibus a sagittis congue, molestie tempus felis. Donec convallis semper enim, varius sagittis eros imperdiet in. Vivamus semper sem at metus mattis a aliquam neque ornare. Proin sed semper lacus.</div>
<div id="tabs-7">And last tab number 7<br />Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque hendrerit vulputate porttitor. Fusce purus leo, faucibus a sagittis congue, molestie tempus felis. Donec convallis semper enim, varius sagittis eros imperdiet in. Vivamus semper sem at metus mattis a aliquam neque ornare. Proin sed semper lacus.</div>
</div>
<p></p>
<h3>Googling:</h3>
<p>
I searched google to find what should I do to solve this problem. The perfect solution would be to arrange the tabs in a way all the browsers handles them specially <a href="http://www.mozilla.com/en-US/firefox/firefox.html" target="_blank">Firefox</a>. If there is one tab, don&#8217;t show the &#8216;Close tab&#8217; button, if you have many than show two small arrows on the left and right of the tabs bar so that user can scroll through the tabs in either direction.
</p>
<p>
After spending alot of time on googling the solution, I did not found any proper solution. Though I found two plugins which was some how what I was looking for:</p>
<ol>
<li> <a href="http://extjswordpress.net/ext-2.2/examples/tabs/tabs-adv.html" target="_blank">JSExt advanced tabs</a>: Very simple interface and exactly what i was looking for but sadly it was not based on jQuery and I will never want to include a whole new JS library to solve this problem as I was already using jQuery, jQuery-ui and Openlayers in my project. So I drop the idea to use this plugin.</li>
<li><a href="http://www.seyfertdesign.com/jquery/ui.tabs.paging.html" target="_blank">jQuery tabs paging</a>: When I found this plugin I felt happy as it is based on jQuery and jQuery-ui. The problem was that it uses window.resize event to adjust tabs in one row and also its not very flexible in terms of options and I don&#8217;t like to mess up with others code to achieve what I want. So unfortunately I dropped this idea too.</li>
</ol>
<h3>Solution:</h3>
<p>Finally I gave up and decided to create my own plugin as while googling a lot of people were looking for the solution of this exact same problem. And here is what I came up with:
</p>
<pre name="code" class="js">
//jQuery ui scrollable tabs
$('#tabs').tabs().scrollabletab();
</pre>
<p>
<a class="ui-state-default ui-corner-all" id="addTab_2" href="#" style="padding:6px 6px 6px 17px;text-decoration:none;position:relative"><span class="ui-icon ui-icon-plus" style="position:absolute;top:4px;left:1px"></span>Add new tab</a></p>
<div id="example_2" class="tabs">
<ul style="margin:0px !important">
<li><a href="#tabs-1-2">Tab 1</a></li>
<li><a href="#tabs-2-2">This is tab 2</a></li>
<li><a href="#tabs-3-2">This is tab number 3</a></li>
<li><a href="#tabs-4-2">Tab no 4</a></li>
<li><a href="#tabs-5-2">And tab number 5</a></li>
<li><a href="#tabs-6-2">Tab number 6</a></li>
<li><a href="#tabs-7-2">And last tab number 7</a></li>
</ul>
<div id="tabs-1-2">Tab 1<br />Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque hendrerit vulputate porttitor. Fusce purus leo, faucibus a sagittis congue, molestie tempus felis. Donec convallis semper enim, varius sagittis eros imperdiet in. Vivamus semper sem at metus mattis a aliquam neque ornare. Proin sed semper lacus.</div>
<div id="tabs-2-2">This is tab 2<br />Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque hendrerit vulputate porttitor. Fusce purus leo, faucibus a sagittis congue, molestie tempus felis. Donec convallis semper enim, varius sagittis eros imperdiet in. Vivamus semper sem at metus mattis a aliquam neque ornare. Proin sed semper lacus.</div>
<div id="tabs-3-2">This is tab number 3<br />Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque hendrerit vulputate porttitor. Fusce purus leo, faucibus a sagittis congue, molestie tempus felis. Donec convallis semper enim, varius sagittis eros imperdiet in. Vivamus semper sem at metus mattis a aliquam neque ornare. Proin sed semper lacus.</div>
<div id="tabs-4-2">Tab no 4<br />Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque hendrerit vulputate porttitor. Fusce purus leo, faucibus a sagittis congue, molestie tempus felis. Donec convallis semper enim, varius sagittis eros imperdiet in. Vivamus semper sem at metus mattis a aliquam neque ornare. Proin sed semper lacus.</div>
<div id="tabs-5-2">And this is the tab number 5<br />Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque hendrerit vulputate porttitor. Fusce purus leo, faucibus a sagittis congue, molestie tempus felis. Donec convallis semper enim, varius sagittis eros imperdiet in. Vivamus semper sem at metus mattis a aliquam neque ornare. Proin sed semper lacus.</div>
<div id="tabs-6-2">Tab number 6<br />Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque hendrerit vulputate porttitor. Fusce purus leo, faucibus a sagittis congue, molestie tempus felis. Donec convallis semper enim, varius sagittis eros imperdiet in. Vivamus semper sem at metus mattis a aliquam neque ornare. Proin sed semper lacus.</div>
<div id="tabs-7-2">And last tab number 7<br />Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque hendrerit vulputate porttitor. Fusce purus leo, faucibus a sagittis congue, molestie tempus felis. Donec convallis semper enim, varius sagittis eros imperdiet in. Vivamus semper sem at metus mattis a aliquam neque ornare. Proin sed semper lacus.</div>
</div>
<p></p>
<h3> Documentation, demo and downloads:</h3>
<p>I have created a separate page for this plugin where you can find the details of plugin and its options.<br />
<a href="http://jquery.aamirafridi.com/jst" target="jst">http://jquery.aamirafridi.com/jst</a>
</p>
<h4>Note:</h4>
<p>I will appreciate and credit if somebody can spend sometime on the overflow issue of tabs in IE6.</p>
<link type="text/css" href="http://jquery.aamirafridi.com/jst/css/ui-lightness/jquery-ui-1.7.2.custom.css" rel="stylesheet"><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-ui.min.js"></script><script type="text/javascript" src="http://jquery.aamirafridi.com/jst/js/jquery.scrollabletab.js"></script><script type="text/javascript" src="http://jquery.aamirafridi.com/jst/js/jquery.init-for-blog.js"></script><br />
<style>
#addTab_1, #addTab_2, .tabs {font-size: 12px;font-family:"Helvetica Neue",HelveticaNeue,Helvetica,sans-serif;}</style>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Faamirafridi.com%2Fblog%2Fjquery%2Fjquery-scrollable-tabs&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:80px"></iframe>]]></content:encoded>
			<wfw:commentRss>http://aamirafridi.com/blog/jquery/jquery-scrollable-tabs/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
