<?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>dev.enekoalonso.com &#187; demo</title>
	<atom:link href="http://dev.enekoalonso.com/tag/demo/feed/" rel="self" type="application/rss+xml" />
	<link>http://dev.enekoalonso.com</link>
	<description>having fun with code</description>
	<lastBuildDate>Sat, 31 Jul 2010 05:51:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>More WebSockets, now with Python!</title>
		<link>http://dev.enekoalonso.com/2010/05/22/more-websockets-now-with-python/</link>
		<comments>http://dev.enekoalonso.com/2010/05/22/more-websockets-now-with-python/#comments</comments>
		<pubDate>Sun, 23 May 2010 06:41:27 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[client]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[websocket]]></category>
		<category><![CDATA[websockets]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=576</guid>
		<description><![CDATA[A couple of weeks ago, Tim and I worked on a little game/demo using WebSockets and C# (I haven&#8217;t been able to put it online since I do not have a Windows server). It was a lot of fun and we were able to see the potential of WebSockets and how much internet can will [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago, <a href="http://twitter.com/SkullDuggerT">Tim</a> and I worked on a <a href="http://dev.enekoalonso.com/2010/05/03/playing-with-websockets/">little game/demo using WebSockets and C#</a> (I haven&#8217;t been able to put it online since I do not have a Windows server). It was a lot of fun and we were able to see the potential of WebSockets and how much internet <del datetime="2010-05-23T06:09:54+00:00">can</del> will change in the next few years because of them.</p>
<p>Today I spent a couple of hours researching and implementing a WebSocket solution that I could run in my linux servers, and I found this very nice tutorial for creating a Python WebSockets server: <a href="http://yz.mit.edu/wp/web-sockets-tutorial-with-simple-python-server/">http://yz.mit.edu/wp/web-sockets-tutorial-with-simple-python-server/</a></p>
<p>So I took that code and modified to create a very, very basic chat, that broadcasts received messages to all connected clients. You can try it here (as long as the python server is still up): <a href="http://enekoalonso.com/research/html5/websockets/python/">http://enekoalonso.com/research/html5/websockets/python/</a></p>
<p>Here is the client code:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">var</span> form = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&#39;form&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">var</span> msg = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&#39;msg&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">var</span> output = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&#39;serveroutput&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">var</span> s = <span class="kw2">new</span> WebSocket<span class="br0">&#40;</span><span class="st0">&quot;ws://&quot;</span>+window.<span class="me1">location</span>.<span class="me1">hostname</span>+<span class="st0">&quot;:9876/&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;s.<span class="me1">onopen</span> = <span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;opened&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; out<span class="br0">&#40;</span><span class="st0">&#39;Connected.&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;s.<span class="me1">onclose</span> = <span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;closed&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; out<span class="br0">&#40;</span><span class="st0">&#39;Connection closed.&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;s.<span class="me1">onmessage</span> = <span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;got: &quot;</span> + e.<span class="me1">data</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; out<span class="br0">&#40;</span>e.<span class="me1">data</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;form.<span class="me1">onsubmit</span> = <span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; e.<span class="me1">preventDefault</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; msg.<span class="me1">value</span> = <span class="st0">&#39;&#39;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; window.<span class="me1">scrollTop</span> = window.<span class="me1">scrollHeight</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">function</span> sendMsg<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; s.<span class="me1">send</span><span class="br0">&#40;</span>msg.<span class="me1">value</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">function</span> out<span class="br0">&#40;</span>text<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">var</span> el = document.<span class="me1">createElement</span><span class="br0">&#40;</span><span class="st0">&#39;p&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; el.<span class="me1">innerHTML</span> = text;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; output.<span class="me1">appendChild</span><span class="br0">&#40;</span>el<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;msg.<span class="kw3">focus</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>And the server code:</p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1"><span class="co1">#!/usr/bin/env python</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">socket</span>, <span class="kw3">threading</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># httphost = &quot;localhost:8888&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># sockethost = &quot;localhost:9876&quot;</span></div>
</li>
<li class="li1">
<div class="de1">httphost = <span class="st0">&quot;enekoalonso.com&quot;</span></div>
</li>
<li class="li1">
<div class="de1">sockethost = <span class="st0">&quot;enekoalonso.com:9876&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">def</span> handle<span class="br0">&#40;</span>s, addr<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; handsake = <span class="st0">&quot;HTTP/1.1 101 Web Socket Protocol Handshake<span class="es0">\r</span><span class="es0">\n</span>Upgrade: WebSocket<span class="es0">\r</span><span class="es0">\n</span>Connection: Upgrade<span class="es0">\r</span><span class="es0">\n</span>WebSocket-Origin: http://%s<span class="es0">\r</span><span class="es0">\n</span>WebSocket-Location: ws://%s/<span class="es0">\r</span><span class="es0">\n</span>WebSocket-Protocol: sample<span class="es0">\r</span><span class="es0">\n</span><span class="es0">\r</span><span class="es0">\n</span>&quot;</span> <span class="sy0">%</span> <span class="br0">&#40;</span>httphost, sockethost<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; s.<span class="me1">send</span><span class="br0">&#40;</span>handsake<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; data = s.<span class="me1">recv</span><span class="br0">&#40;</span><span class="nu0">1024</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; lock = <span class="kw3">threading</span>.<span class="me1">Lock</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">while</span> <span class="nu0">1</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; data = s.<span class="me1">recv</span><span class="br0">&#40;</span><span class="nu0">1024</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="kw1">not</span> data: <span class="kw1">break</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&#39;Data from&#39;</span>, addr, <span class="st0">&#39;:&#39;</span>, data</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; lock.<span class="me1">acquire</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#91;</span>conn.<span class="me1">send</span><span class="br0">&#40;</span>data<span class="br0">&#41;</span> <span class="kw1">for</span> conn <span class="kw1">in</span> clients<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; lock.<span class="me1">release</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">print</span> <span class="st0">&#39;Client closed:&#39;</span>, addr</div>
</li>
<li class="li1">
<div class="de1">&nbsp; lock.<span class="me1">acquire</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; clients.<span class="me1">remove</span><span class="br0">&#40;</span>s<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; lock.<span class="me1">release</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; s.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">def</span> start_server<span class="br0">&#40;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp;s = <span class="kw3">socket</span>.<span class="kw3">socket</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;s.<span class="me1">setsockopt</span><span class="br0">&#40;</span><span class="kw3">socket</span>.<span class="me1">SOL_SOCKET</span>, <span class="kw3">socket</span>.<span class="me1">SO_REUSEADDR</span>, <span class="nu0">1</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;s.<span class="me1">bind</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="st0">&#39;&#39;</span>, <span class="nu0">9876</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;s.<span class="me1">listen</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">while</span> <span class="nu0">1</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;conn, addr = s.<span class="me1">accept</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">print</span> <span class="st0">&#39;Connected by&#39;</span>, addr</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;clients.<span class="me1">append</span><span class="br0">&#40;</span>conn<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">threading</span>.<span class="me1">Thread</span><span class="br0">&#40;</span>target = handle, args = <span class="br0">&#40;</span>conn,addr<span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">clients = <span class="br0">&#91;</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">start_server<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Check the live demo (be aware WebSockets are only supported by Google Chrome right now): <a href="http://enekoalonso.com/research/html5/websockets/python/">http://enekoalonso.com/research/html5/websockets/python/</a><br />
Open a few tabs and send some text. You should see it appearing in all of them. It will also work if you open the page in multiple browser windows or even if you open the page in different computers.</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>May 3, 2010 -- <a href="http://dev.enekoalonso.com/2010/05/03/playing-with-websockets/" title="Playing with WebSockets">Playing with WebSockets</a> (2)</li><li>May 6, 2010 -- <a href="http://dev.enekoalonso.com/2010/05/06/tech-talks-at-level-studios/" title="Tech talks at LEVEL Studios">Tech talks at LEVEL Studios</a> (0)</li><li>February 19, 2010 -- <a href="http://dev.enekoalonso.com/2010/02/19/having-fun-with-mooml-and-twitter/" title="Having fun with Mooml &#038; Twitter">Having fun with Mooml &#038; Twitter</a> (0)</li><li>July 1, 2010 -- <a href="http://dev.enekoalonso.com/2010/07/01/little-tricks-editing-strings-by-index-in-javascript-and-python/" title="Little tricks: editing strings by index in Javascript and Python">Little tricks: editing strings by index in Javascript and Python</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2010/05/22/more-websockets-now-with-python/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Having fun with Mooml &amp; Twitter</title>
		<link>http://dev.enekoalonso.com/2010/02/19/having-fun-with-mooml-and-twitter/</link>
		<comments>http://dev.enekoalonso.com/2010/02/19/having-fun-with-mooml-and-twitter/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 20:43:54 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[example]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[jsonp]]></category>
		<category><![CDATA[mooml]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[sample]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=472</guid>
		<description><![CDATA[Mooml is a templating engine for Mootools. With it, you can create HTML from Javascript using a very clean syntax. Plus, it is extremely useful when you have to generate repeating elements, since Mooml automatically renders arrays of data multiple times. Let&#8217;s see an example. Searching Twitter Nowadays there are a lot of APIs out [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mootools.net/plugins/p/mooml">Mooml</a> is a templating engine for Mootools. With it, you can create HTML from Javascript using a very clean syntax. Plus, it is extremely useful when you have to generate repeating elements, since Mooml automatically renders arrays of data multiple times. Let&#8217;s see an example.</p>
<h3>Searching Twitter</h3>
<p>Nowadays there are a lot of APIs out there that support JSON or JSONP, which we can use directly from the front end using Javascript. Also, there are other APIs that return tons of JS data, like Google Maps. In this example we are going to be searching Twitter and displaying the search results in a container div, properly rendered as HTML.</p>
<p>The url for searching Twitter is <a href="http://search.twitter.com/search.json?q=mootools&#038;show_user=true">http://search.twitter.com/search.json?q=mootools&#038;show_user=true</a> (searching for Mootools in this case). Check the output:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;results&quot;</span>:<span class="br0">&#91;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="st0">&quot;profile_image_url&quot;</span>:<span class="st0">&quot;http://a3.twimg.com/profile_images/547672997/twitterProfilePhoto_normal.jpg&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="st0">&quot;created_at&quot;</span>:<span class="st0">&quot;Fri, 19 Feb 2010 17:08:55 +0000&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="st0">&quot;from_user&quot;</span>:<span class="st0">&quot;digitalr3bel&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="st0">&quot;to_user_id&quot;</span>:<span class="nu0">1212494</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="st0">&quot;text&quot;</span>:<span class="st0">&quot;@davidwalshblog Hi David &#8211; im a big fan of your site! Can you recommend a good MooTools tutorial for someone who can already program? thx&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="st0">&quot;id&quot;</span>:<span class="nu0">9343656026</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="st0">&quot;from_user_id&quot;</span>:<span class="nu0">23704390</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="st0">&quot;to_user&quot;</span>:<span class="st0">&quot;davidwalshblog&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="st0">&quot;geo&quot;</span>:<span class="kw2">null</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="st0">&quot;iso_language_code&quot;</span>:<span class="st0">&quot;en&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="st0">&quot;source&quot;</span>:<span class="st0">&quot;&lt;a href=&quot;</span>http:<span class="co1">//apiwiki.twitter.com/&quot; rel=&quot;nofollow&quot;&gt;API&lt;/a&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// More results here&#8230;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;max_id&quot;</span>:<span class="nu0">9343656026</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;since_id&quot;</span>:<span class="nu0">0</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;refresh_url&quot;</span>:<span class="st0">&quot;?since_id=9343656026&amp;q=mootools&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;next_page&quot;</span>:<span class="st0">&quot;?page=2&amp;max_id=9343656026&amp;q=mootools&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;results_per_page&quot;</span>:<span class="nu0">15</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;page&quot;</span>:<span class="nu0">1</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;completed_in&quot;</span>:<span class="nu0">0.0352710000000001</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;query&quot;</span>:<span class="st0">&quot;mootools&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>We want to render each result inside out container div. On this example, we will just render the user name, user image and message text. Here is our Mooml template:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1">Mooml.<span class="me1">register</span><span class="br0">&#40;</span><span class="st0">&#39;twitter-search-result&#39;</span>, <span class="kw2">function</span><span class="br0">&#40;</span>entry<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; div<span class="br0">&#40;</span><span class="br0">&#123;</span>id: <span class="st0">&quot;tweet-&quot;</span> + entry.<span class="me1">id</span><span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; img<span class="br0">&#40;</span><span class="br0">&#123;</span>src: entry.<span class="me1">profile_image_url</span>, alt: entry.<span class="me1">from_user</span><span class="br0">&#125;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; span<span class="br0">&#40;</span>entry.<span class="me1">from_user</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; p<span class="br0">&#40;</span>entry.<span class="me1">text</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Since all results are returned into an array, we can pass it directly to Mooml which will render all of the elements in it:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// Data is the JSON response from Twitter</span></div>
</li>
<li class="li1">
<div class="de1">Mooml.<span class="me1">render</span><span class="br0">&#40;</span><span class="st0">&#39;twitter-search-result&#39;</span>, data.<span class="me1">results</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>So, let&#8217;s do a live test. Type something you want to search for and hit the search button to see Mooml in action :)<br />

<p>Search: <input type="text" id="twitter-mooml-search" value="mootools" /> <input type="button" value="search" id="twitter-mooml-search-btn"/></p>
<div id="mooml-twitter-demo" style="width:400px;border:solid 1px #444;font-size:11px;font-face:Arial,Helvetica;margin:0 auto;"></div>

<script type="text/javascript" src="http://enekoalonso.com/lib/mootools-1.2.4-core-nc.js"></script>
<script type="text/javascript" src="http://enekoalonso.com/lib/mooml.js"></script>
<script type="text/javascript">
Mooml.register('twitter-search-result', function(entry) {
  div({id: "tweet-" + entry.id},
    img({src: entry.profile_image_url, alt: entry.from_user}),
    span(entry.from_user),
    p(entry.text)
  );
});

function searchTwitter() {
  new Element('script', {type:'text/javascript', src:'http://search.twitter.com/search.json?q={text}&show_user=true&callback=renderData'.substitute({text:$('twitter-mooml-search').get('value')})}).inject(document.head);
}
function renderData(data) {
  $('mooml-twitter-demo').empty().adopt(Mooml.render('twitter-search-result', data.results));
}
$('twitter-mooml-search-btn').addEvent('click', searchTwitter);
searchTwitter();
</script>
</p>
<p>How cool is that?</p>
<h3>The code</h3>
<p>Ok, so here is the whole code I have used in this post for this mini-demo:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>script type=<span class="st0">&quot;text/javascript&quot;</span> src=<span class="st0">&quot;http://enekoalonso.com/lib/mootools-1.2.4-core-nc.js&quot;</span><span class="sy0">&gt;&lt;/</span>script<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>script type=<span class="st0">&quot;text/javascript&quot;</span> src=<span class="st0">&quot;http://enekoalonso.com/lib/mooml.js&quot;</span><span class="sy0">&gt;&lt;/</span>script<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>script type=<span class="st0">&quot;text/javascript&quot;</span><span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">Mooml.<span class="me1">register</span><span class="br0">&#40;</span><span class="st0">&#39;twitter-search-result&#39;</span>, <span class="kw2">function</span><span class="br0">&#40;</span>entry<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; div<span class="br0">&#40;</span><span class="br0">&#123;</span>id: <span class="st0">&quot;tweet-&quot;</span> + entry.<span class="me1">id</span><span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; img<span class="br0">&#40;</span><span class="br0">&#123;</span>src: entry.<span class="me1">profile_image_url</span>, alt: entry.<span class="me1">from_user</span><span class="br0">&#125;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; span<span class="br0">&#40;</span>entry.<span class="me1">from_user</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; p<span class="br0">&#40;</span>entry.<span class="me1">text</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> searchTwitter<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">new</span> Element<span class="br0">&#40;</span><span class="st0">&#39;script&#39;</span>, <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; type:<span class="st0">&#39;text/javascript&#39;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; src:<span class="st0">&#39;http://search.twitter.com/search.json?q={text}&amp;show_user=true&amp;callback=renderData&#39;</span>.<span class="me1">substitute</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; text:$<span class="br0">&#40;</span><span class="st0">&#39;twitter-mooml-search&#39;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#39;value&#39;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">inject</span><span class="br0">&#40;</span>document.<span class="me1">head</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> renderData<span class="br0">&#40;</span>data<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; $<span class="br0">&#40;</span><span class="st0">&#39;mooml-twitter-demo&#39;</span><span class="br0">&#41;</span>.<span class="me1">empty</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">adopt</span><span class="br0">&#40;</span>Mooml.<span class="me1">render</span><span class="br0">&#40;</span><span class="st0">&#39;twitter-search-result&#39;</span>, data.<span class="me1">results</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span><span class="st0">&#39;twitter-mooml-search-btn&#39;</span><span class="br0">&#41;</span>.<span class="me1">addEvent</span><span class="br0">&#40;</span><span class="st0">&#39;click&#39;</span>, searchTwitter<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">searchTwitter<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>As you can see, the code is very basic and so is the Mooml template. The coolest thing here is that you don&#8217;t need to iterate over the results to render each element.</p>
<p>Have fun!</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>April 28, 2010 -- <a href="http://dev.enekoalonso.com/2010/04/28/mooml-1-2-3-bye-bye-with/" title="Mooml 1.2.3 &#8211; Bye, bye, with()">Mooml 1.2.3 &#8211; Bye, bye, with()</a> (0)</li><li>March 24, 2010 -- <a href="http://dev.enekoalonso.com/2010/03/24/mooml-1-1-no-more-eval-say-hi-to-mooml-template-and-mooml-templates/" title="Mooml 1.1 &#8211; No more eval(), say Hi to Mooml.Template and Mooml.Templates">Mooml 1.1 &#8211; No more eval(), say Hi to Mooml.Template and Mooml.Templates</a> (0)</li><li>March 15, 2010 -- <a href="http://dev.enekoalonso.com/2010/03/15/more-updates-to-mooml-coming-soon/" title="More updates to Mooml coming soon">More updates to Mooml coming soon</a> (0)</li><li>February 1, 2010 -- <a href="http://dev.enekoalonso.com/2010/02/01/mooml-globalize-mooml-template-functions-going-global/" title="Mooml.globalize(): Mooml template functions going global">Mooml.globalize(): Mooml template functions going global</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2010/02/19/having-fun-with-mooml-and-twitter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Repulsive force in Javascript with Mootools draggables</title>
		<link>http://dev.enekoalonso.com/2009/01/04/repulsive-force-in-javascript-with-mootols-draggables/</link>
		<comments>http://dev.enekoalonso.com/2009/01/04/repulsive-force-in-javascript-with-mootols-draggables/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 00:05:24 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[drag]]></category>
		<category><![CDATA[draggable]]></category>
		<category><![CDATA[force]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[repulsive]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=244</guid>
		<description><![CDATA[A couple of days ago I was reading about the Boids demo made by Ben from Coderholic. I though that was very interesting, specially since I hadn&#8217;t heard about boids before. I wanted to create my own version but instead I decided to play only with the repulsive force, making it interactive using Mootools drag [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of days ago I was reading about the <a href="http://www.coderholic.com/javascript-boids/">Boids demo made by Ben from Coderholic</a>. I though that was very interesting, specially since I hadn&#8217;t heard about <a href="http://en.wikipedia.org/wiki/Boids">boids</a> before.</p>
<p>I wanted to create my own version but instead I decided to play only with the <a href="http://en.wikipedia.org/wiki/Repulsive_force_(magnetism)">repulsive force</a>, making it interactive using <a href="http://mootools.net/docs/Plugins/Drag">Mootools drag &#038; drop functionality</a>. When the demo loads, 20 elements will be created and they will start moving on their own, trying to keep the minimum distance with any other element. This distance is configurable, as it is the option to keep the element speed or to make them slow down until they stop. At any time, the user can move elements on the screen dragging them with the mouse.</p>
<p><a href="http://dev.enekoalonso.com/research/repulsive-force.php"><img src="http://dev.enekoalonso.com/wp-content/uploads/2009/01/picture-155-424x300.png" alt="Repulsive Force Demo" title="Repulsive Force Demo" width="424" height="300" class="aligncenter size-medium wp-image-246" /></a></p>
<p>See the <a href="http://dev.enekoalonso.com/research/repulsive-force.php">demo in action</a>.</p>
<h3>Source code</h3>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> <span class="kw1">Item</span> = <span class="kw2">new</span> <span class="kw2">Class</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; Implements: Options,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; options: <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; radius: <span class="nu0">10</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; position: <span class="br0">&#123;</span> x: window.<span class="me1">clientWidth</span><span class="re0">/<span class="nu0">2</span>, y: window.<span class="me1">clientHeight</span><span class="sy0">/|</span>><span class="nu0">2</span> <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; speed: <span class="br0">&#123;</span> x: <span class="nu0">0</span>, y: <span class="nu0">0</span> <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; color: <span class="st0">&#39;#333&#39;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; initialize: <span class="kw2">function</span><span class="br0">&#40;</span>options<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">setOptions</span><span class="br0">&#40;</span>options<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">addToDOM</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> self = <span class="kw1">this</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">dragController</span> = <span class="kw2">new</span> Drag<span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">element</span>, <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; onStart: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; self.<span class="me1">dragging</span> = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; onDrag: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; self.<span class="me1">options</span>.<span class="me1">position</span> = self.<span class="me1">element</span>.<span class="me1">getPosition</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; onComplete: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; self.<span class="me1">options</span>.<span class="me1">position</span> = self.<span class="me1">element</span>.<span class="me1">getPosition</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; self.<span class="me1">speed</span> = <span class="br0">&#123;</span>x:<span class="nu0">0</span>,y:<span class="nu0">0</span><span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; self.<span class="me1">dragging</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">dragging</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; destroy: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">element</span>.<span class="me1">destroy</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">delete</span> <span class="kw1">this</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; addToDOM: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">element</span> = <span class="kw2">new</span> Element<span class="br0">&#40;</span><span class="st0">&#39;div&#39;</span>, <span class="br0">&#123;</span> <span class="st0">&#39;class&#39;</span>: <span class="st0">&#39;item&#39;</span> <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">element</span>.<span class="me1">setStyles</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; background: <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">color</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; height: <span class="nu0">2</span><span class="sy0">*</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">radius</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; width: &nbsp;<span class="nu0">2</span><span class="sy0">*</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">radius</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; left: <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">position</span>.<span class="me1">x</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; top: &nbsp;<span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">position</span>.<span class="me1">y</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="st0">&#39;-moz-border-radius&#39;</span>: Math.<span class="me1">round</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">radius</span><span class="br0">&#41;</span> + <span class="st0">&#39;px&#39;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="st0">&#39;-webkit-border-radius&#39;</span>: Math.<span class="me1">round</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">radius</span><span class="br0">&#41;</span> + <span class="st0">&#39;px&#39;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="st0">&#39;border-radius&#39;</span>: Math.<span class="me1">round</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">radius</span><span class="br0">&#41;</span> + <span class="st0">&#39;px&#39;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">inject</span><span class="br0">&#40;</span>document.<span class="me1">body</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; moveTo: <span class="kw2">function</span><span class="br0">&#40;</span>x, y<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">dragging</span><span class="br0">&#41;</span> <span class="kw1">return</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">position</span>.<span class="me1">x</span> = x;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">position</span>.<span class="me1">y</span> = y;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Check bounds</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">position</span>.<span class="me1">x</span> <span class="sy0">&lt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">position</span>.<span class="me1">x</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">speed</span>.<span class="me1">x</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">position</span>.<span class="me1">x</span> <span class="sy0">&gt;</span> window.<span class="me1">getWidth</span><span class="br0">&#40;</span><span class="br0">&#41;</span> &#8211; <span class="nu0">2</span><span class="sy0">*</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">radius</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">position</span>.<span class="me1">x</span> = window.<span class="me1">getWidth</span><span class="br0">&#40;</span><span class="br0">&#41;</span> &#8211; <span class="nu0">2</span><span class="sy0">*</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">radius</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">speed</span>.<span class="me1">x</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">position</span>.<span class="me1">y</span> <span class="sy0">&lt;</span> $<span class="br0">&#40;</span><span class="st0">&#39;header&#39;</span><span class="br0">&#41;</span>.<span class="me1">getHeight</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">position</span>.<span class="me1">y</span> = $<span class="br0">&#40;</span><span class="st0">&#39;header&#39;</span><span class="br0">&#41;</span>.<span class="me1">getHeight</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">speed</span>.<span class="me1">y</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">position</span>.<span class="me1">y</span> <span class="sy0">&gt;</span> window.<span class="me1">getHeight</span><span class="br0">&#40;</span><span class="br0">&#41;</span> &#8211; <span class="nu0">2</span><span class="sy0">*</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">radius</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">position</span>.<span class="me1">y</span> = window.<span class="me1">getHeight</span><span class="br0">&#40;</span><span class="br0">&#41;</span> &#8211; <span class="nu0">2</span><span class="sy0">*</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">radius</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">speed</span>.<span class="me1">y</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Slow down</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="st0">&#39;chk-slowdown&#39;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#39;checked&#39;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">speed</span>.<span class="me1">x</span> <span class="sy0">*</span>= <span class="nu0">0.7</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">speed</span>.<span class="me1">y</span> <span class="sy0">*</span>= <span class="nu0">0.7</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">speed</span>.<span class="me1">x</span> <span class="sy0">&lt;</span> <span class="nu0">0.001</span><span class="br0">&#41;</span> <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">speed</span>.<span class="me1">x</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">speed</span>.<span class="me1">y</span> <span class="sy0">&lt;</span> <span class="nu0">0.001</span><span class="br0">&#41;</span> <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">speed</span>.<span class="me1">y</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; draw: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">dragging</span><span class="br0">&#41;</span> <span class="kw1">return</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">element</span>.<span class="me1">setStyles</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; left: Math.<span class="me1">round</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">position</span>.<span class="me1">x</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; top: &nbsp;Math.<span class="me1">round</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">position</span>.<span class="me1">y</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> ItemController = <span class="kw2">new</span> <span class="kw2">Class</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">Extends</span>: Thread,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; items: <span class="br0">&#91;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; initialize: <span class="kw2">function</span><span class="br0">&#40;</span>options<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">parent</span><span class="br0">&#40;</span>options<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; addItem: <span class="kw2">function</span><span class="br0">&#40;</span>options<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">items</span>.<span class="me1">push</span><span class="br0">&#40;</span><span class="kw2">new</span> <span class="kw1">Item</span><span class="br0">&#40;</span>options<span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; execute: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">compute</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">draw</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; compute: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> self = <span class="kw1">this</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; self.<span class="me1">items</span>.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>item1, index1<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; self.<span class="me1">items</span>.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>item2, index2<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>index1 <span class="sy0">!</span>= index2<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> distance = <span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; distance.<span class="me1">x</span> = <span class="br0">&#40;</span>item2.<span class="me1">options</span>.<span class="me1">position</span>.<span class="me1">x</span> + item2.<span class="me1">options</span>.<span class="me1">radius</span><span class="br0">&#41;</span> -</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#40;</span>item1.<span class="me1">options</span>.<span class="me1">position</span>.<span class="me1">x</span> + item1.<span class="me1">options</span>.<span class="me1">radius</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; distance.<span class="me1">y</span> = <span class="br0">&#40;</span>item2.<span class="me1">options</span>.<span class="me1">position</span>.<span class="me1">y</span> + item2.<span class="me1">options</span>.<span class="me1">radius</span><span class="br0">&#41;</span> -</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span>item1.<span class="me1">options</span>.<span class="me1">position</span>.<span class="me1">y</span> + item1.<span class="me1">options</span>.<span class="me1">radius</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; distance.<span class="me1">total</span> = Math.<span class="me1">sqrt</span><span class="br0">&#40;</span>Math.<span class="me1">pow</span><span class="br0">&#40;</span>distance.<span class="me1">x</span>, <span class="nu0">2</span><span class="br0">&#41;</span> + Math.<span class="me1">pow</span><span class="br0">&#40;</span>distance.<span class="me1">y</span>, <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>distance.<span class="me1">total</span> <span class="sy0">&lt;</span> $<span class="br0">&#40;</span><span class="st0">&#39;distance&#39;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#39;value&#39;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> angle = Math.<span class="me1">atan2</span><span class="br0">&#40;</span>distance.<span class="me1">y</span>, distance.<span class="me1">x</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> speed = <span class="nu0">1000</span> <span class="sy0">/</span> distance.<span class="me1">total</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; item1.<span class="me1">options</span>.<span class="me1">speed</span>.<span class="me1">x</span> += -speed <span class="sy0">*</span> Math.<span class="me1">cos</span><span class="br0">&#40;</span>angle<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; item1.<span class="me1">options</span>.<span class="me1">speed</span>.<span class="me1">y</span> += -speed <span class="sy0">*</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>angle<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>item1.<span class="me1">options</span>.<span class="me1">speed</span>.<span class="me1">x</span> <span class="sy0">||</span> item1.<span class="me1">options</span>.<span class="me1">speed</span>.<span class="me1">y</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; item1.<span class="me1">moveTo</span><span class="br0">&#40;</span>item1.<span class="me1">options</span>.<span class="me1">position</span>.<span class="me1">x</span> + item1.<span class="me1">options</span>.<span class="me1">speed</span>.<span class="me1">x</span> <span class="sy0">*</span> <span class="br0">&#40;</span>self.<span class="me1">options</span>.<span class="me1">interval</span><span class="sy0">/</span><span class="nu0">1000</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;item1.<span class="me1">options</span>.<span class="me1">position</span>.<span class="me1">y</span> + item1.<span class="me1">options</span>.<span class="me1">speed</span>.<span class="me1">y</span> <span class="sy0">*</span> <span class="br0">&#40;</span>self.<span class="me1">options</span>.<span class="me1">interval</span><span class="sy0">/</span><span class="nu0">1000</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; draw: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">items</span>.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="kw1">item</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">item</span>.<span class="me1">draw</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; addRandom: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">addItem</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; position: <span class="br0">&#123;</span> x: Random.<span class="me1">get</span><span class="br0">&#40;</span><span class="nu0">100</span>,<span class="nu0">500</span><span class="br0">&#41;</span>, y: Random.<span class="me1">get</span><span class="br0">&#40;</span><span class="nu0">100</span>,<span class="nu0">400</span><span class="br0">&#41;</span> <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; color: <span class="st0">&#39;rgb(&#39;</span>+Random.<span class="me1">get</span><span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">255</span><span class="br0">&#41;</span>+<span class="st0">&#39;,&#39;</span>+Random.<span class="me1">get</span><span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">255</span><span class="br0">&#41;</span>+<span class="st0">&#39;,&#39;</span>+Random.<span class="me1">get</span><span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">255</span><span class="br0">&#41;</span>+<span class="st0">&#39;)&#39;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">window.<span class="me1">addEvent</span><span class="br0">&#40;</span><span class="st0">&#39;domready&#39;</span>, <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; window.<span class="me1">system</span> = <span class="kw2">new</span> ItemController<span class="br0">&#40;</span><span class="br0">&#123;</span>autostart: <span class="kw2">true</span>, interval: <span class="nu0">50</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i=<span class="nu0">0</span>;i<span class="sy0">&lt;</span><span class="nu0">20</span>;i++<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; system.<span class="me1">addRandom</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; $<span class="br0">&#40;</span><span class="st0">&#39;btnAddRandom&#39;</span><span class="br0">&#41;</span>.<span class="me1">addEvent</span><span class="br0">&#40;</span><span class="st0">&#39;click&#39;</span>, <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; system.<span class="me1">addRandom</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>The code is very similar to the <a href="http://dev.enekoalonso.com/2008/12/18/gravity-in-the-dom/">Gravity demo</a>, although in this case the attraction becomes repulsion.</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>February 19, 2010 -- <a href="http://dev.enekoalonso.com/2010/02/19/having-fun-with-mooml-and-twitter/" title="Having fun with Mooml &#038; Twitter">Having fun with Mooml &#038; Twitter</a> (0)</li><li>May 22, 2010 -- <a href="http://dev.enekoalonso.com/2010/05/22/more-websockets-now-with-python/" title="More WebSockets, now with Python!">More WebSockets, now with Python!</a> (1)</li><li>April 28, 2010 -- <a href="http://dev.enekoalonso.com/2010/04/28/mooml-1-2-3-bye-bye-with/" title="Mooml 1.2.3 &#8211; Bye, bye, with()">Mooml 1.2.3 &#8211; Bye, bye, with()</a> (0)</li><li>April 14, 2010 -- <a href="http://dev.enekoalonso.com/2010/04/14/getting-unique-timestamps-in-javascript/" title="Getting unique timestamps in Javascript">Getting unique timestamps in Javascript</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2009/01/04/repulsive-force-in-javascript-with-mootols-draggables/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
