<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>p51 Labs</title>
	
	<link>http://www.p51labs.com</link>
	<description>Ideas. Experiments. Interests.</description>
	<lastBuildDate>Sun, 29 Apr 2012 02:57:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/p51labs" /><feedburner:info uri="p51labs" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Gravity Forms – Update Post Plugin v0.5.1 Released</title>
		<link>http://feedproxy.google.com/~r/p51labs/~3/9PqVXBFVMF0/</link>
		<comments>http://www.p51labs.com/gravity-forms-update-post-plugin-v0-5-1-released/#comments</comments>
		<pubDate>Sat, 28 Apr 2012 22:56:16 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.p51labs.com/?p=209</guid>
		<description><![CDATA[This plugin has been a labor of love and frustration at times as I am sure my colleague Ron Sparks can attest. This is the first release of a plugin for the Gravity Forms. With this plugin you can setup a post form and then pass a post ID to it, allowing the front end [...]]]></description>
			<content:encoded><![CDATA[<p>This plugin has been a labor of love and frustration at times as I am sure my colleague <a href="http://ronsparks.net/">Ron Sparks</a> can attest. This is the first release of a plugin for the <a>Gravity Forms</a>. With this plugin you can setup a post form and then pass a post ID to it, allowing the front end updating or even deletion of content through <a href="http://www.gravityforms.com/">Gravity Forms</a>.</p>
<p>This add-on is planned at <a href="http://www.gravityforms.com/">Gravity Forms</a> at some point but we just couldn&#8217;t wait as there is a big need now for this kind of functionality, so we took a first stab at it.</p>
<p>The plugin can be found at the WordPress Plugin Repository: <a href="http://wordpress.org/extend/plugins/gravity-forms-update-post/">Gravity Forms &#8211; Update Post v0.5.1</a></p>
<p>If you have any questions/suggestions/issues please email them to <a href="mailto:support@p51labs.com">support@p51labs.com</a> and if you would like to donate towards further development and rapid bug fixes a donation is always welcome!</p>
<p>Happy Editing!</p>
<ul class="related_post"><li>No Related Post</li></ul><img src="http://feeds.feedburner.com/~r/p51labs/~4/9PqVXBFVMF0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.p51labs.com/gravity-forms-update-post-plugin-v0-5-1-released/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.p51labs.com/gravity-forms-update-post-plugin-v0-5-1-released/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=gravity-forms-update-post-plugin-v0-5-1-released</feedburner:origLink></item>
		<item>
		<title>Simply-Buttons v2</title>
		<link>http://feedproxy.google.com/~r/p51labs/~3/fFcMgAYQrGU/</link>
		<comments>http://www.p51labs.com/simply-buttons-v2/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 08:36:32 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[button]]></category>
		<category><![CDATA[prototype]]></category>

		<guid isPermaLink="false">http://www.p51labs.com/?p=184</guid>
		<description><![CDATA[<p>The new version of Simply-Buttons is out!   Now framework independent and with more options to customize them.   Why have ordinary inputs on your site that look and behave differently in every browser when you deserve better?   Get clean, crisp, consistent 3 state buttons for your site.  </p>
]]></description>
			<content:encoded><![CDATA[<div class="demo-box"><iframe width="100%" scrolling="no" height="100%" frameborder="0" src="/projects/buttons/generic.php"></iframe></div>
<p><strong>TESTED</strong> IE6 IE7 FF(PC/MAC) Safari SafariMobile Opera(PC/MAC)</p>
<h3>Background</h3>
<p>I had some time a while back and read a few interesting articles on buttons:</p>
<ul class="styled-list">
<li><a href="http://www.oscaralexander.com/tutorials/how-to-make-sexy-buttons-with-css.html">How to make sexy buttons with CSS</a></li>
<li><a href="http://particletree.com/features/rediscovering-the-button-element/">Rediscovering the Button Element</a></li>
</ul>
<p>These got me thinking&#8230; these techniques are pretty nice, but I think they can meet somewhere in the middle and make something even better, after all the button tag was created to make really nice buttons for your sites (<a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#h-17.5">W3 Button Element</a>).   After a little work I came up with the &#8220;Simply-Buttons Technique&#8221;.</p>
<h3>Benefits</h3>
<ul class="styled-list">
<li>Buttons size to fit text.</li>
<li>There are 3 states: Inactive, Active, and Hover.</li>
<li>They look and behave the same way in every browser and operating system.</li>
<li>The do not need the javascript to work, they work with just the css</li>
<li>Way better looking buttons than what anyone else can do with XHTML/CSS, isn&#8217;t that reason enough?!</li>
</ul>
<h3>How it Works</h3>
<p>The markup is pretty simple, as you can see below.   The thing to notice here is that both the button and link tags each have a nested-nested span tag.</p>
<p><pre class="brush: xhtml">
&lt;button&gt;
  &lt;span&gt;&lt;span&gt;Button&lt;/span&gt;&lt;/span&gt;
&lt;/button&gt; 

&lt;a class=&quot;button&quot;&gt;
  &lt;span&gt;&lt;span&gt;Button&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt;
</pre>
</p>
<p>Now there are two parts involved here, the first thing to know here is that this method will work with just CSS.   However it works a little better with some Javascript enhancements.   Let&#8217;s take a look:</p>
<h4>Generic (no javascript)</h4>
<div class="demo-box"><iframe width="100%" scrolling="no" height="100%" frameborder="0" src="/projects/buttons/generic.php?nojs=true"></iframe></div>
<p>Now we see the buttons load nicely here, we are using the <a href="http://alistapart.com/articles/slidingdoors/">Sliding Doors Technique</a>.   The caveats are:</p>
<ul class="styled-list">
<li>There are outlines on the buttons.</li>
<li>The text is selectable.</li>
<li>These buttons are not mobile friendly (the button tag).</li>
</ul>
<h3>The Solution</h3>
<p>In comes the the Simply-Buttons Javascript component.   The library solves the caveats above as you can see below:</p>
<h4>YouTube Style (w/ javascript)</h4>
<div class="demo-box"><iframe width="100%" scrolling="no" height="100%" frameborder="0" src="/projects/buttons/youtube.php"></iframe></div>
<p>Below is the object you can configure to further customize the buttons to suite your design.</p>
<pre class="brush: javascript">

  options : {
    hyperlinkClass : &#039;button&#039; // &#039;a&#039; tags with this class will be processed
    ,activeButtonClass : &#039;button_active&#039; // Active class for active buttons
    ,states : { // The various states and css properties, define them as normal
      outer : {
        active : {
          backgroundPosition : &#039;bottom left&#039;
        }
        ,inactive : {
          backgroundPosition : &#039;top left&#039;
        }
      }
      ,inner : {
        active : {
          backgroundPosition : &#039;bottom right&#039;
        }
        ,inactive : {
          backgroundPosition : &#039;top right&#039;
        }
      }
    }
    ,iphone : {
      replaceButtons : true // if iPhone; replace buttons with inputs?
    }
  }
</pre>
<h3>Download the Code/Sample</h3>
<p>Below you can download not only the core CSS and Javascript files but you also will get a few samples.   I am not the greatest at tutorials so I will update this post as feedback comes in, however there are quite a few comments throughout the files.   The important files are: stylesheets/buttons.css, javascripts/simply-buttons-v2.js.</p>
<ul class="styled-list">
<li><a href="http://www.p51labs.com/projects/buttons/simply-buttons-v2.zip">Download Simply Buttons v2 (zip)</a></li>
</ul>
<h3>Installation</h3>
<p>Simply include the stylesheet and javascript and make sure they can find your images.   Then simple call the init function, either using the default options as below or configuring it as show above.</p>
<p><pre class="brush: xhtml">
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;stylesheets/SimplyButtons.css&quot; media=&quot;screen&quot; /&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;javascripts/SimplyButtons.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  window.onload = function()
  {
    SimplyButtons.init();
  };
&lt;/script&gt;
</pre>
</p>
<h3>Customize</h3>
<p>
As shown in the YouTube example, you can easily modify the buttons look and feel.   You can do this by creating your own stylesheet and you can use the one supplied as an example, its filled with comments.   There are also options that can be changed and configured on the javascript end as show above.</p>
<p><strong>SUPPORT: </strong><a href="#respond">Feedback</a> and <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=9509039" target="_blank">Donations</a> help to support this Plugin and future development.</p>
<ul class="related_post"><li><a href="http://www.p51labs.com/simply-buttons-technique/" title="Simply-Buttons Technique">Simply-Buttons Technique</a></li><li><a href="http://www.p51labs.com/upgraded-typography-with-sifr3/" title="Upgraded Typography with sIFR3">Upgraded Typography with sIFR3</a></li><li><a href="http://www.p51labs.com/wordpress-additions-pagination/" title="WP Additions &#8211; Pagination">WP Additions &#8211; Pagination</a></li><li><a href="http://www.p51labs.com/holy-grail/" title="Holy Grail Layout">Holy Grail Layout</a></li><li><a href="http://www.p51labs.com/free-yes-radio-api/" title="Free YES Radio API">Free YES Radio API</a></li></ul><img src="http://feeds.feedburner.com/~r/p51labs/~4/fFcMgAYQrGU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.p51labs.com/simply-buttons-v2/feed/</wfw:commentRss>
		<slash:comments>74</slash:comments>
		<feedburner:origLink>http://www.p51labs.com/simply-buttons-v2/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=simply-buttons-v2</feedburner:origLink></item>
		<item>
		<title>WP Additions – Pagination</title>
		<link>http://feedproxy.google.com/~r/p51labs/~3/JisEpQWmlw4/</link>
		<comments>http://www.p51labs.com/wordpress-additions-pagination/#comments</comments>
		<pubDate>Sat, 07 Nov 2009 10:49:35 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.p51labs.com/?p=165</guid>
		<description><![CDATA[<p>Pagination in the <a href="wordpress.org">Wordpress</a> Administration has always been a bit tedious when you have hundreds if not thousands of rows to go through.   This is no longer an issue, the <em>WP Additions - </em><em>Pagination</em> plugin converts the pagination for a variety of panels (posts, pages, comments, users) to an ajax pagination slider.   This slider allows you to easily and quickly scroll your posts for example, getting right to what you want without the fuss.</p>]]></description>
			<content:encoded><![CDATA[<p>I am happy to announce the release of the first of many plugins coming soon for wordpress, <em>WP Additions &#8211; Pagination</em>!   The <em>WP Additions </em>plugins will be a series of <a href="wordpress.org">WordPress</a> plugins designed to improve and extend what <a href="wordpress.org">WordPress</a> already does.   The <em>Pagination</em> plugin is the first, and a useful one too.</p>
<p>Pagination in the <a href="wordpress.org">WordPress</a> Administration has always been a bit tedious when you have hundreds if not thousands of rows to go through.   This is no longer an issue, the <em>WP Additions &#8211; </em><em>Pagination</em> plugin converts the pagination for a variety of panels (posts, pages, comments, users) to an ajax pagination slider.   This slider allows you to easily and quickly scroll your posts for example, getting right to what you want without the fuss.    Below is a screenshot of what the new pagination looks like.</p>
<div class="wp-caption aligncenter" style="width: 441px"><img title="WP Addtions - Pagination Slider Screenshot" src="/images/screenshot-1.jpg" alt="WP Addtions - Pagination Slider Screenshot" width="431" height="160" /><p class="wp-caption-text">WP Addtions - Pagination Slider Screenshot</p></div>
<p><br class="spacer_" /></p>
<ul class="styled-list">
<li><a href="http://wordpress.org/extend/plugins/wp-additions-pagination/">Download <em>WP Additions &#8211; Pagination </em></a> via <a href="http://wordpress.org/extend/plugins/">WordPress</a> </li>
</ul>
<p><strong>Questions and/or Comments?</strong></p>
<p>Please post your questions and comments below for now and I will get to them as quickly as I can.</p>
<p><strong>SUPPORT: </strong><a href="#respond">Feedback</a> and <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=9509039" target="_blank">Donations</a> help to support this Plugin and future development.</p>
<ul class="related_post"><li><a href="http://www.p51labs.com/simply-buttons-v2/" title="Simply-Buttons v2">Simply-Buttons v2</a></li><li><a href="http://www.p51labs.com/upgraded-typography-with-sifr3/" title="Upgraded Typography with sIFR3">Upgraded Typography with sIFR3</a></li><li><a href="http://www.p51labs.com/simply-buttons-technique/" title="Simply-Buttons Technique">Simply-Buttons Technique</a></li><li><a href="http://www.p51labs.com/free-yes-radio-api/" title="Free YES Radio API">Free YES Radio API</a></li></ul><img src="http://feeds.feedburner.com/~r/p51labs/~4/JisEpQWmlw4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.p51labs.com/wordpress-additions-pagination/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		<feedburner:origLink>http://www.p51labs.com/wordpress-additions-pagination/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=wordpress-additions-pagination</feedburner:origLink></item>
		<item>
		<title>Site Maintenance</title>
		<link>http://feedproxy.google.com/~r/p51labs/~3/CCVI8qvYxio/</link>
		<comments>http://www.p51labs.com/site-maintenance/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 23:36:46 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.p51labs.com/?p=152</guid>
		<description><![CDATA[I have decided I don't like a number of things on the new site, not that I expected to stick with everything in the first place.]]></description>
			<content:encoded><![CDATA[<p>I have decided I don&#8217;t like a number of things on the new site, not that I expected to stick with everything in the first place.   That being said I will be doing an overhaul in the week to come to a number of things, in the meantime I have replaced the theme with a simpler version.   One of the things I didn&#8217;t like was the sIFR load times, it was very nice but kinda clunky.   I also will be changing the site layout a little and dropping in some more Javascript to spice things up.</p>
<p>&#8230;. there is more on the way.</p>
<ul class="related_post"><li>No Related Post</li></ul><img src="http://feeds.feedburner.com/~r/p51labs/~4/CCVI8qvYxio" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.p51labs.com/site-maintenance/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		<feedburner:origLink>http://www.p51labs.com/site-maintenance/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=site-maintenance</feedburner:origLink></item>
		<item>
		<title>YES Television Widget</title>
		<link>http://feedproxy.google.com/~r/p51labs/~3/2_Eh8IifGno/</link>
		<comments>http://www.p51labs.com/yes-television-widget/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 10:23:20 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Widgets]]></category>
		<category><![CDATA[radio]]></category>
		<category><![CDATA[widget]]></category>

		<guid isPermaLink="false">http://www.p51labs.com/?p=136</guid>
		<description><![CDATA[<p>
Preview the next big way to see and hear your local radio stations.</p>
]]></description>
			<content:encoded><![CDATA[<p>
I thought I would share a recent widget I have been working on.   I will be writing more about <a href="http://www.yes.com">YES</a> as time goes on, in the meantime here is something to play with.   The widget below is for <a href="http://www.wfnx.com/">WFNX</a>.   You can:
</p>
<ul class="styled-list">
<li>Chat and Vote</li>
<li>Check Logs/Charts for the last 7 days</li>
<li>Watch YouTube Videos
  </li>
<li>Download the Songs
  </li>
<li>Win $100,000.00, an iPhone or some free music</li>
</ul>
<h3>Check out <a href="http://www.wfnx.com/">WFNX</a> via <a href="http://www.yes.com/">YES</a></h3>
<p><center><br />
<iframe frameborder="0" scrolling="no" allowtransparency="true" src="http://static.yes.com/widgets/television/?callletters=wfnx&#038;defaultpanel=chat" width="548" height="400"></iframe></center></p>
<ul class="related_post"><li><a href="http://www.p51labs.com/upgraded-typography-with-sifr3/" title="Upgraded Typography with sIFR3">Upgraded Typography with sIFR3</a></li><li><a href="http://www.p51labs.com/yes-api-php-wrapper/" title="YES API PHP Wrapper">YES API PHP Wrapper</a></li><li><a href="http://www.p51labs.com/free-yes-radio-api/" title="Free YES Radio API">Free YES Radio API</a></li></ul><img src="http://feeds.feedburner.com/~r/p51labs/~4/2_Eh8IifGno" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.p51labs.com/yes-television-widget/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.p51labs.com/yes-television-widget/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=yes-television-widget</feedburner:origLink></item>
		<item>
		<title>Upgraded Typography with sIFR3</title>
		<link>http://feedproxy.google.com/~r/p51labs/~3/2o__U576KRs/</link>
		<comments>http://www.p51labs.com/upgraded-typography-with-sifr3/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 10:16:38 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Experiments]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[sIFR]]></category>
		<category><![CDATA[typography]]></category>

		<guid isPermaLink="false">http://www.p51labs.com/?p=133</guid>
		<description><![CDATA[<p>
If you haven't noticed all of the typography on this site looks a little nicer, a little more 'Aliased'.</p>
]]></description>
			<content:encoded><![CDATA[<p>
I work from day to day on a mac.   That being said, web pages look much better on my screen than say on a windows machine.   Well the other day I saw my site on a windows machine&#8230; what a horrid pixelated mess the type is on Windows XP.   That being said I upgraded much of the typography on the site with <a href="http://wiki.novemberborn.net/sifr3">sIFR3</a>, I am not sure if this is how it will end up but for now I think it works rather well.</p>
<ul class="related_post"><li><a href="http://www.p51labs.com/simply-buttons-v2/" title="Simply-Buttons v2">Simply-Buttons v2</a></li><li><a href="http://www.p51labs.com/simply-buttons-technique/" title="Simply-Buttons Technique">Simply-Buttons Technique</a></li><li><a href="http://www.p51labs.com/wordpress-additions-pagination/" title="WP Additions &#8211; Pagination">WP Additions &#8211; Pagination</a></li><li><a href="http://www.p51labs.com/yes-television-widget/" title="YES Television Widget">YES Television Widget</a></li><li><a href="http://www.p51labs.com/holy-grail/" title="Holy Grail Layout">Holy Grail Layout</a></li><li><a href="http://www.p51labs.com/free-yes-radio-api/" title="Free YES Radio API">Free YES Radio API</a></li></ul><img src="http://feeds.feedburner.com/~r/p51labs/~4/2o__U576KRs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.p51labs.com/upgraded-typography-with-sifr3/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.p51labs.com/upgraded-typography-with-sifr3/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=upgraded-typography-with-sifr3</feedburner:origLink></item>
		<item>
		<title>Holy Grail Layout</title>
		<link>http://feedproxy.google.com/~r/p51labs/~3/o3xF0KKV7xM/</link>
		<comments>http://www.p51labs.com/holy-grail/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 04:49:50 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Experiments]]></category>
		<category><![CDATA[layout]]></category>

		<guid isPermaLink="false">http://www.p51labs.com/?p=87</guid>
		<description><![CDATA[<p>
There are so many 'Holy Grail' layouts around, I decided to make on of my own.   This one is very simple, very light, and very very flexible.</p>
]]></description>
			<content:encoded><![CDATA[<p>
<strong>TESTED</strong> IE6 IE7 FF(PC/MAC) Safari Opera(PC/MAC)
</p>
<h3>So what do we have here?</h3>
<p>
There a number of &#8216;Holy Grail&#8217; layouts out there:
</p>
<ul class="styled-list">
<li><a href="http://www.alistapart.com/articles/holygrail" target="_blank">A List Apart</a></li>
<li><a href="http://matthewjamestaylor.com/blog/ultimate-3-column-holy-grail-pixels.htm" target="_blank">Ultimate Holy Grail</a></li>
<li><a href="http://www.glish.com/css/7.asp" target="_blank">3-Column Holy Grail</a></li>
</ul>
<p>
The problem with them is that they are usually only for one purpose, or they have validation problems.   Way back I was presented with a problem, I needed a multi-column layout for a CMS engine that could allow infinite design possibilities with only one template.   I needed a true &#8216;Holy Grail&#8217; layout.   Hence the following was born.
</p>
<ul class="styled-list">
<li><a href="http://www.p51labs.com/projects/holygrail" target="_blank">p51&#8242;s Holy Grail Layout</a></li>
</ul>
<p>
Now I know the name is suggestive, I apologize, its more me trying to be sarcastic.    However this is a pretty mean-lean-green little layout in its own right.   Let&#8217;s see how we can have some fun with it.
</p>
<h3>The Guts</h3>
<p>
The layout starts out as a 3 column layout with optional navigation bars as such:
</p>
<h4>The Markup</h4>
<pre class="brush: xhtml">
&lt;div id=&quot;wrapper&quot;&gt;

	&lt;div id=&quot;header&quot;&gt;&lt;/div&gt;

	&lt;div id=&quot;navigation-container-upper&quot;&gt;&lt;/div&gt;

	&lt;div id=&quot;masthead&quot;&gt;&lt;/div&gt;	

	&lt;div id=&quot;navigation-container-lower&quot;&gt;&lt;/div&gt;

	&lt;div id=&quot;main&quot;&gt;

		&lt;div id=&quot;content&quot;&gt;

			&lt;div id=&quot;left&quot;&gt;&lt;/div&gt;

			&lt;div id=&quot;center&quot;&gt;&lt;/div&gt;

		&lt;/div&gt;

		&lt;div id=&quot;right&quot;&gt;&lt;/div&gt;

	&lt;/div&gt;

	&lt;div id=&quot;footer&quot;&gt;&lt;/div&gt;

&lt;/div&gt;
</pre>
<h4>The CSS</h4>
<pre class="brush: css">
*,
html,
body {
	margin: 0;
	padding: 0;
}

/* NN6/7 min-width is needed for scrollability when wrapper is centered */
body {
	min-width: 770px;
}

/* Use wrapper for Left Faux Column */
#wrapper {
	text-align: left;
	width: 770px;
	margin: 0 auto;
}

#header,
#navigation-container-lower,
#navigation-container-upper,
#masthead,
#footer {
	clear: both;
	width: 100%;
}

#navigation-container-lower,
#navigation-container-upper,
#masthead,
#footer {
	padding: 1px 0;
}

/* Use main for Right Faux Column */
#main {
	float: left;
	width: 100%;
}

#main:after {
 	/* Clear floating elements for NN6/7 */
    content: &quot;.&quot;;
    display: block;
	height: 0px;
    clear: both;
    visibility: hidden;
}

#center {
	margin: 0 170px 0 170px;
}

#content {
  	float: left;
  	width: 100%;
	margin: 0 -95% 0 0;
}

#left {
  	float: left;
  	width: 170px;
}

#right {
  	float: right;
  	width: 170px;
	margin: 0;
}

/* IE Fixes for Win/Mac */
* html div#content {
	margin: 0 -100% 0 0;
}
</pre>
<p>Now three things of note:</p>
<ol class="styled-ol-list">
<li>The entire layout is wrapped in a div called &#8216;wrapper&#8217;.</li>
<li>&#8216;left&#8217; and &#8216;center&#8217; are wrapped in a container called &#8216;content&#8217; while &#8216;right&#8217; is after the &#8216;content&#8217; container. </li>
<li> All of the #2 containers are wrapped in the &#8216;main&#8217; container.</li>
</ol>
<h3>How to achieve other layouts</h3>
<p>
Ok, so we see on the demo page that we have some nice javascript links to change the layout.   We have started with the core and added a basic theme.   The following modifications show how we can make this layout anything we want, as the javascript shows off.
</p>
<h4>Fluid Layout</h4>
<pre class="brush: css">
#wrapper {
	width: 100%;
	margin: 0 auto 0 auto;
}
</pre>
<h4>Fixed Layout</h4>
<pre class="brush: css">
body {
	min-width: 770px;
}

#wrapper {
	width: 770px;
	margin: 0 auto 0 auto;
}
</pre>
<h4>Fixed Left Layout</h4>
<pre class="brush: css">
body {
	min-width: 770px;
}

#wrapper {
	width: 770px;
	margin: 0 0 0 0;
}
</pre>
<h4>One Column Layout</h4>
<pre class="brush: css">
#right, #left {
	display: none;
}

#center {
	margin: 0 0 0 0;
}
</pre>
<h4>Two Column Layout</h4>
<pre class="brush: css">
#right {
	display: none;
}

