<?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>CB1, INC. &#187; dojo</title>
	<atom:link href="http://www.cb1inc.com/category/dojo/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.cb1inc.com</link>
	<description></description>
	<lastBuildDate>Wed, 28 Sep 2011 17:54:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>DojoConf 2011 Recap</title>
		<link>http://www.cb1inc.com/2011/09/28/dojoconf-2011-recap/</link>
		<comments>http://www.cb1inc.com/2011/09/28/dojoconf-2011-recap/#comments</comments>
		<pubDate>Wed, 28 Sep 2011 17:54:54 +0000</pubDate>
		<dc:creator>Chris Barber</dc:creator>
				<category><![CDATA[conferences]]></category>
		<category><![CDATA[dojo]]></category>

		<guid isPermaLink="false">http://www.cb1inc.com/?p=1600</guid>
		<description><![CDATA[The first ever DojoConf held in Washington DC was a huge success. I unfortunately missed about a quarter of the conference due to sleep. I dumped a lot of hours into my presentation about &#8220;The Art of Developing Nano Widgets&#8221; and it must have been worth it because everybody said they liked my talk. So, [...]]]></description>
			<content:encoded><![CDATA[<p>The first ever DojoConf held in Washington DC was a huge success. I unfortunately missed about a quarter of the conference due to sleep.  I dumped a lot of hours into my presentation about &#8220;The Art of Developing Nano Widgets&#8221; and it must have been worth it because everybody said they liked my talk.</p>
<p>So, what is a nano widget? It&#8217;s a lightweight widget that only has the code you use. If you use some tabs on your site, why would you need all that extra code for handling widget destruction, tabs on the bottom, IE6/7 support, child layouts, high contrast accessibility, and so on?</p>
<p>For this presentation, I created a new Dojo library called <em>nano</em> that currently contains a lightweight lightbox, tab container, and accordion container.  You can find the code in my GitHub repo: <a href="https://github.com/cb1kenobi/nano">https://github.com/cb1kenobi/nano</a>.</p>
<p>Here&#8217;s my slides.  NOTE: slides require <strong>Chrome</strong> or <strong>Safari</strong>.</p>
<p><a href="http://talks.cb1inc.com/nano-widgets-dojoconf-2011"><img class="aligncenter" src="/wp-content/uploads/2011/09/nano-widgets-slides.jpg"/></a></p>
<p>DojoConf had a great turnout and was very well organized thanks to the hard work of Chris Williams (<a href="http://twitter.com/voodootikigod">@voodootikigod</a>), Laura Williams (<a href="http://twitter.com/lwilliams">@lwilliams</a>, and the remaining unsung heros. There was some good swag including a little Lego minifig branded with the Dojo logo thanks to LifeImage.</p>
<p>There were many good talks that I listened to.  I really enjoyed <a href="http://twitter.com/clubajax">Mike Wilcox&#8217;s</a> presentation about <a href="http://www.slideshare.net/anm8tr/dojo-html5">Dojo and HTML5</a>.  In short, Dojo plays well with HTML5 forms, SVG, offline storage, and web sockets, but fails with things like semantic tags, audio, and video.  There&#8217;s definitely room for improvement.</p>
<p><a href="http://twitter.com/monteslu">Luis Montes</a> gave a great talk about <a href="http://azprogrammer.com/dojoconf2011">HTML5 Game Development and Dojo</a> (slides require use a modern browser).  He talks about rendering graphics using a canvas element and physics with Box2D.  Along the way, he&#8217;s describing how to leverage Dojo to make things such as object oriented game objects, server communication, and event handling.</p>
<p><a href="http://twitter.com/rmurphey">Rebecca Murphey</a> gave a really interesting talk about <a href="http://www.slideshare.net/rmurphey/dojoconf-building-large-apps">Building Large Apps</a> using Dojo.  She talks about they used Dojo to build Toura, a mobile content creation system.  The big take away here is don&#8217;t build big apps, build several small apps and glue them together.  Break up everything into components and use Dojo&#8217;s excellent event system to wire those components up.</p>
<p>On the last night of DojoConf, a group of us moved the after-after party back to hotel to close out what was a great conference!</p>
<p><img class="aligncenter" src="http://farm7.static.flickr.com/6163/6166732862_f78991528d_z.jpg"/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.cb1inc.com/2011/09/28/dojoconf-2011-recap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Speaking at DojoConf 2011!</title>
		<link>http://www.cb1inc.com/2011/09/08/speaking-at-dojoconf-2011/</link>
		<comments>http://www.cb1inc.com/2011/09/08/speaking-at-dojoconf-2011/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 03:37:17 +0000</pubDate>
		<dc:creator>Chris Barber</dc:creator>
				<category><![CDATA[conferences]]></category>
		<category><![CDATA[dojo]]></category>

		<guid isPermaLink="false">http://www.cb1inc.com/?p=1591</guid>
		<description><![CDATA[You heard right. I will be giving a talk at DojoConf 2011 coming up September 16-17 in Washington DC! I&#8217;ll be talking about &#8220;The Art of Developing Nano Widgets.&#8221; What is a nano widget? It&#8217;s simply a much smaller version of a fully featured Dijit counterpart. My talk will discuss the concept and implementation of [...]]]></description>
			<content:encoded><![CDATA[<p>You heard right. I will be giving a talk at <a href="http://dojoconf.com/">DojoConf 2011</a> coming up September 16-17 in Washington DC!  I&#8217;ll be talking about &#8220;The Art of Developing Nano Widgets.&#8221; What is a nano widget? It&#8217;s simply a much smaller version of a fully featured Dijit counterpart. My talk will discuss the concept and implementation of nano-fying a handful of Dijit widgets.</p>
<p><a href="http://dojoconf.com/"><img class="aligncenter" src="/wp-content/uploads/2011/09/dojoconf.png"/></a></p>
<p>DojoConf is the first real Dojo conference.  There have been Dojo Developer Days in the past, but those are generally planning and decision oriented meetings.  DojoConf is real content and a real <a href="http://dojoconf.com/schedule.html">schedule</a>. There&#8217;s a great lineup of <a href="http://dojoconf.com/speakers.html">speakers</a> and topics.</p>
<p>See you there!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cb1inc.com/2011/09/08/speaking-at-dojoconf-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debugging Dojo Applications Presentation</title>
		<link>http://www.cb1inc.com/2010/02/10/debugging-dojo-applications-presentation/</link>
		<comments>http://www.cb1inc.com/2010/02/10/debugging-dojo-applications-presentation/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 02:33:00 +0000</pubDate>
		<dc:creator>Chris Barber</dc:creator>
				<category><![CDATA[conferences]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[presentations]]></category>

		<guid isPermaLink="false">http://www.cb1inc.com/?p=1321</guid>
		<description><![CDATA[Today I gave a talk at dojo.connect about debugging dojo applications. The talk actually covered a few thing that weren&#8217;t necessarily &#8220;debugging&#8221; related, but still had some good tips. Besure to check out the slides!]]></description>
			<content:encoded><![CDATA[<p>Today I gave a talk at dojo.connect about debugging dojo applications. The talk actually covered a few thing that weren&#8217;t necessarily &#8220;debugging&#8221; related, but still had some good tips. Besure to check out the slides!</p>
<div style="margin:0 auto;width:425px;"><object style="margin:0;" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=debuggingdojoapplications2-10-2010-100210141004-phpapp01&#038;stripped_title=debugging-dojo-applications-2102010" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=debuggingdojoapplications2-10-2010-100210141004-phpapp01&#038;stripped_title=debugging-dojo-applications-2102010" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
]]></content:encoded>
			<wfw:commentRss>http://www.cb1inc.com/2010/02/10/debugging-dojo-applications-presentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Speaking at dojo.connect Online Conference</title>
		<link>http://www.cb1inc.com/2010/02/08/speaking-at-dojo-connect-online-conference/</link>
		<comments>http://www.cb1inc.com/2010/02/08/speaking-at-dojo-connect-online-conference/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 17:03:05 +0000</pubDate>
		<dc:creator>Chris Barber</dc:creator>
				<category><![CDATA[conferences]]></category>
		<category><![CDATA[dojo]]></category>

		<guid isPermaLink="false">http://www.cb1inc.com/?p=1313</guid>
		<description><![CDATA[The first dojo.connect online conference is coming up this week February 10-12, 2010. I&#8217;ll be giving a talk about Debugging Dojo Applications. I&#8217;ll be covering the following: Common mistakes and how to avoid them Web browser debug tools Built-in Dojo debugging tools Methods for finding and fixing syntax issues or malformed data Writing tests to [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" title="dojo-connect-2010" src="/wp-content/uploads/2010/02/dojo-connect-2010.jpg" alt="dojo.connect" width="600" height="188" /></p>
<p>The first dojo.connect online conference is coming up this week February 10-12, 2010.  I&#8217;ll be giving a talk about <a href="http://www.widespreadconferences.com/#Speaker/cbarber">Debugging Dojo Applications</a>.  I&#8217;ll be covering the following:</p>
<ul>
<li>Common mistakes and how to avoid them</li>
<li>Web browser debug tools</li>
<li>Built-in Dojo debugging tools</li>
<li>Methods for finding and fixing syntax issues or malformed data</li>
<li>Writing tests to trap specific bugs</li>
</ul>
<p>There is still room left, so head over to <a href="http://www.widespreadconferences.com/">http://www.widespreadconferences.com/</a> and sign up today!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cb1inc.com/2010/02/08/speaking-at-dojo-connect-online-conference/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing the LightboxNano for Dojo!</title>
		<link>http://www.cb1inc.com/2008/10/14/introducing-the-lightboxnano-for-dojo/</link>
		<comments>http://www.cb1inc.com/2008/10/14/introducing-the-lightboxnano-for-dojo/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 20:36:34 +0000</pubDate>
		<dc:creator>Chris Barber</dc:creator>
				<category><![CDATA[dojo]]></category>
		<category><![CDATA[lightboxnano]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[<p>I saw a really neat lightweight lightbox a while ago and decided to make a version for Dojo.  I've dubbed this version the LightboxNano because it is under 2K over the wire after a build and being gzip'd.</p>

<p>The LightboxNano is <em>not</em> a <code>dijit._Widget</code>.  It is designed to be very lightweight and only requires Dojo core and <code>dojo.fx</code>. The LightboxNano was coded for Dojo 1.2, but should work with past versions with little or no modifications.</p>

<h3>Features</h3>

<p>For being so small, it packs a handful of features:</p>

<ul>
<li>Automatically resizes large images to fit in browser window.</li>
<li>Preloads the larger image to make loading faster.</li>
<li>Keyboard accessible.</li>
<li>Instantly makes your website awesome.</li>
</ul>

<h3>Example</h3>

<p>The LightboxNano is really easy to use.  Here's an example:</p>

<pre><code>&#60;script src="/path/to/dojo.js" type="text/javascript"&#62;&#60;/script&#62;
&#60;script type="text/javascript"&#62;
    dojo.require("dojo.parser");
    dojo.require("dojox.image.LightboxNano");
&#60;/script&#62;

&#60;a dojoType="dojox.image.LightboxNano" href="/path/to/large/image.jpg"&#62;
    &#60;img src="/path/to/small/image.jpg"&#62;
&#60;/a&#62;</code></pre>

<p>To see it in action, click the image below:</p>

<?
$url = 'http://farm4.static.flickr.com/3270/2881707822_46f76966e4.jpg';
if(strtolower(arg(0)) == 'rss.xml'){
    $url = 'http://www.cb1inc.com/2008/10/14/introducing-the-lightboxnano-for-dojo';
}
?>

<div align="center"><a dojoType="dojox.image.LightboxNano" 
href="<?= $url ?>" id="exampleLightboxNano" style="width:240px;height:180px;"><img src="http://farm4.static.flickr.com/3270/2881707822_46f76966e4_m.jpg" width="240" height="180"></a></div>

<h3>Styling</h3>

<p>When the LightboxNano is created, it adds two <code>&#60;div&#62;</code> tags inside the anchor tag: one for the enlarge icon and one for the loading icon. For example, you can define styles like this:</p>

<pre><code>a:hover .dojoxEnlarge {
    display: block !important;
}
.dojoxEnlarge {
    background: url(images/enlarge.png) no-repeat 0 0;
    top: -5px;
    left: -5px;
    margin: 0 !important;
    width: 16px;
    height: 16px;
}
.dojoxLoading {
    background: #333 url(images/loading-dark.gif) no-repeat center center;
    border-radius: 5px;
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    border: 2px solid #000;
    height: 24px;
    opacity: 0.8;
    filter: alpha(opacity=80);
    padding: 6px;
    width: 24px;
}</code></pre>

<h3>Usage</h3>

<p>You can declaratively create the LightboxNano using a dojoType on an <code>&#60;a&#62;</code> or <code>&#60;img&#62;</code> tag.  Or you can choose to programatically create the LightboxNano:</p>

<pre><code>&#60;script type="text/javascript"&#62;
    dojo.addOnLoad(function(){
        new LightboxNano({
            href: "/path/to/large/image.jpg"
        }, "myLink");
    });
&#60;/script&#62;

&#60;a id="myLink" href="/path/to/large/image.jpg"&#62;
    &#60;img src="/path/to/small/image.jpg"&#62;
&#60;/a&#62;</code></pre>

<p>If you want to access it for some reason, you'll need to use its <code><a href="http://dojocampus.org/content/2008/05/06/jsid-dijitbyid-and-dojobyid/">jsId</a></code>.</p>

<h3>Parameters</h3>

<p><b>href</b> - String<br />
URL to the large image to show in the lightbox.</p>

<p><b>duration</b> - int<br />
The delay in milliseconds of the LighboxNano open and close animation.</p>

<p><b>preloadDelay</b> - int<br />
The delay in milliseconds after the LightboxNano is created before preloading the larger image.</p>

<h3>File Sizes</h3>

<p>The LightboxNano is pretty small, but it relies on several other core Dojo components.  If you do a custom Dojo build containing the LightboxNano and <code>dojo.parser</code>, the <code>dojo.js</code> is 96KB. If you enable HTTP compression on the web server, you can get that down to a nice 32KB.</p>

<h3>Limitations</h3>

<ul>
<li>The LightboxNano does not reposition itself when the browser window is resize or scrolled.</li>
<li>In IE6, drop down select lists bleed through the LighboxNano layer. This can be fixed with an iframe shim.  This was skipped to keep the size down and because we all want IE6 to just go away.</li>
</ul>

<h3>Future Improvements</h3>

<p>There's always things that can be done to improve the LightboxNano.  Here's a couple ideas and you're welcome to make suggestions in the comments.</p>

<ul>
<li>Add support for displaying a caption.</li>
<li>Add support for <code>dojox.embed</code> to play Flash or Quicktime movies.</li>
</ul>

<h3>Try it Today!</h3>

<p>You can download the LightboxNano files here: <a href="http://www.cb1inc.com/files/LightboxNano.tar.gz">LightboxNano.tar.gz</a> [594KB].  Soon, the LightboxNano will be in dojox, so you won't need to install it separately.</p>

<p>You can view the original test page here: <a href="http://www.cb1inc.com/dojo-1.2/dojox/image/tests/test_LightboxNano.html">http://www.cb1inc.com/dojo-1.2/dojox/image/tests/test_LightboxNano.html</a>.</p>

<p>If you end up using the LightboxNano, feel free to link to your site so everyone can see your new awesome website!</p>
]]></description>
			<content:encoded><![CDATA[<p>I saw a really neat lightweight lightbox a while ago and decided to make a version for Dojo.  I&#8217;ve dubbed this version the LightboxNano because it is under 2K over the wire after a build and being gzip&#8217;d.</p>
<p>The LightboxNano is <em>not</em> a <code>dijit._Widget</code>.  It is designed to be very lightweight and only requires Dojo core and <code>dojo.fx</code>. The LightboxNano was coded for Dojo 1.2, but should work with past versions with little or no modifications.</p>
<h3>Features</h3>
<p>For being so small, it packs a handful of features:</p>
<ul>
<li>Automatically resizes large images to fit in browser window.</li>
<li>Preloads the larger image to make loading faster.</li>
<li>Keyboard accessible.</li>
<li>Instantly makes your website awesome.</li>
</ul>
<h3>Example</h3>
<p>The LightboxNano is really easy to use.  Here&#8217;s an example:</p>
<pre class="brush: jscript; title: ;">
&lt;script src=&quot;/path/to/dojo.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
    dojo.require(&quot;dojo.parser&quot;);
    dojo.require(&quot;dojox.image.LightboxNano&quot;);
&lt;/script&gt;

&lt;a dojoType=&quot;dojox.image.LightboxNano&quot; href=&quot;/path/to/large/image.jpg&quot;&gt;
    &lt;img src=&quot;/path/to/small/image.jpg&quot;&gt;
&lt;/a&gt;
</pre>
<p>To see it in action, click the image below:</p>
<p><script type="text/javascript">
dojo.addOnLoad(function(){
  var n=dojo.byId("exampleLightboxNano");
  new dojox.image.LightboxNano({href:"http://farm4.static.flickr.com/3270/2881707822_46f76966e4.jpg"}, n);
});
</script></p>
<div align="center"><a href="/2008/10/14/introducing-the-lightboxnano-for-dojo" id="exampleLightboxNano" style="width:240px;height:180px;"><img src="http://farm4.static.flickr.com/3270/2881707822_46f76966e4_m.jpg" width="240" height="180"></a></div>
<h3>Styling</h3>
<p>When the LightboxNano is created, it adds two <code>&lt;div&gt;</code> tags inside the anchor tag: one for the enlarge icon and one for the loading icon. For example, you can define styles like this:</p>
<pre class="brush: css; title: ;">
a:hover .dojoxEnlarge {
    display: block !important;
}
.dojoxEnlarge {
    background: url(images/enlarge.png) no-repeat 0 0;
    top: -5px;
    left: -5px;
    margin: 0 !important;
    width: 16px;
    height: 16px;
}
.dojoxLoading {
    background: #333 url(images/loading-dark.gif) no-repeat center center;
    border-radius: 5px;
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    border: 2px solid #000;
    height: 24px;
    opacity: 0.8;
    filter: alpha(opacity=80);
    padding: 6px;
    width: 24px;
}
</pre>
<h3>Usage</h3>
<p>You can declaratively create the LightboxNano using a dojoType on an <code>&lt;a&gt;</code> or <code>&lt;img&gt;</code> tag.  Or you can choose to programatically create the LightboxNano:</p>
<pre class="brush: jscript; title: ;">
&lt;script type=&quot;text/javascript&quot;&gt;
    dojo.addOnLoad(function(){
        new LightboxNano({
            href: &quot;/path/to/large/image.jpg&quot;
        }, &quot;myLink&quot;);
    });
&lt;/script&gt;

&lt;a id=&quot;myLink&quot; href=&quot;/path/to/large/image.jpg&quot;&gt;
    &lt;img src=&quot;/path/to/small/image.jpg&quot;&gt;
&lt;/a&gt;
</pre>
<p>If you want to access it for some reason, you&#8217;ll need to use its <code><a href="http://dojocampus.org/content/2008/05/06/jsid-dijitbyid-and-dojobyid/">jsId</a></code>.</p>
<h3>Parameters</h3>
<p><b>href</b> &#8211; String<br />
URL to the large image to show in the lightbox.</p>
<p><b>duration</b> &#8211; int<br />
The delay in milliseconds of the LighboxNano open and close animation.</p>
<p><b>preloadDelay</b> &#8211; int<br />
The delay in milliseconds after the LightboxNano is created before preloading the larger image.</p>
<h3>File Sizes</h3>
<p>The LightboxNano is pretty small, but it relies on several other core Dojo components.  If you do a custom Dojo build containing the LightboxNano and <code>dojo.parser</code>, the <code>dojo.js</code> is 96KB. If you enable HTTP compression on the web server, you can get that down to a nice 32KB.</p>
<h3>Limitations</h3>
<ul>
<li>The LightboxNano does not reposition itself when the browser window is resize or scrolled.</li>
<li>In IE6, drop down select lists bleed through the LighboxNano layer. This can be fixed with an iframe shim.  This was skipped to keep the size down and because we all want IE6 to just go away.</li>
</ul>
<h3>Future Improvements</h3>
<p>There&#8217;s always things that can be done to improve the LightboxNano.  Here&#8217;s a couple ideas and you&#8217;re welcome to make suggestions in the comments.</p>
<ul>
<li>Add support for displaying a caption.</li>
<li>Add support for <code>dojox.embed</code> to play Flash or Quicktime movies.</li>
</ul>
<h3>Try it Today!</h3>
<p>You can download the LightboxNano files here: <a href="/files/LightboxNano.tar.gz">LightboxNano.tar.gz</a> [594KB].  Soon, the LightboxNano will be in dojox, so you won&#8217;t need to install it separately.</p>
<p>You can view the original test page here: <a href="http://download.dojotoolkit.org/release-1.3.1/dojo-release-1.3.1/dojox/image/tests/test_LightboxNano.html">http://download.dojotoolkit.org/release-1.3.1/dojo-release-1.3.1/dojox/image/tests/test_LightboxNano.html</a>.</p>
<p>If you end up using the LightboxNano, feel free to link to your site so everyone can see your new awesome website!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cb1inc.com/2008/10/14/introducing-the-lightboxnano-for-dojo/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Integrating Google AJAX Search API on Your Website</title>
		<link>http://www.cb1inc.com/2008/09/11/integrating-google-ajax-search-api-on-your-website/</link>
		<comments>http://www.cb1inc.com/2008/09/11/integrating-google-ajax-search-api-on-your-website/#comments</comments>
		<pubDate>Thu, 11 Sep 2008 02:47:40 +0000</pubDate>
		<dc:creator>Chris Barber</dc:creator>
				<category><![CDATA[dojo]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[I recently had to integrate search capabilities into a website I worked on.  I chose to use the <a href="http://code.google.com/apis/ajaxsearch/">Google AJAX Search API</a>.  I needed the form field display to be very customized and clean.  I do leverage the <a href="http://dojotoolkit.org">Dojo Javascript Toolkit</a> to help with the boilerplate DOM and event stuff.

<div align="center"><img alt="Search Form" src="/sites/default/blog/20080910-searchform.gif"/></div>

The first thing you need to do is <a href="http://code.google.com/apis/ajaxsearch/signup.html">sign up for a new key</a>:

<div align="center"><a href="http://code.google.com/apis/ajaxsearch/signup.html"><img alt="Sign-up for an AJAX Search API Key" src="/sites/default/blog/20080910-signuppage.gif"/></a></div>

Once you get the key, you're ready to start coding your own custom search form.

Begin by adding the the following to your <code>&#60;head&#62;</code> tag:

<pre><code>&#60;script src="http://www.google.com/jsapi?key=&#60;KEY GOES HERE&#62;"
    type="text/javascript"&#62;&#60;/script&#62;</code></pre>

Since my example uses Dojo, you need to include Dojo for my code to work.  If you don't already use Dojo, you can simply include it by adding the following to the &#60;head&#62;:

<pre><code>&#60;script src="http://o.aolcdn.com/dojo/1.1.1/dojo/dojo.xd.js"
    type="text/javascript"&#62;&#60;/script&#62;</code></pre>

Next we need to add our code that performs the search. First tell the Google API to load the search API:

<pre><code>&#60;script type="text/javascript"&#62;
google.load("search", "1", {"nocss":true,"nooldnames":true});</code></pre>

Next we need to initialize our page when the page loads:

<pre><code>dojo.addOnLoad(function(){
    var results = dojo.byId("results");
    var cursor = dojo.byId("cursor");
    var ws = new google.search.WebSearch();
    ws.setNoHtmlGeneration();</code></pre>

Be sure to set the domain you want to search.  The LARGE_RESULTSET will return the maximum number of results Google allows, which is usually 8 results.

<pre><code>    ws.setSiteRestriction("example.com");
    ws.setResultSetSize(google.search.Search.LARGE_RESULTSET);</code></pre>

Next we need to tell the <code>WebSearch</code> object the function we want called after the results are returned.  The 3rd argument to <code>setSearchCompleteCallback()</code> is an array with a reference to our <code>WebSearch</code> instance.  This array gets passed to our callback function when the callback is fired.

<pre><code>    ws.setSearchCompleteCallback(null, function(w){
        if(!w.results){return;}
        results.innerHTML = "";
        cursor.innerHTML = "";
        var d = dojo.doc.createElement("div");
        results.appendChild(d);
        for(var i=0,len=w.results.length; i&#60;len; i++){
            var r = w.results[i];</code></pre>

Our <code>WebSearch</code> object has a <code>createResultHtml()</code> function that creates an the DOM nodes of our result, but it adds a bunch of crap and forces the result to open in a new window.  So, to fix that, we use Dojo to go clean up the nodes before adding them to the page.

<pre><code>            w.createResultHtml(r);
            if(r.html){
                var n = r.html.cloneNode(true);
                dojo.query(".gs-visibleUrl", n).forEach(function(p){
                    p.parentNode.removeChild(p);
                });
                dojo.query(".gs-watermark", n).forEach(function(p){
                    p.parentNode.removeChild(p);
                });
                dojo.query("a", n).forEach(function(p){
                    if(p.getAttribute("target")){
                        p.removeAttribute("target");
                    }
                });
                results.appendChild(n);
            }
        }
        if(w.cursor){
            var cn = dojo.doc.createElement("div");
            cn.className = "gsc-cursor";
            var label = dojo.doc.createElement("div");
            label.innerHTML = "Pages:";
            label.className = "label";
            cn.appendChild(label);
            for(var i=0, len=w.cursor.pages.length; i&#60;len; i++){
                var pn = dojo.doc.createElement("div");
                pn.className = "gsc-cursor-page";
                if(i == w.cursor.currentPageIndex){
                    pn.className += " gsc-cursor-current-page";
                }
                pn.innerHTML = w.cursor.pages[i].label;
                pn.idx = i;
                dojo.connect(pn, "onclick", function(evt){
                    ws.gotoPage(evt.target.idx);
                });
                cn.appendChild(pn);
            }
            cursor.appendChild(cn);
        }
    }, [ws]);</code></pre>

If you want to execute a search when the page loads, then you can fire <code>execute()</code> with the criteria.

<pre><code>    ws.execute("");</code></pre>

Finally we need to wire up the search button and form.  We don't care about the event details, we just want to execute the search for the current value in the search criteria field.

<pre><code>    function query(evt){
        dojo.stopEvent(evt);
        ws.execute(dojo.trim(dojo.byId("searchCriteria").value));
    }
    dojo.connect(dojo.byId("searchButton"), "onclick", query);
    dojo.connect(dojo.byId("searchForm"), "onsubmit", query);
});
&#60;/script&#62;</code></pre>

In the body of your page, add the following markup to define the form:

<pre><code>&#60;div&#62;
    &#60;form id="searchForm"&#62;
        &#60;input type="text" autocomplete="off" id="searchCriteria" value=""/&#62;
        &#60;a href="#" id="searchButton"&#62;&#60;span&#62;Search&#60;/span&#62;&#60;/a&#62;
    &#60;/form&#62;
&#60;/div&#62;
&#60;div id="results"&#62;&#60;/div&#62;
&#60;div id="cursor"&#62;&#60;/div&#62;</code></pre>

For clarity, I removed all styling.  One thing you'll notice is the "Search" button is an <code>&#60;a&#62;</code> tag instead of an <code>&#60;input&#62;</code> tag so that it could be more easily be styled.

Aside from our text field and search button, there are some CSS styles you can tweak for the search results and pagination:

<pre><code>&#60;style type="text/css"&#62;
.gs-result{padding:6px 0;}
.gsc-cursor{display:inline;padding:10px 0;}
.gsc-cursor .label{color:#000;display:inline;font-weight:bold;margin-right:8px;}
.gsc-cursor-page{cursor:pointer;color:#00F;display:inline;margin-right:8px;
text-decoration:underline;}
.gsc-cursor-current-page{color:#000;font-weight:bold;text-decoration:none;}
&#60;/style&#62;</code></pre>

That's all there is to it.  Load the page up and do a search!

<div align="center"><img alt="Search Results" src="/sites/default/blog/20080910-searchresults.gif"/></div>
]]></description>
			<content:encoded><![CDATA[<p>I recently had to integrate search capabilities into a website I worked on.  I chose to use the <a href="http://code.google.com/apis/ajaxsearch/">Google AJAX Search API</a>.  I needed the form field display to be very customized and clean.  I do leverage the <a href="http://dojotoolkit.org">Dojo Javascript Toolkit</a> to help with the boilerplate DOM and event stuff.</p>
<div align="center"><img alt="Search Form" src="/wp-content/uploads/2009/12/20080910-searchform.gif"/></div>
<p>The first thing you need to do is <a href="http://code.google.com/apis/ajaxsearch/signup.html">sign up for a new key</a>:</p>
<div align="center"><a href="http://code.google.com/apis/ajaxsearch/signup.html"><img alt="Sign-up for an AJAX Search API Key" src="/wp-content/uploads/2009/12/20080910-signuppage.gif"/></a></div>
<p>Once you get the key, you&#8217;re ready to start coding your own custom search form.</p>
<p>Begin by adding the the following to your <code>&lt;head&gt;</code> tag:</p>
<pre class="brush: xml; title: ;">
&lt;script src=&quot;http://www.google.com/jsapi?key=&lt;KEY GOES HERE&gt;&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<p>Since my example uses Dojo, you need to include Dojo for my code to work.  If you don&#8217;t already use Dojo, you can simply include it by adding the following to the &lt;head&gt;:</p>
<pre class="brush: xml; title: ;">
&lt;script src=&quot;http://o.aolcdn.com/dojo/1.1.1/dojo/dojo.xd.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<p>Next we need to add our code that performs the search. First tell the Google API to load the search API:</p>
<pre class="brush: xml; title: ;">
&lt;script type=&quot;text/javascript&quot;&gt;
google.load(&quot;search&quot;, &quot;1&quot;, {&quot;nocss&quot;:true,&quot;nooldnames&quot;:true});
</pre>
<p>Next we need to initialize our page when the page loads:</p>
<pre class="brush: jscript; title: ;">
dojo.addOnLoad(function(){
    var results = dojo.byId(&quot;results&quot;);
    var cursor = dojo.byId(&quot;cursor&quot;);
    var ws = new google.search.WebSearch();
    ws.setNoHtmlGeneration();
</pre>
<p>Be sure to set the domain you want to search.  The LARGE_RESULTSET will return the maximum number of results Google allows, which is usually 8 results.</p>
<pre class="brush: jscript; title: ;">
    ws.setSiteRestriction(&quot;example.com&quot;);
    ws.setResultSetSize(google.search.Search.LARGE_RESULTSET);
</pre>
<p>Next we need to tell the <code>WebSearch</code> object the function we want called after the results are returned.  The 3rd argument to <code>setSearchCompleteCallback()</code> is an array with a reference to our <code>WebSearch</code> instance.  This array gets passed to our callback function when the callback is fired.</p>
<pre class="brush: jscript; title: ;">
    ws.setSearchCompleteCallback(null, function(w){
        if(!w.results){return;}
        results.innerHTML = &quot;&quot;;
        cursor.innerHTML = &quot;&quot;;
        var d = dojo.doc.createElement(&quot;div&quot;);
        results.appendChild(d);
        for(var i=0,len=w.results.length; i&amp;lt;len; i++){
            var r = w.results[i];
</pre>
<p>Our <code>WebSearch</code> object has a <code>createResultHtml()</code> function that creates an the DOM nodes of our result, but it adds a bunch of crap and forces the result to open in a new window.  So, to fix that, we use Dojo to go clean up the nodes before adding them to the page.</p>
<pre class="brush: jscript; title: ;">
            w.createResultHtml(r);
            if(r.html){
                var n = r.html.cloneNode(true);
                dojo.query(&quot;.gs-visibleUrl&quot;, n).forEach(function(p){
                    p.parentNode.removeChild(p);
                });
                dojo.query(&quot;.gs-watermark&quot;, n).forEach(function(p){
                    p.parentNode.removeChild(p);
                });
                dojo.query(&quot;a&quot;, n).forEach(function(p){
                    if(p.getAttribute(&quot;target&quot;)){
                        p.removeAttribute(&quot;target&quot;);
                    }
                });
                results.appendChild(n);
            }
        }
        if(w.cursor){
            var cn = dojo.doc.createElement(&quot;div&quot;);
            cn.className = &quot;gsc-cursor&quot;;
            var label = dojo.doc.createElement(&quot;div&quot;);
            label.innerHTML = &quot;Pages:&quot;;
            label.className = &quot;label&quot;;
            cn.appendChild(label);
            for(var i=0, len=w.cursor.pages.length; i&amp;lt;len; i++){
                var pn = dojo.doc.createElement(&quot;div&quot;);
                pn.className = &quot;gsc-cursor-page&quot;;
                if(i == w.cursor.currentPageIndex){
                    pn.className += &quot; gsc-cursor-current-page&quot;;
                }
                pn.innerHTML = w.cursor.pages[i].label;
                pn.idx = i;
                dojo.connect(pn, &quot;onclick&quot;, function(evt){
                    ws.gotoPage(evt.target.idx);
                });
                cn.appendChild(pn);
            }
            cursor.appendChild(cn);
        }
    }, [ws]);
</pre>
<p>If you want to execute a search when the page loads, then you can fire <code>execute()</code> with the criteria.</p>
<pre class="brush: jscript; title: ;">
    ws.execute(&quot;&quot;);
</pre>
<p>Finally we need to wire up the search button and form.  We don&#8217;t care about the event details, we just want to execute the search for the current value in the search criteria field.</p>
<pre class="brush: jscript; title: ;">
    function query(evt){
        dojo.stopEvent(evt);
        ws.execute(dojo.trim(dojo.byId(&quot;searchCriteria&quot;).value));
    }
    dojo.connect(dojo.byId(&quot;searchButton&quot;), &quot;onclick&quot;, query);
    dojo.connect(dojo.byId(&quot;searchForm&quot;), &quot;onsubmit&quot;, query);
});
&lt;/script&gt;
</pre>
<p>In the body of your page, add the following markup to define the form:</p>
<pre class="brush: xml; title: ;">
&lt;div&gt;
    &lt;form id=&quot;searchForm&quot;&gt;
        &lt;input type=&quot;text&quot; autocomplete=&quot;off&quot; id=&quot;searchCriteria&quot; value=&quot;&quot;/&gt;
        &lt;a href=&quot;#&quot; id=&quot;searchButton&quot;&gt;&lt;span&gt;Search&lt;/span&gt;&lt;/a&gt;
    &lt;/form&gt;
&lt;/div&gt;
&lt;div id=&quot;results&quot;&gt;&lt;/div&gt;
&lt;div id=&quot;cursor&quot;&gt;&lt;/div&gt;
</pre>
<p>For clarity, I removed all styling.  One thing you&#8217;ll notice is the &#8220;Search&#8221; button is an <code>&lt;a&gt;</code> tag instead of an <code>&lt;input&gt;</code> tag so that it could be more easily be styled.</p>
<p>Aside from our text field and search button, there are some CSS styles you can tweak for the search results and pagination:</p>
<pre class="brush: css; title: ;">
&lt;style type=&quot;text/css&quot;&gt;
.gs-result{padding:6px 0;}
.gsc-cursor{display:inline;padding:10px 0;}
.gsc-cursor .label{color:#000;display:inline;font-weight:bold;margin-right:8px;}
.gsc-cursor-page{cursor:pointer;color:#00F;display:inline;margin-right:8px;
text-decoration:underline;}
.gsc-cursor-current-page{color:#000;font-weight:bold;text-decoration:none;}
&lt;/style&gt;
</pre>
<p>That&#8217;s all there is to it.  Load the page up and do a search!</p>
<div align="center"><img alt="Search Results" src="/wp-content/uploads/2009/12/20080910-searchresults.gif"/></div>
]]></content:encoded>
			<wfw:commentRss>http://www.cb1inc.com/2008/09/11/integrating-google-ajax-search-api-on-your-website/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Meet the RotatorContainer</title>
		<link>http://www.cb1inc.com/2008/04/25/meet-the-rotatorcontainer/</link>
		<comments>http://www.cb1inc.com/2008/04/25/meet-the-rotatorcontainer/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 23:27:44 +0000</pubDate>
		<dc:creator>Chris Barber</dc:creator>
				<category><![CDATA[dojo]]></category>
		<category><![CDATA[uncategorized]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[I've been sitting on this code for a while and decided to clean it up and submit it to the <a href="http://dojotoolkit.org">Dojo Javascript Toolkit</a>.

The RotatorContainer cycles through <code>dijit.layout.ContentPane</code>s and provides navigation in the form of tabs or a pager.  There a number of timing settings you can adjust as well as the layout of the controls.

<div align="center"><img src="http://www.cb1inc.com/sites/default/blog/20080425-rotator.png"/></div>

<a href="http://www.cb1inc.com/dojo-1.1.0-build/dojox/layout/tests/test_RotatorContainer.html">Give it a try!</a>  You can also see it in action on the front page of <a href="http://www.cb1inc.com">http://www.cb1inc.com</a>.

I <a href="http://trac.dojotoolkit.org/ticket/6612">submitted this widget</a>, so it may or may not be accepted.  In the meantime, you can download the RotatorContainer here: <a href="http://www.cb1inc.com/sites/default/RotatorContainer.tar.gz">RotatorContainer.tar.gz</a> [9KB] To install it, extract it into your dijit's parent directory.

Here's how you can use it:

<pre><code>&#60;script type="text/javascript"&#62;
dojo.require("dojo.parser");
dojo.require("dijit.layout.ContentPane");
dojo.require("dojox.layout.RotatorContainer");
&#60;/script&#62;

&#60;div dojoType="dojox.layout.RotatorContainer" id="myRotator" showTabs="true"
      autoStart="true" transitionDelay="5000"&#62;
    &#60;div dojoType="dijit.layout.ContentPane" title="1"&#62;
        Pane 1!
    &#60;/div&#62;
    &#60;div dojoType="dijit.layout.ContentPane" title="2"&#62;
        Pane 2!
    &#60;/div&#62;
    &#60;div dojoType="dijit.layout.ContentPane" title="3"&#62;
        Pane 3!
    &#60;/div&#62;
&#60;/div&#62;
</code></pre>

NOTE: There is some CSS needed to make the RotatorContainer look correct.  Include or copy the contents of the <a href="http://www.cb1inc.com/dojo-1.1.0/dojox/layout/resources/RotatorContainer.css">dijit/layout/resources/RotatorContainer.css</a> into your CSS file.

The magic happens once you have some content.  It takes a bit of time to tweak things, but you can pretty much do anything you can imagine.

The RotatorContainer can be controlled by a pager which includes a play/pause button, next and previous button, and the current and total panes.  You can also have as many pagers as you'd like.  The pager code looks like this:

<pre><code>&#60;script type="text/javascript"&#62;
dojo.require("dijit.form.Button");
&#60;/script&#62;

&#60;div dojoType="dojox.layout.RotatorPager" rotatorId="myRotator">
    &#60;button dojoType="dijit.form.Button" dojoAttachPoint="previous"&#62;Prev&#60;/button&#62;
    &#60;button dojoType="dijit.form.ToggleButton" dojoAttachPoint="playPause"&#62;&#60;/button&#62;
    &#60;button dojoType="dijit.form.Button" dojoAttachPoint="next"&#62;Next&#60;/button&#62;
    &#60;span dojoAttachPoint="current"&#62;&#60;/span&#62; / &#60;span dojoAttachPoint="total"&#62;&#60;/span&#62;
&#60;/div&#62;
</code></pre>

One thing I should note, if this widget should find it's way into dojox, it's possible the name or functionality will change.

If time permitted, I would have liked to add additional transitions such as a left-to-right wipe.  Oh well.

Enjoy!]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been sitting on this code for a while and decided to clean it up and submit it to the <a href="http://dojotoolkit.org">Dojo Javascript Toolkit</a>.</p>
<p>The RotatorContainer cycles through <code>dijit.layout.ContentPane</code>s and provides navigation in the form of tabs or a pager.  There a number of timing settings you can adjust as well as the layout of the controls.</p>
<div align="center"><img src="/wp-content/uploads/2009/12/20080425-rotator1.png"/></div>
<p><a href="http://download.dojotoolkit.org/release-1.2.0/dojo-release-1.2.0/dojox/layout/tests/test_RotatorContainer.html">Give it a try!</a></p>
<p>Here&#8217;s how you can use it:</p>
<pre class="brush: xml; title: ;">
&lt;script type=&quot;text/javascript&quot;&gt;
dojo.require(&quot;dojo.parser&quot;);
dojo.require(&quot;dijit.layout.ContentPane&quot;);
dojo.require(&quot;dojox.layout.RotatorContainer&quot;);
&lt;/script&gt;

&lt;div dojoType=&quot;dojox.layout.RotatorContainer&quot; id=&quot;myRotator&quot; showTabs=&quot;true&quot;
      autoStart=&quot;true&quot; transitionDelay=&quot;5000&quot;&gt;
    &lt;div dojoType=&quot;dijit.layout.ContentPane&quot; title=&quot;1&quot;&gt;
        Pane 1!
    &lt;/div&gt;
    &lt;div dojoType=&quot;dijit.layout.ContentPane&quot; title=&quot;2&quot;&gt;
        Pane 2!
    &lt;/div&gt;
    &lt;div dojoType=&quot;dijit.layout.ContentPane&quot; title=&quot;3&quot;&gt;
        Pane 3!
    &lt;/div&gt;
&lt;/div&gt;
</pre>
<p>NOTE: There is some CSS needed to make the RotatorContainer look correct.  Include or copy the contents of the <a href="http://download.dojotoolkit.org/release-1.2.0/dojo-release-1.2.0/dojox/layout/resources/RotatorContainer.css">dojox/layout/resources/RotatorContainer.css</a> into your CSS file.</p>
<p>The magic happens once you have some content.  It takes a bit of time to tweak things, but you can pretty much do anything you can imagine.</p>
<p>The RotatorContainer can be controlled by a pager which includes a play/pause button, next and previous button, and the current and total panes.  You can also have as many pagers as you&#8217;d like.  The pager code looks like this:</p>
<pre class="brush: xml; title: ;">
&lt;script type=&quot;text/javascript&quot;&gt;
dojo.require(&quot;dijit.form.Button&quot;);
&lt;/script&gt;

&lt;div dojoType=&quot;dojox.layout.RotatorPager&quot; rotatorId=&quot;myRotator&quot;&gt;
    &lt;button dojoType=&quot;dijit.form.Button&quot; dojoAttachPoint=&quot;previous&quot;&gt;Prev&lt;/button&gt;
    &lt;button dojoType=&quot;dijit.form.ToggleButton&quot; dojoAttachPoint=&quot;playPause&quot;&gt;&lt;/button&gt;
    &lt;button dojoType=&quot;dijit.form.Button&quot; dojoAttachPoint=&quot;next&quot;&gt;Next&lt;/button&gt;
    &lt;span dojoAttachPoint=&quot;current&quot;&gt;&lt;/span&gt; / &lt;span dojoAttachPoint=&quot;total&quot;&gt;&lt;/span&gt;
&lt;/div&gt;
</pre>
<p>One thing I should note, if this widget should find it&#8217;s way into dojox, it&#8217;s possible the name or functionality will change.</p>
<p>If time permitted, I would have liked to add additional transitions such as a left-to-right wipe.  Oh well.</p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cb1inc.com/2008/04/25/meet-the-rotatorcontainer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dojo Toolkit Module v2.1 Released!</title>
		<link>http://www.cb1inc.com/2007/11/09/dojo-toolkit-module-v2-1-released/</link>
		<comments>http://www.cb1inc.com/2007/11/09/dojo-toolkit-module-v2-1-released/#comments</comments>
		<pubDate>Fri, 09 Nov 2007 06:13:11 +0000</pubDate>
		<dc:creator>Chris Barber</dc:creator>
				<category><![CDATA[dojo]]></category>
		<category><![CDATA[dojo toolkit module]]></category>
		<category><![CDATA[drupal]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[<a href="http://dojotoolkit.org/2007/11/05/dojo-1-0">Dojo 1.0</a> is out now and you know what that means... version 2.1 of the Dojo Toolkit Module is now available with support for Dojo 1.0.  There's been a bunch of testing and it looks to be pretty solid, so give it a shot:

<ul><li><a href="http://www.cb1inc.com/sites/default/dojo-module/dojo_toolkit_module-5.x-2.1.tar.gz">dojo_toolkit_module-5.x-2.1.tar.gz</a> (56KB)</li></ul>

What's new in v2.1:
<ul><li>Upgraded Dojo code to Dojo 1.0.0</li>
<li>Added option to force Dojo to load on all pages</li>
<li>Fixed bug with applying profile weights</li>
<li>Fixed bug with Dojo Toolkit Module settings page in IE</li>
<li>Fixed bug displaying duplicate roles for each profile on settings page</li>
<li>Fixed typos in documentation</li>
<li>Added stripos() function for PHP4 users</li></ul>

For additional information, visit the Dojo Toolkit Module project page at <a href="http://www.cb1inc.com/open-source/dojo-toolkit-module">http://www.cb1inc.com/open-source/dojo-toolkit-module</a>. The <a href="http://www.cb1inc.com/open-source/dojo-toolkit-module/documentation">documentation</a>  has been updated to cover the latest features. If you should have any issues, please report them in the <a href="http://www.cb1inc.com/open-source/dojo-toolkit-module/forum">forum</a>.]]></description>
			<content:encoded><![CDATA[<p><a href="http://dojotoolkit.org/2007/11/05/dojo-1-0">Dojo 1.0</a> is out now and you know what that means&#8230; version 2.1 of the Dojo Toolkit Module is now available with support for Dojo 1.0.  There&#8217;s been a bunch of testing and it looks to be pretty solid, so give it a shot:</p>
<ul>
<li><a href="http://dojo-toolkit-module.googlecode.com/files/dojo_toolkit_module-5.x-2.1.tar.gz">dojo_toolkit_module-5.x-2.1.tar.gz</a> (53.5KB)</li>
</ul>
<p>What&#8217;s new in v2.1:</p>
<ul>
<li>Upgraded Dojo code to Dojo 1.0.0</li>
<li>Added option to force Dojo to load on all pages</li>
<li>Fixed bug with applying profile weights</li>
<li>Fixed bug with Dojo Toolkit Module settings page in IE</li>
<li>Fixed bug displaying duplicate roles for each profile on settings page</li>
<li>Fixed typos in documentation</li>
<li>Added stripos() function for PHP4 users</li>
</ul>
<p>For additional information, visit the Dojo Toolkit Module project page at <span class="bad-link">http://www.cb1inc.com/open-source/dojo-toolkit-module</span>. The documentation has been updated to cover the latest features. If you should have any issues, please report them in the forum.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cb1inc.com/2007/11/09/dojo-toolkit-module-v2-1-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dojo Toolkit Module v2.0 Released and more!</title>
		<link>http://www.cb1inc.com/2007/10/15/dojo-toolkit-module-v2-0-released-and-more/</link>
		<comments>http://www.cb1inc.com/2007/10/15/dojo-toolkit-module-v2-0-released-and-more/#comments</comments>
		<pubDate>Mon, 15 Oct 2007 06:30:02 +0000</pubDate>
		<dc:creator>Chris Barber</dc:creator>
				<category><![CDATA[dojo]]></category>
		<category><![CDATA[dojo toolkit module]]></category>
		<category><![CDATA[drupal]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[It has been a couple months since the last post and there has been much going on.  For starters, version 2.0 of the Dojo Toolkit Module for Drupal has been released.  It has undergone a bunch of testing and looks pretty good.

<a class="cb1-track-link" href="http://www.cb1inc.com/sites/default/dojo-module/dojo_toolkit_module-5.x-2.0.tar.gz">dojo_toolkit_module-5.x-2.0.tar.gz</a> (52.4KB)

What's new in v2.0:
<ul><li>Added support for Dojo 0.9.0</li>
<li>Added support for defining a Dijit theme</li>
<li>Includes build profiles for local and CDN custom builds</li>
<li>Fixed bug with support for prefixed table names</li>
<li>Changed license from GPLv2 to AFL/BSD</li></ul>

I know it doesn't seem like much and I might be forgetting a few items, but with the port from Dojo 0.4.3 to Dojo 0.9.0, a lot of code was re-written.

In addition, I decided to change the license for this module to the same license as the <a href="http://dojotoolkit.org">Dojo Toolkit</a> because it just didn't feel like the Dojo Toolkit Module had the same spirit as Dojo.  Since this module is no longer GPLv2, I cannot submit this module to Drupal's CVS repository, but luckily I've set up a public Subversion repository: <a href="http://svn.cb1inc.com/dojo-module">http://svn.cb1inc.com/dojo-module</a>.

The Dojo Toolkit Module has a new home at <a href="http://www.cb1inc.com/open-source/dojo-toolkit-module">http://www.cb1inc.com/open-source/dojo-toolkit-module</a>. The <a href="http://www.cb1inc.com/open-source/dojo-toolkit-module/documentation">documentation</a> is partially updated.  The build profiles and editor profiles information is a little out of date.  All of the examples are still Dojo 0.4.3, but I'll be updating these soon.  If you should have any issues, please report them in the <a href="http://www.cb1inc.com/open-source/dojo-toolkit-module/forum">forum</a>.

In other news, the CB1, INC. website received a much needed face lift.  It is still not 100% IE friendly, but it is better than before.  If time permits, I could fix it, but it is certainly not a high priority.

Finally, we have started two new open source projects.  The first is a nameless <a href="http://www.cb1inc.com/open-source/cms">content management system</a> (CMS).  There are tons of CMS applications out there, but I think there is still room for improvement.  The other project is <a href="http://www.cb1inc.com/open-source/coma">Coma</a>, an enterprise comet server.  There will be more information about these two projects in the near future.]]></description>
			<content:encoded><![CDATA[<p>It has been a couple months since the last post and there has been much going on.  For starters, version 2.0 of the Dojo Toolkit Module for Drupal has been released.  It has undergone a bunch of testing and looks pretty good.</p>
<p><a href="http://dojo-toolkit-module.googlecode.com/files/dojo_toolkit_module-5.x-2.0.tar.gz">dojo_toolkit_module-5.x-2.0.tar.gz</a> (52.5KB)</p>
<p>What&#8217;s new in v2.0:</p>
<ul>
<li>Added support for Dojo 0.9.0</li>
<li>Added support for defining a Dijit theme</li>
<li>Includes build profiles for local and CDN custom builds</li>
<li>Fixed bug with support for prefixed table names</li>
<li>Changed license from GPLv2 to AFL/BSD</li>
</ul>
<p>I know it doesn&#8217;t seem like much and I might be forgetting a few items, but with the port from Dojo 0.4.3 to Dojo 0.9.0, a lot of code was re-written.</p>
<p>In addition, I decided to change the license for this module to the same license as the <a href="http://dojotoolkit.org">Dojo Toolkit</a> because it just didn&#8217;t feel like the Dojo Toolkit Module had the same spirit as Dojo.  Since this module is no longer GPLv2, I cannot submit this module to Drupal&#8217;s CVS repository.</p>
<p>The Dojo Toolkit Module has a new home at <span class="bad-link">http://www.cb1inc.com/open-source/dojo-toolkit-module</span>. The documentation is partially updated.  The build profiles and editor profiles information is a little out of date.  All of the examples are still Dojo 0.4.3, but I&#8217;ll be updating these soon.  If you should have any issues, please report them in the forum.</p>
<p>In other news, the CB1, INC. website received a much needed face lift.  It is still not 100% IE friendly, but it is better than before.  If time permits, I could fix it, but it is certainly not a high priority.</p>
<p>Finally, we have started two new open source projects.  The first is a nameless content management system.  There are tons of CMS applications out there, but I think there is still room for improvement.  The other project is Coma, an enterprise comet server.  There will be more information about these two projects in the near future.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cb1inc.com/2007/10/15/dojo-toolkit-module-v2-0-released-and-more/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dojo Toolkit Module v1.2 Released!</title>
		<link>http://www.cb1inc.com/2007/07/12/dojo-toolkit-module-v1-2-released/</link>
		<comments>http://www.cb1inc.com/2007/07/12/dojo-toolkit-module-v1-2-released/#comments</comments>
		<pubDate>Thu, 12 Jul 2007 15:20:57 +0000</pubDate>
		<dc:creator>Chris Barber</dc:creator>
				<category><![CDATA[dojo]]></category>
		<category><![CDATA[dojo toolkit module]]></category>
		<category><![CDATA[drupal]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[I've had v1.2 almost done for a couple months, but I just didn't have the time to polish it up.  Well, good news!  It's done!
<div align="center"><a class="cb1-track-link" href="http://cb1inc.com/sites/default/dojo-module/dojo_toolkit-5.x-1.2-dev.tar.gz"><img src="http://cb1inc.com/sites/default/dojo-module/download-1_2.png"></a></div>So, whats new?

<ul><li>Added uninstall logic</li>
<li>Fixed access roles for both config and editor profiles</li>
<li>Fixed visibility for both config and editor profiles</li>
<li>Fixed tree images pre-loading URLs on Subversion repository page</li>
<li>Added support for Dojo Toolkit 0.4.3</li>
<li>Added ability to tie config profiles to pages</li>
<li>Removed support for djConfig.debugAtAllCosts - didn't work anyways</li></ul>

The Dojo Toolkit Module homepage can be found at <a href="http://cb1inc.com/open-source/dojo-toolkit-module">http://cb1inc.com/open-source/dojo-toolkit-module</a>.&#160; The <a href="http://cb1inc.com/open-source/dojo-toolkit-module/documentation">documentation</a> has not been updated and still refers to v1.1.  I'm planning on skipping the v1.2 documentation updates and wait until v1.3 is done, then do a bunch of updates to the documentation.  If you should have any issues, please report them in the <a href="http://cb1inc.com/open-source/dojo-toolkit-module/forum">forum</a>.

Recently the Dojo Toolkit gang has released 0.9 beta and I've already begun working on v1.3 which switches from v0.4.3 to v0.9 and should have another release soon!]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve had v1.2 almost done for a couple months, but I just didn&#8217;t have the time to polish it up.  Well, good news!  It&#8217;s done!</p>
<ul>
<li><a href="http://dojo-toolkit-module.googlecode.com/files/dojo_toolkit-5.x-1.2-dev.tar.gz">http://dojo-toolkit-module.googlecode.com/files/dojo_toolkit-5.x-1.2-dev.tar.gz</a></li>
</ul>
<p>So, whats new?</p>
<ul>
<li>Added uninstall logic</li>
<li>Fixed access roles for both config and editor profiles</li>
<li>Fixed visibility for both config and editor profiles</li>
<li>Fixed tree images pre-loading URLs on Subversion repository page</li>
<li>Added support for Dojo Toolkit 0.4.3</li>
<li>Added ability to tie config profiles to pages</li>
<li>Removed support for djConfig.debugAtAllCosts &#8211; didn&#8217;t work anyways</li>
</ul>
<p>The Dojo Toolkit Module homepage can be found at <a href="http://code.google.com/p/dojo-toolkit-module/">http://code.google.com/p/dojo-toolkit-module/</a>. The documentation has not been updated and still refers to v1.1.  I&#8217;m planning on skipping the v1.2 documentation updates and wait until v1.3 is done, then do a bunch of updates to the documentation.  If you should have any issues, please report them in the forum.</p>
<p>Recently the Dojo Toolkit gang has released 0.9 beta and I&#8217;ve already begun working on v1.3 which switches from v0.4.3 to v0.9 and should have another release soon!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cb1inc.com/2007/07/12/dojo-toolkit-module-v1-2-released/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

