<?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>The Sea of Ideas &#187; jQuery UI</title>
	<atom:link href="http://paulbakaus.com/tag/jquery-ui/feed/" rel="self" type="application/rss+xml" />
	<link>http://paulbakaus.com</link>
	<description>The personal blog of Paul Bakaus</description>
	<lastBuildDate>Mon, 19 Jul 2010 12:47:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=3.0-alpha</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Underestimated UI techniques: Morphing</title>
		<link>http://paulbakaus.com/2009/10/08/underestimated-ui-techniques-morphing/</link>
		<comments>http://paulbakaus.com/2009/10/08/underestimated-ui-techniques-morphing/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 14:38:02 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[patterns]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://paulbakaus.com/?p=251</guid>
		<description><![CDATA[When I design new applications, I realized I use a couple patterns that I haven&#8217;t seen in much use elsewhere, so I&#8217;ll start to blog about them. The first pattern in this series is called morphing.
What is morphing?
Morphing essentially describes a state change on an element, transforming it into another. Many UI frameworks have helpers [...]]]></description>
			<content:encoded><![CDATA[<p>When I design new applications, I realized I use a couple patterns that I haven&#8217;t seen in much use elsewhere, so I&#8217;ll start to blog about them. The first pattern in this series is called morphing.</p>
<h3>What is morphing?</h3>
<div id="attachment_253" class="wp-caption alignleft" style="width: 310px"><a href="http://paulbakaus.com/wp-content/uploads/2009/10/bush-obama-morphing.jpg"><img src="http://paulbakaus.com/wp-content/uploads/2009/10/bush-obama-morphing-300x72.jpg" alt="Bush-Obama morphing" title="bush-obama-morphing" width="300" height="72" class="size-medium wp-image-253" /></a><p class="wp-caption-text">Bush-Obama morphing</p></div>
<p>Morphing essentially describes a state change on an element, transforming it into another. Many UI frameworks have helpers for morphing, usually in the form of class animations. jQuery UI has made it transparent to animate jQuery&#8217;s class manipulation functions like <a href="http://jqueryui.com/demos/addClass/">addClass</a>, script.aculo.us has Effect.morph which essentially <a href="http://wiki.github.com/madrobby/scriptaculous/effect-morph">does the same</a>.</p>
<h3>Why is it useful?</h3>
<p>From a higher level UI perspective, morphing really describes that one element becomes another based on the context. It is essentially very powerful because it gives your users a visual cue what is happening, how is happening and why it is happening. Instead of doing an instant change, the users eye can follow the motion and you therefore give them a better feeling of control over the whole situation.</p>
<h3>Show me!</h3>
<p>Let&#8217;s do an example. While working on smart.fm&#8217;s new item builder, I had to visualize the following steps: Clicking on a button to add text, then displaying a text input, and hiding the button since you cannot add text twice. Usually, it would roughly look like this:</p>
<div class="canvas" style="padding: 10px; margin: 5px; border: 1px solid #eee; position: relative; height: 80px;">
<button class="ui-state-default ui-corner-all" style="position: absolute; top: 40px; left: 20px;" onclick="jQuery(this).hide().parent().find('input').show()[0].focus(); ">Hit me!</button></p>
<input type="text" style="position: absolute; top: 40px; left: 140px; display: none;"  />
</div>
<p>However, with morphing, it not only looks hot but solves the issue in style:</p>
<div class="canvas" style="padding: 10px; margin: 5px; border: 1px solid #eee; position: relative; height: 80px;">
<div class="ui-state-default ui-corner-all" style="position: absolute; top: 40px; left: 20px; padding: 2px 6px 3px 6px;" onclick="jQuery(this).animate({ left: 140, background: '#fff', width: 100 }, 1000); jQuery('input', this).animate({ opacity: 'show' }, 1000)[0].focus();">Hit me!<br />
<input type="text" style="position: absolute; top: -1px; left: 4px; display: none; width: 100px; border: 1px solid black;"  /></div>
</div>
<p>This was a particularly lazy example, since it doesn&#8217;t even truly morph one item into another &#8211; it just animates the width of the button and fades in the input on top. But visually, the element clearly transforms.</p>
<h3>Morphing in the wild: Inline editing</h3>
<p>One technique that was is heavily inspired by morphing is inline editing. Essentially, you click on a paragraph or element, and it transforms into and editable element. Most solutions don&#8217;t actually morph, but you get the idea. There are thousands of other usecases out there waiting to be discovered, and if you have some, I&#8217;d love it of you share them with me!</p>
]]></content:encoded>
			<wfw:commentRss>http://paulbakaus.com/2009/10/08/underestimated-ui-techniques-morphing/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>The technique behind the jQuery UI demos</title>
		<link>http://paulbakaus.com/2009/01/01/the-technique-behind-the-jquery-ui-demos/</link>
		<comments>http://paulbakaus.com/2009/01/01/the-technique-behind-the-jquery-ui-demos/#comments</comments>
		<pubDate>Thu, 01 Jan 2009 19:14:26 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[demos]]></category>

		<guid isPermaLink="false">http://paulbakaus.com/?p=135</guid>
		<description><![CDATA[I&#8217;ve decided to start blogging more about the actual things I&#8217;m working on everyday, and in this series, I want to first talk about the updated and improved demos of jQuery UI. The first important thing to understand is that the demos that come with the development package, and that you can browse from the [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve decided to start blogging more about the actual things I&#8217;m working on everyday, and in this series, I want to first talk about the updated and <a href="http://ui.jquery.com/demos">improved demos of jQuery UI</a>. The first important thing to understand is that the <a href="http://jquery-ui.googlecode.com/svn/trunk/demos/index.html">demos that come</a> with the <a href="http://jquery-ui.googlecode.com/files/jquery.ui-1.6rc4.zip">development package</a>, and that you can <a href="http://jquery-ui.googlecode.com/svn/trunk/demos/">browse</a> from the trunk, and the demos you see at the <a href="http://ui.jquery.com/demos">jQuery UI website</a> are the same.</p>
<p><img src="http://ui.jquery.com/images/blog/demos.png" style='width: 90%;' /></p>
<h3>The standalone demos</h3>
<p>To me, the new demos are truly outstanding. Let&#8217;s talk a bit about why. If you download the <a href="http://jquery-ui.googlecode.com/files/jquery.ui-1.6rc4.zip">development package</a>, or browse the <a href="http://jquery-ui.googlecode.com/svn/trunk/">trunk</a>, you&#8217;ll see a demos/ folder, with sub directories for every individual plugin. If you open one of these sub-directories, you&#8217;ll see a index.html, a default.html and named individual demos, i.e. containment.html. Each of these demos:</p>
<ol>
<li>Is a standalone demo</li>
<li>Includes all the files it needs (JavaScript / Theming )</li>
<li>Displays a description of the current demo at the bottom</li>
</ol>
<p>This means that those demos are excellent for learning how to do something &#8211; they come completely uncluttered, so you can copy and paste JavaScript and markup easily. Additionally, the default.html shows you the most simple state of the plugin (usually without any provided options), and the index.html provides a easy named listing to all these sub demos. Even better, if you open demos/index.html, you&#8217;ll see a page that looks very similar to the website demos section, but works like this:</p>
<ol>
<li>If you click on a plugin in the left hand navigation, i.e. &#8216;draggable&#8217;,</li>
<li>it fetches the content of <a href="http://jquery-ui.googlecode.com/svn/trunk/demos/draggable/index.html">demos/draggable/index.html</a> using Ajax and displays it as right hand sub navigation</li>
<li>if you click on one of those links, the created iframe in the middle updates itself</li>
</ol>
<h3>The website demos</h3>
<p>For the website demos, it got a bit more sophisticated. We removed the beautiful but unusable demo carousel, and created a unified demo section that automatically pulls the standalone demo files from the repository, therefore it&#8217;s never out of sync. However, the simple iframe approach couldn&#8217;t be used because of the incredible amount of server requests made that way. Here&#8217;s the technique behind it:</p>
<ol>
<li>include the theme and jQuery UI once</li>
<li>include <a href="http://jquery-ui.googlecode.com/svn/trunk/demos/index.html">demos/index.html</a> using PHP, filter out any script/style tags and the header</li>
<li>now using JavaScript, rewrite all links to plugins to point to /demos/plugin</li>
</ol>
<p>This shows you the index file. Perfect. What happens if you click on a link in the left hand navigation now?</p>
<ol>
<li>A server-side rewrite rule resolves demos/draggable to demos/?load=draggable</li>
<li>in PHP:
<ol>
<li>we export the &#8216;load&#8217; information to Smarty, so we can access it in the template</li>
<li>we then retrieve <a href="http://jquery-ui.googlecode.com/svn/trunk/demos/draggable/default.html">default.html</a> and display it in a div frame, but filter out any script/style tags and header</li>
<li>and we do the same for <a href="http://jquery-ui.googlecode.com/svn/trunk/demos/draggable/default.html">draggable/index.html</a>, to show the right hand sub navigation</li>
</ol>
</li>
<li>in JavaScript:
<ol>
<li>we loop through all demo links in the right hand nav and define click events,so the link isn&#8217;t triggered, but instead, a hash is set (for easy bookmarking) and</li>
<li>the selected file is pulled in via ajax &#8211; again, we filter out any script/style tags with src attributes, and the header/footer, and update the frame div</li>
<li>at last, we pull out the description at bottom of every file, and display it below the &#8216;frame&#8217;</li>
</ol>
</li>
</ol>
<p>So, with a little more work involved, we not only made the demos extremely responsive and fast, but also reduced the requests to the server dramatically. Every time you click on a demo, only one single request is made, to fetch the actual html page.</p>
<p>Pretty cool eh? Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://paulbakaus.com/2009/01/01/the-technique-behind-the-jquery-ui-demos/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Coverflow, anyone?</title>
		<link>http://paulbakaus.com/2008/05/31/coverflow-anyone/</link>
		<comments>http://paulbakaus.com/2008/05/31/coverflow-anyone/#comments</comments>
		<pubDate>Sat, 31 May 2008 15:31:50 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[coverflow]]></category>
		<category><![CDATA[css transforms]]></category>
		<category><![CDATA[fluid]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[webkit]]></category>

		<guid isPermaLink="false">http://paulbakaus.com/?p=6</guid>
		<description><![CDATA[The inspiration
So I was looking at all the nice things the WebKit folks did, and one particular feature really got his way into my thoughts, and I was playing with possible usecases for weeks.. I&#8217;m talking about the CSS transforms.
This handy nifty new css feature allows you to do all kinds of 2d transformations on [...]]]></description>
			<content:encoded><![CDATA[<h2>The inspiration</h2>
<p>So I was looking at all the nice things the WebKit folks did, and one particular feature really got his way into my thoughts, and I was playing with possible usecases for weeks.. I&#8217;m talking about the <a href="http://webkit.org/blog/130/css-transforms/">CSS transforms</a>.</p>
<p>This handy nifty new css feature allows you to do all kinds of 2d transformations on any element on the page, by utilizing custom CSS tags. This means you can rotate and translate DOM elements, but you can also use a generic matrix function to do whatever you want.</p>
<p>So here is where it get&#8217;s interesting. The fun thing about CSS Transforms is that they work today, in Safari 3.1, and on the iPhone, not only in one of the nightly builds, so it&#8217;s possible to target real-world users.</p>
<p>So now that I had all this power, I didn&#8217;t know what to do with it, until I remembered that I always wanted to do a cool iTunes like coverflow effect, already seen countless times in flash. Also helping me to remember was an <a href="http://ajaxian.com/archives/dojoworkers-a-showcase">Ajaxian post about the dojo.workers</a> a couple of days ago, which features the same coverflow effect, done by Peter Higgins.</p>
<p>While this dojo.workers example is absolutely fantastic work and looks brilliant however, it doesn&#8217;t feel quite like the effect: You can&#8217;t scroll at once through many items, there&#8217;s no real animation (the images are already prerendered).</p>
<h2>The result</h2>
<p><a href='http://paulbakaus.com/lab/js/coverflow'><img src="http://paulbakaus.com/wp-content/uploads/2008/05/fensteraufnahme-1.png" alt="" title="Coverflow demo" width="450" class="alignnone size-full wp-image-7" /></a></p>
<p>So after a couple hours of work, I was able to create a <a href="http://paulbakaus.com/lab/js/coverflow">coverflow effect</a> that actually flows and animates in real-time, without using canvas or prerendered graphics.</p>
<p>While impossible to do a real perspective transformation using WebKit right now (that would require a 3d affine matrix), I&#8217;m using the matrix and scale css functions to create a somewhat similar experience, along with some viewport and zIndex logic.</p>
<p>To make a nice demonstration, it uses <a href="http://ui.jquery.com">jQuery UI</a> to create a actual coverflow widget, and jQuery UI&#8217;s slider to be able to slide through. You can also navigate through the items by clicking on them or using the left/right keys on your keyboard.</p>
<p>For those of you who would like to know how I was able to create the real experience: The refresh() function that updates the viewport does unlike other examples (i.e. frash coverflow scripts) not only handle single animations, but is capable of doing true half-state renderings. Right now, this is not shown too much in the demo, but it would be actually possible to change the next/prev keyboard behaviour to not move from one item to the other, but render each single half-state inbetween.</p>
<p>Finally, for those of you wondering if this will become a real plugin: Indeed, it&#8217;s already commited in the 1.7 branch of jQuery UI, and along with other Webkit specific plugins, come to UI in the near future. I&#8217;ll keep you updated!</p>
]]></content:encoded>
			<wfw:commentRss>http://paulbakaus.com/2008/05/31/coverflow-anyone/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>Back in Tokyo</title>
		<link>http://paulbakaus.com/2008/04/21/back-in-tokyo/</link>
		<comments>http://paulbakaus.com/2008/04/21/back-in-tokyo/#comments</comments>
		<pubDate>Mon, 21 Apr 2008 13:17:01 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Japan]]></category>
		<category><![CDATA[jQuery UI]]></category>

		<guid isPermaLink="false">http://paulbakaus.com/?p=4</guid>
		<description><![CDATA[I finally combined two interests of mine into one: My love for Japan and my day job. From May 14th to May 20th, I will be in Tokyo participating and speaking on two great conferences.
The first conference is a great international hacker conference featuring both Perl and JavaScript sessions &#8211; its name is YAPC Asia, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-medium wp-image-5 alignleft" style="float: left; margin-right: 15px; margin-bottom: 5px;" title="JUI Logo" src="http://paulbakaus.com/wp-content/uploads/2008/04/n11240373854_4707.jpg" alt="JUI Logo" />I finally combined two interests of mine into one: My love for Japan and my day job. From <strong>May 14th to May 20th</strong>, I will be in Tokyo participating and speaking on two great conferences.</p>
<p>The first conference is a great international hacker conference featuring both Perl and JavaScript sessions &#8211; its name is <em>YAPC Asia</em>, you can find their website here: <a href="http://conferences.yapcasia.org/ya2008/">http://conferences.yapcasia.org/ya2008/</a></p>
<p>Due to the popular demand, registration was already closed a couple of weeks ago, but they opened again to sell a couple of more tickets. So if you&#8217;re planning to attend, definitely register fast!</p>
<p>The second conference is a <strong>exclusive one-day event named JUI 2008 Tokyo</strong>, a day completely dedicated to <strong>JavaScript User Interface sessions</strong>. It will happen immediately after YAPC (after the weekend), on <strong>Monday, May 19th</strong>.</p>
<p>That one is most interesting &#8211; a couple of weeks ago, I wrote an email to <a href="http://kawa.net">Yusuke Kawasaki</a> to find out about japanese conferences, because I wanted to get active in Japan. He was extremely kind and helpful, and immediately answered with a bunch of options, the most immediate was the <em>YAPC Asia</em>. Unfortunately, the call of papers was closed long ago, so he came up with the idea of a exclusive one day event, with the focus on <a href="http://ui.jquery.com">jQuery UI</a> (!).</p>
<p>Now that&#8217;s what we got &#8211; a great one-day event, featuring great japanese speakers and jQuery UI content all over, sponsored by Yusuke Kawasaki&#8217;s company <a href="http://recruit.co.jp">RECRUIT</a>. The details are still worked out, but we&#8217;ll soon post a timetable and more information (A facebook event page can be found <a href="http://www.facebook.com/event.php?eid=11240373854&amp;ref=nf">here</a>).</p>
<p>If you ever wanted to visit Tokyo, this would be a great time and chance to combine a holiday trip with a great business trip. Be sure to leave a a comment if you think about it!</p>
<hr size="1" />On a sidenote: The japanese IT economy is the third largest in the world, but it was (and still is) very difficult to enter their market or exchange business ideas and knowledge. Of course, there are a couple of reasons, but from what I&#8217;ve seen, it&#8217;s a more trivial one: The language!</p>
<p>Most conferences hosted in Japan are japanese only, with only a few english speakers and no english website/marketing, and although you will see great code if you attend, you might easily become frustrated because you don&#8217;t understand the details. However, there seems to be a small revolution or evolution going on &#8211; YAPC Asia is getting very popular, and it&#8217;s completely international &#8211; all session slides are translated from japanese to english and vice versa. They even have english-speaking staff!</p>
<p>I always had the feeling that from a knowledge perspective, Japan is a pot full of gold &#8211; but only if you learn japanese, you&#8217;ll receive the golden key to open it. Now there might soon be an easier way <img src='http://paulbakaus.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://paulbakaus.com/2008/04/21/back-in-tokyo/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