#center {
	margin: 0 0 0 175px;
}
</pre>
<h4>Three Column Layout</h4>
<pre class="brush: css">
#right, #left {
	width: 175px;
}

#center {
	margin: 0 175px 0 175px;
}
</pre>
<p>
<strong>NOTE</strong> When creating the columns here, the margin on the left and right of the &#8216;center&#8217; column needs to be equal to or greater than the width set for the respective left and right columns.
</p>
<h4>For example</h4>
<pre class="brush: css">
#right, #left {
	width: 200px;
}

#center {
	margin: 0 200px 0 200px;
}
</pre>
<p>
<strong>NOTE</strong> When you change the page width, you should change the body min-width as well.
</p>
<h3>Get Source Files</h3>
<p>
Grab the demo and the css files below.
</p>
<ul class="styled-list">
<li><a href="http://www.p51labs.com/projects/holygrail/holygrail-layout.zip">Source Files (zip)</a></li>
</ul>
<h3>Thoughts?</h3>
<p>
So there it is, my version of a lean-mean-flexible layout that validates.   Thus far it has proven to be pretty handy, however there is always room for improvement, thoughts?</p>
<ul class="related_post"><li><a href="http://www.p51labs.com/simply-buttons-v2/" title="Simply-Buttons v2">Simply-Buttons v2</a></li><li><a href="http://www.p51labs.com/upgraded-typography-with-sifr3/" title="Upgraded Typography with sIFR3">Upgraded Typography with sIFR3</a></li><li><a href="http://www.p51labs.com/simply-buttons-technique/" title="Simply-Buttons Technique">Simply-Buttons Technique</a></li></ul><img src="http://feeds.feedburner.com/~r/p51labs/~4/o3xF0KKV7xM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.p51labs.com/holy-grail/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://www.p51labs.com/holy-grail/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=holy-grail</feedburner:origLink></item>
		<item>
		<title>Simply-Buttons Technique</title>
		<link>http://feedproxy.google.com/~r/p51labs/~3/uf0RxEv5xtU/</link>
		<comments>http://www.p51labs.com/simply-buttons-technique/#comments</comments>
		<pubDate>Sun, 07 Dec 2008 01:12:57 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Experiments]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[button]]></category>
		<category><![CDATA[prototype]]></category>

		<guid isPermaLink="false">http://localhost.com/?p=1</guid>
		<description><![CDATA[<p>Re-Rediscovering the Button Tag.   Taking another look we see that not only can we style the link element to mimic a nice button, but the button element as well.   With buttons that look and behave this good, why even think of using an input tag!</p>
]]></description>
			<content:encoded><![CDATA[<p>
<strong>UPDATE!</strong> Version 2 is out, <a href="http://www.p51labs.com/simply-buttons-v2">check it out &raquo;</a>.
</p>
<p>
<strong>TESTED</strong> IE6 IE7 FF(PC/MAC) Safari SafariMobile Opera(PC/MAC)
</p>
<h3>Background</h3>
<p>
So I have decided to share a button technique I have been using for awhile with the public.   I had some time a while back and read a few interesting articles on buttons:
</p>
<ul class="styled-list">
<li><a href="http://www.oscaralexander.com/tutorials/how-to-make-sexy-buttons-with-css.html">How to make sexy buttons with CSS</a></li>
<li><a href="http://particletree.com/features/rediscovering-the-button-element/">Rediscovering the Button Element</a></li>
</ul>
<p>
These got me thinking&#8230; these techniques are pretty nice, but I think they can meet somewhere in the middle and make something even better.   After a little work I came up with the &#8220;Simply Buttons Technique&#8221;.
</p>
<h3>How it Works</h3>
<p>
The markup is pretty simple, as you can see below.   The thing to notice here is that both the button and link tags each have a nested-nested span tag (&#8230;say that 3 times fast!).
</p>
<pre class="brush: xhtml">
&lt;button type=&quot;button&quot; value=&quot;Button&quot;&gt;
  &lt;span&gt;&lt;span&gt;Button&lt;/span&gt;&lt;/span&gt;
&lt;/button&gt;

&lt;a class=&quot;button&quot;&gt;
  &lt;span&gt;&lt;span&gt;Button&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt;
</pre>
<p>
Now there are two parts involved here, the first thing to know here is that this method will work with just CSS.   However it works a little better with some Javascript enhancements.   Let&#8217;s take a look:
</p>
<h4>Generic (no javascript)</h4>
<div class="demo-box">
<iframe src="/projects/buttons/generic.php?nojs=true" frameborder="0" scrolling="no" width="100%" height="100%"></iframe>
</div>
<h4>YouTube Style (no javascript)</h4>
<div class="demo-box">
<iframe src="/projects/buttons/youtube.php?nojs=true" frameborder="0" scrolling="no" width="100%" height="100%"></iframe>
</div>
<p>
Now we see the buttons load nicely here, we are using the <a href="http://alistapart.com/articles/slidingdoors/">Sliding Doors Technique</a>.   The caveats are:
</p>
<ul class="styled-list">
<li>There are outlines on the buttons.</li>
<li>The text is selectable.</li>
<li>These buttons are not mobile friendly (the button tag).</li>
</ul>
<h3>The Solution</h3>
<p>
In comes the the Simply Buttons Javascript component.   It is currently written using the <a href="http://prototypejs.org">Prototype</a> framework.   I will be writing a version that is framework independent soon, but this works just as well.   The library solves the caveats above as you can see below:
</p>
<h4>Generic (w/ javascript)</h4>
<div class="demo-box">
<iframe src="/projects/buttons/generic.php" frameborder="0" scrolling="no" width="100%" height="100%"></iframe>
</div>
<h4>YouTube Style (w/ javascript)</h4>
<div class="demo-box">
<iframe src="/projects/buttons/youtube.php" frameborder="0" scrolling="no" width="100%" height="100%"></iframe>
</div>
<p>
Below is the object you can configure to further customize the buttons to suite your design.
</p>
<pre class="brush: javascript">
this.options = Object.extend({
  hyperlinkSelector: &#039;a.button&#039;,
  activeButtonClass: &#039;button_active&#039;,
  states: {
    outer: {
      active: {
        backgroundPosition: &#039;bottom left&#039;
      },
      inactive: {
        backgroundPosition: &#039;top left&#039;
      }
    },
    inner: {
      active: {
        backgroundPosition: &#039;bottom right&#039;
      },
      inactive: {
        backgroundPosition: &#039;top right&#039;
      }
    }
  }
}, options || {});
</pre>
<h3>Download the Code/Sample</h3>
<p>
Below you can download not only the core CSS and Javascript files but you also will get a few samples.   I am not the greatest at tutorials so I will update this post as feedback comes in, however there are quite a few comments throughout the files.   The important files are: stylesheets/buttons.css, javascripts/buttons.js.
</p>
<ul class="styled-list">
<li><a href="http://www.p51labs.com/projects/buttons/simply-buttons.zip">Download Simply Buttons (zip)</a></li>
</ul>
<h3>Thoughts</h3>
<p>
I will be updating the Javascript in the weeks to come with a version that is not framework dependent.   Other than that I would love to hear thoughts, suggestions, or even new takes on this technique.   Let&#8217;s bring the button back!
</p>
<p>
<strong>NOTE</strong> To see this button style in action, check out the <a href="http://www.p51labs.com/contact">Contact Page</a>.</p>
<ul class="related_post"><li><a href="http://www.p51labs.com/simply-buttons-v2/" title="Simply-Buttons v2">Simply-Buttons v2</a></li><li><a href="http://www.p51labs.com/upgraded-typography-with-sifr3/" title="Upgraded Typography with sIFR3">Upgraded Typography with sIFR3</a></li><li><a href="http://www.p51labs.com/wordpress-additions-pagination/" title="WP Additions &#8211; Pagination">WP Additions &#8211; Pagination</a></li><li><a href="http://www.p51labs.com/holy-grail/" title="Holy Grail Layout">Holy Grail Layout</a></li><li><a href="http://www.p51labs.com/free-yes-radio-api/" title="Free YES Radio API">Free YES Radio API</a></li></ul><img src="http://feeds.feedburner.com/~r/p51labs/~4/uf0RxEv5xtU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.p51labs.com/simply-buttons-technique/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		<feedburner:origLink>http://www.p51labs.com/simply-buttons-technique/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=simply-buttons-technique</feedburner:origLink></item>
		<item>
		<title>YES API PHP Wrapper</title>
		<link>http://feedproxy.google.com/~r/p51labs/~3/8qD2gFwduCU/</link>
		<comments>http://www.p51labs.com/yes-api-php-wrapper/#comments</comments>
		<pubDate>Sat, 06 Dec 2008 09:46:48 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[Experiments]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[radio]]></category>

		<guid isPermaLink="false">http://www.p51labs.com/?p=122</guid>
		<description><![CDATA[<p>
I had some time the other day and whipped up a quick PHP wrapper for the YES.com API.   Check it out, and let me know of any thoughts you may have on it.</p>
]]></description>
			<content:encoded><![CDATA[<p>
I had some time and so I whipped up a quick PHP wrapper for the <a href="http://api.yes.com/">YES.com API</a>.   This is a pretty cool api if you haven&#8217;t seen it, check it out!   Anyways, you can get the wrapper from the download link below or just copy/paste it.
</p>
<ul class="styled-list">
<li><a href="http://www.p51labs.com/projects/yesapi/YESAPI-Wrapper.zip">YES API PHP Wrapper</a></li>
</ul>
<pre class="brush: php">
&lt; ?php

//  YES API Wrapper version 1.0
//  (c) 2008 Kevin Miller
//
//  This script is freely distributable under the terms of an MIT-style license.

class YESAPIWrapper
{

	const API_URL = &quot;http://api.yes.com&quot;;
	const API_VERSION = &quot;1&quot;;

	public function __construct()
	{
	}

	public function execute($method = null, $options = array())
	{
		if ($this-&gt;allowed_method($method))
		{
			return $this-&gt;fetch(self::API_URL . &quot;/&quot; . self::API_VERSION . &quot;/&quot; . $this-&gt;method . &quot;?&quot; . $this-&gt;options_string($options));
		}
	}

	protected $method;

	protected $allowed_paramaters = array(
		&quot;station&quot; =&gt; array(
			&quot;name&quot; =&gt; true,
			&quot;callback&quot; =&gt; false
		),
		&quot;stations&quot; =&gt; array(
			&quot;match&quot; =&gt; false,
			&quot;freq&quot; =&gt; false,
			&quot;media&quot; =&gt; false,
			&quot;genre&quot; =&gt; false,
			&quot;loc&quot; =&gt; false,
			&quot;max&quot; =&gt; false,
			&quot;callback&quot; =&gt; false
		),
		&quot;log&quot; =&gt; array(
			&quot;name&quot; =&gt; true,
			&quot;ago&quot; =&gt; false,
			&quot;callback&quot; =&gt; false
		),
		&quot;recent&quot; =&gt; array(
			&quot;name&quot; =&gt; false,
			&quot;max&quot; =&gt; false,
			&quot;callback&quot; =&gt; false
		),
		&quot;chart&quot; =&gt; array(
			&quot;name&quot; =&gt; false,
			&quot;date&quot; =&gt; false,
			&quot;genre&quot; =&gt; false,
			&quot;hot&quot; =&gt; false,
			&quot;max&quot; =&gt; false,
			&quot;callback&quot; =&gt; false
		),
		&quot;media&quot; =&gt; array(
			&quot;q&quot; =&gt; false,
			&quot;mid&quot; =&gt; false,
			&quot;callback&quot; =&gt; false
		),
		&quot;related&quot; =&gt; array(
			&quot;mid&quot; =&gt; true,
			&quot;max&quot; =&gt; false,
			&quot;callback&quot; =&gt; false
		),
		&quot;artist&quot; =&gt; array(
			&quot;artist&quot; =&gt; true,
			&quot;callback&quot; =&gt; false
		)
	);

	private function allowed_method($method)
	{
		foreach ($this-&gt;allowed_paramaters as $key =&gt; $value)
		{
			if ($key == $method)
			{
				$this-&gt;method = $method;
				return true;
			}
		}

		throw new Exception($key . &quot; is a required parameter for the method (&quot; . $this-&gt;method . &quot;)!&quot;);
	}

	private function validate_options($options)
	{
		foreach ($this-&gt;allowed_paramaters[$this-&gt;method] as $key =&gt; $value)
		{
			if ($value &amp;&amp; !array_key_exists($key, $options))
			{
				throw new Exception($key . &quot; is a required parameter for the method (&quot; . $this-&gt;method . &quot;)!&quot;);
			}
		}		

		foreach ($options as $key =&gt; $value)
		{
			if (!array_key_exists($key, $this-&gt;allowed_paramaters[$this-&gt;method]))
			{
				throw new Exception($key . &quot; is not an valid parameter for the method (&quot; . $this-&gt;method . &quot;)!&quot;);
			}
		}		

		return true;
	}

	private function options_string($options = array())
	{
		if ($this-&gt;validate_options($options))
		{
			return http_build_query($options);
		}
	}

	private function fetch($url = &quot;&quot;)
	{
		return ($contents = file_get_contents($url)) ? json_decode($contents) : null;
	}

}

?&gt;
</pre>
<ul class="related_post"><li><a href="http://www.p51labs.com/free-yes-radio-api/" title="Free YES Radio API">Free YES Radio API</a></li><li><a href="http://www.p51labs.com/yes-television-widget/" title="YES Television Widget">YES Television Widget</a></li></ul><img src="http://feeds.feedburner.com/~r/p51labs/~4/8qD2gFwduCU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.p51labs.com/yes-api-php-wrapper/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://www.p51labs.com/yes-api-php-wrapper/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=yes-api-php-wrapper</feedburner:origLink></item>
		<item>
		<title>Free YES Radio API</title>
		<link>http://feedproxy.google.com/~r/p51labs/~3/5YwOqc9YFWY/</link>
		<comments>http://www.p51labs.com/free-yes-radio-api/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 09:35:23 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[itunes]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[radio]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.p51labs.com/?p=115</guid>
		<description><![CDATA[<p>
Jeremie Miller has been hard at work over at YES.com.   He has created something really special here, it's an api (JSON/XML) that allows you to get real-time information about <strong>actual physical</strong> Radio Stations.</p>
]]></description>
			<content:encoded><![CDATA[<p>
Jeremie Miller has been hard at work over at <a href="http://api.yes.com">YES.com API</a>.   He has created something really special here, it&#8217;s an api (JSON/XML) that allows you to get real-time information about <strong>actual physical</strong> Radio Stations.   Everything from the current song, to logs, charts, download links, artist &#038; song information and a whole lot more.
</p>
<p>
&#8230;and its <strong>FREE!</strong>
</p>
<p>
This is pretty nice, and really opens up a whole new realm of possible applications for the web.   Especially with the <a href="http://developer.mtvnservices.com/">MTV API</a> that is available now.   Stay tuned to this blog for some widgets/applications being launched soon using this new api.    In the meantime you can check out the new YES widget that uses this api.
</p>
<ul class="styled-list">
<li><a href="http://new.yes.com/">New YES.com (Widget uses new YES.com API)</a></li>
</ul>
<ul class="related_post"><li><a href="http://www.p51labs.com/yes-api-php-wrapper/" title="YES API PHP Wrapper">YES API PHP Wrapper</a></li><li><a href="http://www.p51labs.com/simply-buttons-v2/" title="Simply-Buttons v2">Simply-Buttons v2</a></li><li><a href="http://www.p51labs.com/wordpress-additions-pagination/" title="WP Additions &#8211; Pagination">WP Additions &#8211; Pagination</a></li><li><a href="http://www.p51labs.com/yes-television-widget/" title="YES Television Widget">YES Television Widget</a></li><li><a href="http://www.p51labs.com/upgraded-typography-with-sifr3/" title="Upgraded Typography with sIFR3">Upgraded Typography with sIFR3</a></li><li><a href="http://www.p51labs.com/simply-buttons-technique/" title="Simply-Buttons Technique">Simply-Buttons Technique</a></li></ul><img src="http://feeds.feedburner.com/~r/p51labs/~4/5YwOqc9YFWY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.p51labs.com/free-yes-radio-api/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.p51labs.com/free-yes-radio-api/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=free-yes-radio-api</feedburner:origLink></item>
	</channel>
</rss>

