<?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>a pint of javascript (and general web stuff) &#187; usability</title>
	<atom:link href="http://blog.gonchuki.com/category/usability/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gonchuki.com</link>
	<description></description>
	<lastBuildDate>Tue, 06 Jul 2010 21:45:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>CSS Sprites2 &#8211; It&#039;s MooTools Time</title>
		<link>http://blog.gonchuki.com/archives/css-sprites2-its-mootools-time/</link>
		<comments>http://blog.gonchuki.com/archives/css-sprites2-its-mootools-time/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 17:29:20 +0000</pubDate>
		<dc:creator>gonchuki</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[patterns]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[sprites]]></category>

		<guid isPermaLink="false">http://blog.gonchuki.com/?p=34</guid>
		<description><![CDATA[A few months ago you may have read Dave Shea&#039;s entry on A List Apart &#034;CSS Sprites2 &#8211; It&#039;s JavaScript Time&#034; where he implemented a variant of his own CSS Sprites article by adding jQuery based animations. In this same article Dave encouraged us [developers] to port it to other libraries, so after a few [...]]]></description>
			<content:encoded><![CDATA[<p>A few months ago you may have read <a href="http://www.mezzoblue.com/">Dave Shea</a>&#039;s entry on A List Apart &#034;<a href="http://www.alistapart.com/articles/sprites2"><acronym title="Cascading Style Sheets">CSS</acronym> Sprites2 &#8211; It&#039;s JavaScript Time</a>&#034; where he implemented a variant of his own <a href="http://www.alistapart.com/articles/sprites"><acronym title="Cascading Style Sheets">CSS</acronym> Sprites</a> article by adding <a href="http://jquery.com">jQuery</a> based animations. In this same article Dave encouraged us [developers] to port it to other libraries, so after a few months of inactivity I&#039;m back with the <a href="http://mootools.net">MooTools</a> port of this slick effect.<br />
<span id="more-34"></span></p>
<link rel="stylesheet" type="text/css" href="http://sandbox.gonchuki.com/sprites2/sprites2.css" media="all" />
<h3 class="section">Enter the MooTools</h3>
<p>While the original version used jQuery (1.2.6 at that time) and lots of people like it, we (mootoolers) have a different approach to code specially emphasizing on OOP techniques and readability. Part of the issue might not be jQuery per-se and be Dave&#039;s code that was a little obfuscated, but it anyways has a lot of room for improvement.<br />
This article will just describe differences between the MooTools implementation and the Dave&#039;s jQuery one, so unless stated otherwise, everything from the ALA article applies here.</p>
<h3 class="section">enter the Sprites2 class</h3>
<p>Part of the requirements I imposed myself when porting to MooTools was that it had to be easier to use than the jQuery version, and that it should give a certain degree of flexibility to extend the possible transition effects.<br />
End result is a class intuitively named Sprites2, where you gracefully pass named parameters:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">new</span> Sprites2<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>mode<span style="color: #339933;">:</span> <span style="color: #3366CC;">'fade'</span><span style="color: #339933;">,</span> item_selector<span style="color: #339933;">:</span> <span style="color: #3366CC;">'ul.nav a'</span><span style="color: #339933;">,</span> duration<span style="color: #339933;">:</span> <span style="color: #CC0000;">250</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

Now that&#039;s classy! [stupid pun, I know]<br />
Notice that these parameters above are the class defaults, so you could have just as easily used <var>new Sprites2();</var> and the end result would be the same.</p>
<h3 class="section">changes to original code and idea</h3>
<p>Apart from moving the code to a class, a change to note is the removal of the :active state from the <acronym title="Cascading Style Sheets">CSS</acronym> and the <var>setActive</var> parameter in the <acronym title="JavaScript">JS</acronym> code. This was mostly a personal preference as the :active pseudo-class created a few issues when holding the mouse on the element and releasing outside of it. Other notable changes in the <acronym title="Cascading Style Sheets">CSS</acronym> are the simplification of the implementation/adaptation process by using a simpler approach on the styles (for example, using <var>height:100%;</var> where applicable instead of <a href="http://www.alistapart.com/d/sprites2/examples/example-script.css">redefining height:48px; 5 times in the <acronym title="Cascading Style Sheets">CSS</acronym></a>).</p>
<p>MooTools also has a free &#034;upgrade&#034; built-in: animations have an internal state so that if you roll out from the element and enter it again, the transition will continue to run smoothly. In contrast, jQuery version (may be by code design, maybe because of a library limitation) flickers madly when you roll over and out of the element repeatedly with an interval less than the effect duration.</p>
<p>Also to note, and as mentioned, the Sprites2 class can be easily extended outside of the sprites2.js file with just a few lines of code to create for example a horizontal slide effect:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">Sprites2.<span style="color: #660066;">implement</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
  effects<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
    slide_x<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>fx_element<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      fx_element.<span style="color: #660066;">store</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'width'</span><span style="color: #339933;">,</span> fx_element.<span style="color: #660066;">getSize</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">x</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">setStyles</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span><span style="color: #3366CC;">'width'</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
      <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">show_fn</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>fx_element<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> fx_element.<span style="color: #660066;">tween</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'width'</span><span style="color: #339933;">,</span> fx_element.<span style="color: #660066;">retrieve</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'width'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
      <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">hide_fn</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>fx_element<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> fx_element.<span style="color: #660066;">tween</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'width'</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>and you can start using it right away with <var>new Sprites2({mode: &#039;slide_x&#039;});</var>. This obviously works any way you want, as you can manually add or remove the effects directly in the source file.</p>
<h3 class="section">download, full demo and requirements</h3>
<p>The example here is running on a standard <a href="http://ajax.googleapis.com/ajax/libs/mootools/1.2.1/mootools-yui-compressed.js">google hosted version of mootools 1.2.1</a>. For those of you that use custom builds, just be sure to add FX.Tween and FX.Morph to your standard array of includes (morph is only used by the &#034;animate&#034; effect, so if you don&#039;t use that one you can exclude it.)</p>
<p><a href="http://sandbox.gonchuki.com/sprites2/sprites2_moo.html">View full online demo</a></p>
<p><a href="http://sandbox.gonchuki.com/sprites2/sprites2.zip" rel="download" class="download">Download Sprites2</a> for MooTools [zip].</p>
<p><strong>new!</strong> &#8211; by popular demand (not really), I have just set-up a git repo so you can fork the latest source: <a href="http://github.com/gonchuki/sprites2-moo">http://github.com/gonchuki/sprites2-moo</a></p>
<p><strong>License:</strong> <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-Share Alike 3.0</a><br />
<small>disclaimer: original code did not contain any license whatsoever (like all ALA code), so I assumed a CC share-alike license applies perfectly in this case.</small><br />]]></content:encoded>
			<wfw:commentRss>http://blog.gonchuki.com/archives/css-sprites2-its-mootools-time/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>updating moopop for mootools 1.2</title>
		<link>http://blog.gonchuki.com/archives/updating-moopop-for-mootools-12/</link>
		<comments>http://blog.gonchuki.com/archives/updating-moopop-for-mootools-12/#comments</comments>
		<pubDate>Tue, 24 Jun 2008 02:37:31 +0000</pubDate>
		<dc:creator>gonchuki</dc:creator>
				<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[moopop]]></category>
		<category><![CDATA[mootools 1.2]]></category>

		<guid isPermaLink="false">http://blog.gonchuki.com/?p=22</guid>
		<description><![CDATA[After several requests to update the script, I finally had time to make the update. In fact the script was under production for more than a month running over mootools SVN builds. The update also comes with a couple additions suggested by users, and also some optimizations thanks to the new mootools 1.2 element storage.

so&#8230; [...]]]></description>
			<content:encoded><![CDATA[<p>After several requests to update the script, I finally had time to make the update. In fact the script was under production for more than a month running over mootools SVN builds. The update also comes with a couple additions suggested by users, and also some optimizations thanks to the new mootools 1.2 <a href="http://blog.mootools.net/2008/1/22/Element_Storage">element storage</a>.</p>
<p><span id="more-22"></span></p>
<h3 class="section">so&#8230; what&#039;s new?</h3>
<p>the basic improvement is that the code now works with mootools 1.2, be warned that this actually *breaks* compatibility with mootools 1.11 so please use <a href="http://blog.gonchuki.com/archives/moopop-unobtrusive-popups-with-mootools/">the older version</a> if you haven&#039;t yet gone to 1.2</p>
<p>and then, what else?<br />
<strong>resizable windows</strong><br />
I got some requests for this feature, so it&#039;s here. Just mix a &#034;r&#034; parameter in this format: &#034;[600,400,r]&#034; and the popup window generated will be resizable.</p>
<p><strong>ability to reuse the same popup</strong><br />
the old moopop had a bad habit of creating a new popup window for each link and not offering an option to reuse the same window. now you can use the &#034;name&#034; attribute native to &lt;a&gt; tags to specify the target of the popup.</p>
<p><strong>defaulting to rel=&#034;popup&#034;</strong><br />
now you can just call moopop.captureByRel() without arguments and the script will default to the most common use case.</p>
<p><strong>under the hood&#8230;</strong><br />
optimized code a bit, and now it&#039;s using both element storage to avoid memory leaks and cleaner CSS2 selectors that got native in mootools 1.2</p>
<h3 class="section">documentation?</h3>
<p>yes sure, unless for the additions specified in this post, all documentation remains the same and you can get it either in <a href="http://blog.gonchuki.com/archives/moopop-unobtrusive-popups-with-mootools/">the original post</a>, or looking at the source of the uncompressed moopop 1.1</p>
<h3 class="section">download</h3>
<p>as with previous version, you just need Selectors and DomReady from the <a href="http://mootools.net/core">mootools core builder</a> and the rest of the dependencies are automatically selected.</p>
<p><a href="http://sandbox.gonchuki.com/moopop_1.1/moopop.js" rel="download" class="download">Download moopop 1.1</a> with documentation<br />
or<br />
<a href="http://sandbox.gonchuki.com/moopop_1.1/moopop_min.js" rel="download" class="download">Download minified version</a> without docs to save bandwidth.</p>
<p><strong>License:</strong> <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-Share Alike 3.0</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.gonchuki.com/archives/updating-moopop-for-mootools-12/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>wordpress 2.5 &#8211; good idea, bad idea</title>
		<link>http://blog.gonchuki.com/archives/wordpress-25-good-idea-bad-idea/</link>
		<comments>http://blog.gonchuki.com/archives/wordpress-25-good-idea-bad-idea/#comments</comments>
		<pubDate>Fri, 18 Apr 2008 16:04:19 +0000</pubDate>
		<dc:creator>gonchuki</dc:creator>
				<category><![CDATA[metablogging]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://blog.gonchuki.com/?p=21</guid>
		<description><![CDATA[Blog software upgrades are becoming more frequent than real content on this blog, so I guess it&#039;s a good time for a small review on WP 2.5. Let me start by telling this will be a mix on ranting, praising and random  bashing, so get tight on your seats and let&#039;s begin.

Navigation
Good Idea
The interface [...]]]></description>
			<content:encoded><![CDATA[<p>Blog software upgrades are becoming more frequent than real content on this blog, so I guess it&#039;s a good time for a small review on WP 2.5. Let me start by telling this will be a mix on ranting, praising and random  bashing, so get tight on your seats and let&#039;s begin.<br />
<span id="more-21"></span></p>
<h3 class="section">Navigation</h3>
<h4 class="subsection good">Good Idea</h4>
<p><strong>The interface overhaul.</strong> Old WordPress admin was really boring and suffered a lot from <a href="http://www.interaction-design.org/encyclopedia/featuritis_and_creeping_featurism.html">featuritis</a>, something that all big software suffers but the normal tendency is to redesign the interface when things get out of control. That time has come, and the new interface of the admin is really pleasant to use and almost perfectly organized.</p>
<h4 class="subsection bad">Bad Idea</h4>
<p><strong>The design tab should not be primary.</strong> Blogs don&#039;t change design as frequent as one changes it&#039;s own underwear (unless you are an extreme geek stereotype that doesn&#039;t even know the meaning of the word &#034;laundry&#034;, but that&#039;s a topic for another post). Even with the upgrade to 2.5, I guess I won&#039;t be touching that tab except for curiosity. The design tab should have been left at the top right, just next to settings and plugins.</p>
<h3 class="section">Plugins</h3>
<h4 class="subsection good">Good Idea</h4>
<p><strong>You can now upgrade plugins without manually uploading files.</strong> Great move, automatic upgrade of plugins is one of the most important functionalities that were missing. For heavy loaded blogs with tons of plugins this is a bless, no more downloading of the zip just to manually re-upload the files to the host.</p>
<div class="center append_to_top"><img src="http://blog.gonchuki.com/wp-content/uploads/2008/04/cforms_plugin.png" alt="new plugin upgrade interface" /><span class="caption">the new plugin upgrade interface</span></div>
<h4 class="subsection bad">Bad Idea</h4>
<p><strong>The plugin upgrade log screen is terrible, and the interface too</strong> I can not guess how they ended with this current screen, it&#039;s completely washed out and not really useful for the average Joe. I certainly expected a lot more from <a href="http://www.happycog.com">Happy Cog</a>. Worst part is, it would only have taken 5 minutes to give it proper styles and at least look like a real log screen.</p>
<div class="center"><img src="http://blog.gonchuki.com/wp-content/uploads/2008/04/upgrade_plugin.png" alt="bad idea, good idea" /><span class="caption">bad idea, good idea</span></div>
<h4 class="subsection great">A Better Idea</h4>
<p>While we are at it, here&#039;s another short suggestion: <strong>how about using ajax?</strong> click the upgrade link, a throbber replaces the link, and then a nice &#034;success&#034; status message replaces the whole row. <em>badabing!</em> that&#039;s what I would call a friendly one click upgrade process. I mean, is there a real need for Mr. Average Joe to read the log on what is happening in the background?</p>
<div class="center append_to_top"><img src="http://blog.gonchuki.com/wp-content/uploads/2008/04/plugin_ajax.png" alt="" /><span class="caption">Mr. Average Joe would be really pleased to see this happening!</span></div>
<p></p>
<h3 class="section">Widgetized Sidebar</h3>
<h4 class="subsection good">Good Idea</h4>
<p><strong>New widgets, and a usable new interface.</strong> The widgetized sidebar was one of the worst implemented features in previous wordpress versions, and (at least to me) it was kind of useless as I always ended manually editing de sidebar.php file. All that has ended with the new interface and I give it a great welcome.</p>
<h4 class="subsection bad">Bad Idea</h4>
<p><strong>The <acronym title="Really Simple Syndication">RSS</acronym> widget still comes with broken code.</strong> All the work you do on the front end is not good if you still keep the garbage at the back end. Is there a reason for one to want to have an orange background on the <acronym title="Really Simple Syndication">RSS</acronym> icon and make it be exactly 14&#215;14?</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;img</span> <span style="color: #000066;">style</span>=<span style="color: #ff0000;">'background:orange;color:white;border:none;'</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">'14'</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">'14'</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">'$icon'</span> <span style="color: #000066;">alt</span>=<span style="color: #ff0000;">'RSS'</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span></pre></div></div>

<p>Hey Mr. WordPress, would you please let me customize my theme as I like?<br />
The outcome: I ended manually editing widgets.php (with a similarly hackish approach ^_^) to add my <a href="http://gonchuki.tumblr.com">tumblr garbage</a> to the sidebar.</p>
<h3 class="section">Final Words and Miscellanea</h3>
<p>All in all, WordPress 2.5 has been a great step forward. Other things I liked are the new option to have full text in the <acronym title="Really Simple Syndication">RSS</acronym> (I know I will have one more reader now, right? ;) ), the new compose screen is a lot cleaner, the permalink edit while creating the entry is a bless, and overall the admin interface just feels right. Let&#039;s hope however that next release comes with some more polishment as there are still lots of rough edges and they are not as complicated to solve. And let&#039;s not forget, <a href="http://blog.gonchuki.com/archives/the-perils-of-editing-a-wordpress-theme#undo">there&#039;s still no fricking undo</a>!</p>]]></content:encoded>
			<wfw:commentRss>http://blog.gonchuki.com/archives/wordpress-25-good-idea-bad-idea/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>usability 101: adding a global &quot;back to top&quot; to your site</title>
		<link>http://blog.gonchuki.com/archives/usability-101-adding-a-global-back-to-top-to-your-site/</link>
		<comments>http://blog.gonchuki.com/archives/usability-101-adding-a-global-back-to-top-to-your-site/#comments</comments>
		<pubDate>Sun, 11 Nov 2007 19:26:04 +0000</pubDate>
		<dc:creator>gonchuki</dc:creator>
				<category><![CDATA[accessibility]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://blog.gonchuki.com/archives/usability-101-adding-a-global-back-to-top-to-your-site/</guid>
		<description><![CDATA[If there has to be one single usability issue I dislike from most sites, it is the &#034;back to top&#034; feature. Ugly links spread all over the place clogging the visuals of your site. It is for this reason that some months ago we developed a global unobtrusive back to top for Operator11.

identifying the problem
As [...]]]></description>
			<content:encoded><![CDATA[<p>If there has to be one single usability issue I dislike from most sites, it is the &#034;back to top&#034; feature. Ugly links spread all over the place clogging the visuals of your site. It is for this reason that some months ago we developed a global unobtrusive back to top for <a href="http://operator11.com">Operator11</a>.<br />
<span id="more-18"></span></p>
<h3 class="section">identifying the problem</h3>
<p>As we have seen before, <a href="http://poorbuthappy.com/ease/archives/2007/08/30/3804/ia-for-beginners-long-pages-work">long pages work</a>. But we always have an issue in the process: if one wants to navigate to other section of the site you have to scroll all the way up or use your other hand to hit the [Home] key.<br />
Given that the average internet user (I would say more than 90%) use their mouse to browse the web, either having to use your other hand and hunt for a key, scrolling up repetitively or clicking on that very top portion of that 16px wide scrollbar adds complexity to the task we are doing and <a href="http://www.humanized.com/weblog/2006/07/22/know_when_to_stop_designing_quantitatively/">decreases our efficiency</a>.<br />
Users love to hunt for information from page to page, and our task as user experience designers is to give them the tools to ease their stay.</p>
<h3 class="section">the wrong approach</h3>
<p>The classic solution of spreading links all over the place has great design, usability and accessibility problems.<br />
From the design point of view you either come up with a clever way to disguise the links or just leave them out there clogging the visuals. Not good either way!<br />
Usability wise, do you really know when the user wants to go back to the top of the page? Is there a need to spam the user with back to top links?<br />
And that spamming also means for decreased accessibility, screen reader or keyboard users will be constantly spammed with those meaningless links. They <strong>already</strong> know how to get back to the top of the page without the need for your &#034;shortcuts&#034;.<br />
Shouldn&#039;t there be a wiser and cleaner solution?</p>
<h3 class="section">developing a solution</h3>
<p>Fortunately, <strong>there is</strong> a fairly good solution. And armed with a bit of javascript and standards compliant <acronym title="Cascading Style Sheets">CSS</acronym> we can pull the trick.<br />
Did I just say javascript? why, yes! The back to top link is a navigational aid for mouse users and not real content in your page, think of it as an escape pod for when you want to get away from the current page.<br />
When developing this together with <a href="http://nicolassanguinetti.info">Nicolas Sanguinetti</a> for <a href="http://operator11.com">Operator11</a> our main goals were:<br />
- keep it clean<br />
- be unobtrusive<br />
- keep it usable<br />
The final solution ended as a tiny piece of code written with the aid of <a href="http://prototypejs.org">Prototype</a>.<br />
However as you may know, my personal and professional focus is into the <a href="http://mootools.net">mootools</a> library and for this reason the solution presented today will be an adaptation from the original code.</p>
<h3 class="section">methodology and code</h3>
<p><strong>Q:</strong> So when should we show the back to top link?<br />
<strong>A:</strong> Once we think the user needs it.<br />
Getting this metric can be a bit tricky and it&#039;s mostly arbitrary, but we finally settled for <strong>80% of a full page scroll</strong>. It&#039;s around this point that we need at least two mouse wheel scrolls to reach the top and hitting the back to top link becomes more efficient.<br />
the javascript:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">window.<span style="color: #660066;">addEvent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'load'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #003366; font-weight: bold;">new</span> Element<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'span'</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #3366CC;">'id'</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'back-to-top'</span><span style="color: #339933;">,</span> 
    <span style="color: #3366CC;">'styles'</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><span style="color: #3366CC;">'opacity'</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">0.6</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    <span style="color: #3366CC;">'events'</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><span style="color: #3366CC;">'click'</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>window.<span style="color: #660066;">location</span>.<span style="color: #660066;">hash</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> window.<span style="color: #660066;">location</span>.<span style="color: #660066;">hash</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;page&quot;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> 
      <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span> window.<span style="color: #660066;">scrollTo</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>
  .<span style="color: #660066;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'back to top'</span><span style="color: #009900;">&#41;</span>
  .<span style="color: #660066;">injectInside</span><span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">body</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  window.<span style="color: #660066;">addEvent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'scroll'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> fn <span style="color: #339933;">=</span> window.<span style="color: #660066;">getScrollTop</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#40;</span>window.<span style="color: #660066;">getHeight</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #CC0000;">0.8</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> <span style="color: #3366CC;">&quot;addClass&quot;</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;removeClass&quot;</span><span style="color: #339933;">;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'back-to-top'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span>fn<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'visible'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>and this simple CSS:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#back-to-top</span><span style="color: #00AA00;">,</span>
<span style="color: #cc00cc;">#back-to-top</span><span style="color: #6666ff;">.visible</span> <span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">none</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
body<span style="color: #00AA00;">&gt;</span><span style="color: #cc00cc;">#back-to-top</span> <span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">fixed</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">bottom</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">right</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">cursor</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">pointer</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span> <span style="color: #933;">3px</span> <span style="color: #933;">17px</span> <span style="color: #933;">3px</span> <span style="color: #933;">7px</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">font</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">bold</span> <span style="color: #933;">14px</span> Arial<span style="color: #00AA00;">,</span> Helvetica<span style="color: #00AA00;">,</span> <span style="color: #993333;">sans-serif</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#fff</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#555</span> <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000; font-style: italic;">triangle-gray-up.png</span><span style="color: #00AA00;">&#41;</span> <span style="color: #993333;">no-repeat</span> <span style="color: #000000; font-weight: bold;">right</span> <span style="color: #993333;">center</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
body<span style="color: #00AA00;">&gt;</span><span style="color: #cc00cc;">#back-to-top</span><span style="color: #6666ff;">.visible</span> <span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">inline</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p></p>
<h3 class="section">pitfalls and caveats</h3>
<p>Just a few notes on usage and explanation of the methodology are needed.<br />
The code as you see purposely ignores IE6 as it has inexistent support for <code>position: fixed</code>. By using a CSS2 selector we gracefully degrade and ignore that browser and only display the link on standards compliant browsers.<br />
There is also another issue with <acronym title="Internet Explorer">IE</acronym> (6 and 7) that throws the infamous <a href="http://clientside.cnet.com/code-snippets/manipulating-the-dom/ie-and-operation-aborted/">Operation aborted</a> error and it&#039;s the reason behind using the <code>onload</code> event instead of <code>ondomready</code>.<br />
Last, but not the least, removing the hash part in the <acronym title="Uniform Resource Locator">URL</acronym> reloads the page instead of just cleaning that part of the location. This happens *at least* in Firefox and it is enough to conclude that setting <code>window.location.hash = ""</code> is not an option. For this is that we check the existence of the hash in the current location, and if not present we scroll to the top with javascript or else we set the location to the topmost element in our page.<br />
Be warned then, that if you use internal anchors in your site, you must have an element with an ID at the top of your page, preferably the body tag.<br />
For the curious, we re-set the hash part just for bookmarking purposes. If you hit the back to top link, then you are supposedly at the top and not on #someplace in the page.</p>
<h3 class="section">compatibility, download and legal bits</h3>
<p>The code is tested and works under Firefox, Opera 9, Safari 3 (both Windows and Mac) and Internet Explorer 7.<br />
As for <a href="http://mootools.net/download">mootools</a>, you just need the &#034;Element.Event&#034; and &#034;Window.Size&#034; modules, pretty much standard stuff.</p>
<p>By the way, you should have already noticed the back to top link in action in this post, feel free to try it out before leaving your comments ;)</p>
<p><a href="http://sandbox.gonchuki.com/btt/back-to-top.zip" class="download">Download back-to-top.zip</a></p>
<p><strong>License:</strong> <a href="http://creativecommons.org/licenses/by-sa/3.0/" class="cc">Creative Commons Attribution-Share Alike 3.0</a></p>
<p><strong>2009/02/27 &#8211; Update:</strong> The original code above was originally intended for mootools 1.11 (bleeding edge at that time in 2007), but given that 1.2 has been out for a long time I guess it&#039;s time for a quick update for <strong>mootools 1.2.x</strong><br />
I also took a few minutes to clean-up the <acronym title="Cascading Style Sheets">CSS</acronym> (no more CSS2 descendant rule to hide from IE6) and moved the &#034;fixed&#034; styles to the Element creation in the <acronym title="JavaScript">JS</acronym>. Now all that remains in the <acronym title="Cascading Style Sheets">CSS</acronym> is the customization on font, color, padding and background. The effect now also uses a fade in tween if it&#039;s available in your custom Mootools build.<br />
<a href="http://sandbox.gonchuki.com/btt/back-to-top_1.2.zip" class="download">Download back-to-top for mootools 1.2.x</a> [zip]</p>
<h3 class="section">addendum: original Prototype code</h3>
<p>Being that I was struck by <del datetime="2007-11-15T17:41:52+00:00">a very strange bug in mootools 1.11</del> <ins datetime="2007-11-15T17:41:52+00:00"><a href="http://dev.wp-plugins.org/ticket/723">a lame overriding of the addEvent function</a> by the <a href="http://wordpress.org/extend/plugins/stats/" rel="nofollow">Wordpress.com Stats plugin</a></ins>, I&#039;m putting here also the original Prototype-based implementation either for comparison or just for those Prototype users out there:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">BackToTop <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
    initialize<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        document.<span style="color: #660066;">body</span>.<span style="color: #660066;">appendChild</span><span style="color: #009900;">&#40;</span>
            BackToTop.<span style="color: #660066;">link</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Element<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'span'</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>id<span style="color: #339933;">:</span> <span style="color: #3366CC;">'back-to-top'</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>
                .<span style="color: #660066;">update</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;back to top&quot;</span><span style="color: #009900;">&#41;</span>
                .<span style="color: #660066;">setOpacity</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0.6</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        BackToTop.<span style="color: #660066;">link</span>.<span style="color: #660066;">observe</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;click&quot;</span><span style="color: #339933;">,</span> BackToTop.<span style="color: #660066;">onLinkClick</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        Event.<span style="color: #660066;">observe</span><span style="color: #009900;">&#40;</span>window<span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;scroll&quot;</span><span style="color: #339933;">,</span> BackToTop.<span style="color: #660066;">onWindowScroll</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    onLinkClick<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>window.<span style="color: #660066;">location</span>.<span style="color: #660066;">hash</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            window.<span style="color: #660066;">location</span>.<span style="color: #660066;">hash</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;page&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
            window.<span style="color: #660066;">scrollTo</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    onWindowScroll<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">viewport</span>.<span style="color: #660066;">getScrollY</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">viewport</span>.<span style="color: #660066;">getHeight</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #CC0000;">0.8</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            BackToTop.<span style="color: #660066;">link</span>.<span style="color: #660066;">addClassName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'visible'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
            BackToTop.<span style="color: #660066;">link</span>.<span style="color: #660066;">removeClassName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'visible'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
Event.<span style="color: #660066;">observe</span><span style="color: #009900;">&#40;</span>window<span style="color: #339933;">,</span> <span style="color: #3366CC;">'load'</span><span style="color: #339933;">,</span> BackToTop.<span style="color: #660066;">initialize</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>notice that this was first written to be a <a href="http://www.danwebb.net/2006/9/3/low-pro-unobtrusive-scripting-for-prototype">LowPro</a> behaviour (and fitting more of Nicolas&#039; coding style) but given the Operation Aborted bug in <acronym title="Internet Explorer">IE</acronym> we reverted back to plain Event.observe from Prototype.<br />
<script type="text/javascript" src="http://sandbox.gonchuki.com/btt/mootools.js"></script><br />
<script type="text/javascript" src="http://sandbox.gonchuki.com/btt/back-to-top.js"></script></p>]]></content:encoded>
			<wfw:commentRss>http://blog.gonchuki.com/archives/usability-101-adding-a-global-back-to-top-to-your-site/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>moopop: &quot;unobtrusive&quot; popups with mootools</title>
		<link>http://blog.gonchuki.com/archives/moopop-unobtrusive-popups-with-mootools/</link>
		<comments>http://blog.gonchuki.com/archives/moopop-unobtrusive-popups-with-mootools/#comments</comments>
		<pubDate>Mon, 13 Aug 2007 01:14:23 +0000</pubDate>
		<dc:creator>gonchuki</dc:creator>
				<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://blog.gonchuki.com/archives/moopop-unobtrusive-popups-with-mootools/</guid>
		<description><![CDATA[I know, it&#039;s quite ironic to call unobtrusive a popup window. However there are times when clients, coworkers or maintainers demand for a &#034;simple&#034; popup window solution. It&#039;s for that cases that I built moopop some months ago and I&#039;m now sharing the code.


Important:
The code and samples in this page are aimed towards mootools 1.11. [...]]]></description>
			<content:encoded><![CDATA[<p>I know, it&#039;s quite ironic to call unobtrusive a popup window. However there are times when clients, coworkers or maintainers demand for a &#034;simple&#034; popup window solution. It&#039;s for that cases that I built <em>moopop</em> some months ago and I&#039;m now sharing the code.</p>
<p><span id="more-16"></span></p>
<div class="big_sign notice">
<h3>Important:</h3>
<p>The code and samples in this page are aimed towards mootools 1.11. <br />If you are using mootools 1.2 please use <a href="http://blog.gonchuki.com/archives/updating-moopop-for-mootools-12/">the new version</a></p>
</div>
<h3 class="section">the call for a simple solution</h3>
<p>What&#039;s more annoying than a popup window? Writing code to execute them.<br />
- &#034;<em>Was it with quotes or without them?</em>&#034;<br />
- &#034;<em>Should I write px to specify it&#039;s in pixels?</em>&#034;<br />
These questions and more always raise in the seldom event that we need to write some kind of code for a popup window. Even worse, we feel it&#039;s a waste of time to write spiffy code to manage the popups since we are coding an <strong>ugly</strong> feature.<br />
Fear not, as I created a simple yet elegant solution based on the <a href="http://mootools.net">mootools</a> framework (In fact, the solution is pretty much library-agnostic, changing 2-3 lines of code is all you need to adapt it.)</p>
<h3 class="section">how simple can it be?</h3>
<p>As simple as adding the <acronym title="JavaScript">JS</acronym> to your site and adding a <var>rel</var> attribute to your links.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;a</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;http://www.google.com&quot;</span> <span style="color: #000066;">rel</span>=<span style="color: #ff0000;">&quot;popup&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>popup google<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/a<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p><a href="http://www.google.com" rel="popup">see it in action</a><br />
<var>rel=&#034;popup&#034;</var> will trigger the standard popup behavior that is to open the link in a new window, pretty much works as a <var>target=&#034;_blank&#034;</var> while keeping our code tidy, standards based and semantically meaningful.</p>
<h3 class="section">what about arbitrarily sized windows?</h3>
<p>Thanks for asking. That&#039;s where moopop shines as you can have a ton of different sized popups in your page while still having to write no javascript code. This is where site maintainers start to love you, as they can edit or add new content without having to learn the intricacies of javascript.<br />
Let&#039;s see the code:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;a</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;http://www.google.com&quot;</span> <span style="color: #000066;">rel</span>=<span style="color: #ff0000;">&quot;popup[600,400]&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>popup google at 600x400<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/a<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p><a href="http://www.google.com" rel="popup[600,400]">see it in action</a><br />
as simple as that, we can personalize each popup window by adding the size between square brackets.</p>
<h3 class="section">documentation, requirements and download</h3>
<p>Documentation is built-in on the <acronym title="JavaScript">JS</acronym> file in case you want to take a peek in a mootools-esque style for easier understanding.<br />
There are more possible uses for this such as setting a default size for all the popups without a given size, but I will leave that to you as that&#039;s a silly feature I had to build for a lazy coworker.</p>
<p>If you are already using mootools it&#039;s pretty much sure that you have the required dependencies. If not, it requires Element.Selectors, Window.DomReady and the rest of the requirements are automatically selected by the <a href="http://mootools.net/download">mootools download builder</a></p>
<p>- Download <a href="http://sandbox.gonchuki.com/moopop/moopop.js" rel="download">moopop with documentation</a><br />
or<br />
- Download <a href="http://www.crockford.com/javascript/jsmin.html" rel="external">JSMin</a> <a href="http://sandbox.gonchuki.com/moopop/moopop_min.js" rel="download">stripped version</a></p>
<p><strong>License:</strong> <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-Share Alike 3.0</a></p>
<p><script type="text/javascript" src="http://sandbox.gonchuki.com/moopop/mootools.js"></script><br />
<script type="text/javascript" src="http://sandbox.gonchuki.com/moopop/moopop_min.js"></script></p>]]></content:encoded>
			<wfw:commentRss>http://blog.gonchuki.com/archives/moopop-unobtrusive-popups-with-mootools/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>the perils of editing a wordpress theme</title>
		<link>http://blog.gonchuki.com/archives/the-perils-of-editing-a-wordpress-theme/</link>
		<comments>http://blog.gonchuki.com/archives/the-perils-of-editing-a-wordpress-theme/#comments</comments>
		<pubDate>Mon, 30 Jul 2007 22:10:03 +0000</pubDate>
		<dc:creator>gonchuki</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://blog.gonchuki.com/archives/the-perils-of-editing-a-wordpress-theme/</guid>
		<description><![CDATA[let me tell you something: editing a wordpress theme using the wordpress interface plainly sucks.
And no, it&#039;s not a problem of being a newbie in wordpress, it&#039;s just that there&#039;s too much duplicated code revolving on the structure, at least on the default Kubrick theme that is supposed to be the one that shows off [...]]]></description>
			<content:encoded><![CDATA[<p>let me tell you something: editing a <a href="http://wordpress.org">wordpress</a> theme using the wordpress interface plainly sucks.</p>
<p>And no, it&#039;s not a problem of being a newbie in wordpress, it&#039;s just that there&#039;s too much duplicated code revolving on the structure, at least on the default Kubrick theme that is supposed to be the one that shows off most of wordpress &#034;features&#034;.<br />
<span id="more-3"></span></p>
<h3 class="section">the first challenge:</h3>
<p> adding a wrapper around the content and sidebar.<br />
This could have been easy, <em>if only I didn&#039;t have to dig through six different files and manually inject the same code on each one of them</em>. Yay for templates!<br />
Come on wordpress staff, you can do it better, i want my header, footer and basic layout on *every* page of the site *unless* I specify the contrary, it&#039;s a big let down if my &#034;templated system&#034; makes me go through every top-level page to inject two lines of code on each of them. Learn from <a href="http://www.rubyonrails.org/">Ruby-on-Rails</a>, <a href="http://cakephp.org/">CakePHP</a> or <a href="http://21degrees.com.au/products/symphony/">Symphony</a>, where you specify your top-level layout and it&#039;s used site-wide unless you direct the framework not to do it.</p>
<h3 class="section">on the second day, God created blog entries:</h3>
<p> and did it the wrong way. The same issue as with the layout, was now worsened with entries. I had to dig through five different files to *try* to unify the way entries were to be displayed on every page of my site. Appart from being tiresome it&#039;s horribly error prone, what get us to the third point&#8230;</p>
<h3 class="section" id="undo">there&#039;s no f*cking undo:</h3>
<p> if you mistakenly hit the &#034;update file&#034; button in the middle of an edit while there are still errors to fix there&#039;s no way to go back. Even worse, I was editing my <acronym title="Cascading Style Sheets">CSS</acronym> externally and copy&#038;pasting on the wordpress admin the whole stuff&#8230; all was fun and games until I accidentally overwritten the Main Index Template. Poof! all my previous edits gone without a single undo button. How hard could have been to implement an undo feature like the one in <a href="http://mail.google.com/">gmail</a>?</p>
<div class="center append_to_top"><img src="http://blog.gonchuki.com/wp-content/uploads/2007/07/wp_undo.png" alt="" /><span class="caption">now *that* is something to write home about</span></div>
<h3 class="section">the sad conclusion:</h3>
<p> after going through all of this I figured out I went with the wrong blogging software [duh!].<br />
However, it&#039;s too late to go back and start from scratch. May be next time (or when free time is on my side again) I will <a href="http://www.s9y.org/">choose</a> <a href="http://www.typosphere.org/">another</a> <a href="http://www.movabletype.org/">blogging</a> <a href="http://mephistoblog.com/">software</a> <a href="http://www.textpattern.com/">suite</a>.<br />
And yes, I think the same as you: this is the saddest attempt at a first blog entry in the whole history of the blogosphere&#8230; so be it! :)</p>]]></content:encoded>
			<wfw:commentRss>http://blog.gonchuki.com/archives/the-perils-of-editing-a-wordpress-theme/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
