<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: ecmascript code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Tue, 20 May 2008 13:50:01 GMT</pubDate>
    <description>DZone Snippets: ecmascript code</description>
    <item>
      <title>Externally reference ECMAScript in an SVG file</title>
      <link>http://snippets.dzone.com/posts/show/5408</link>
      <description>source: &lt;a href="http://www.it.rit.edu/~jxs/svg/tutorials/scripting.html"&gt;Using Internal &amp; External Scripts,&lt;/a&gt; [rit.edu]&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;script type="text/ecmascript" xlink:href="scripts/changeCircle.js"/&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 20 Apr 2008 19:21:59 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5408</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>Extract the filename from a URL</title>
      <link>http://snippets.dzone.com/posts/show/5407</link>
      <description>This ECMAScript extracts the filename from a URL. eg. the filename 'index4.svg' would be extracted from the document.URL with the value 'http://rorbuilder.info/r/whiteboardqueue/index4.svg'.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var regexp = /(\w|[-.])+$/&lt;br /&gt;str = document.URL&lt;br /&gt;a = regexp.exec(str)&lt;br /&gt;alert(a[0])&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Reference: &lt;a href="http://www.webreference.com/js/column5/methods.html"&gt;Regular Expressions: Methods - Doc JavaScript&lt;/a&gt; [webreference.com]</description>
      <pubDate>Sun, 20 Apr 2008 15:24:54 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5407</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>Undo the last shape stored in the whiteboard message buffer</title>
      <link>http://snippets.dzone.com/posts/show/5335</link>
      <description>This ECMAScript implements an undo feature for the SVG whiteboard. When the user presses CTRL+Z the last shape in the message_buffer variable is removed.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  function undoLast() {&lt;br /&gt;    ipos = getLastMethodPos(message_buffer,-1)&lt;br /&gt;    if (ipos &gt; 0)&lt;br /&gt;      message_buffer = message_buffer.substring(0, ipos)&lt;br /&gt;    else&lt;br /&gt;      message_buffer = ''    &lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  function getLastMethodPos(message, pos) {&lt;br /&gt;    i = message.indexOf('&lt;method', pos+1)&lt;br /&gt;    if (i &gt;= 0) &lt;br /&gt;      result = getLastMethodPos(message, i)&lt;br /&gt;    else&lt;br /&gt;      result = pos &lt;br /&gt;    return result;&lt;br /&gt;  }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Here's an example of the messages (containing shapes) stored in the message_buffer&lt;br /&gt;&lt;code&gt;&lt;br /&gt;"&lt;method name='create'&gt;&lt;params&gt;&lt;param var='type'&gt;shape&lt;/param&gt;&lt;param var='body'&gt;&lt;br /&gt;polyline%20x%3D%27524%27%20y%3D%27198%27%20fill%3D%27none%27%20stroke%3D%27red%27%20id%3D&lt;br /&gt;%27348553%27%20stroke-width%3D%272%27%20points%3D%27524%2C198%20523%2C198%20522%2C198%20521%2C198%20&lt;br /&gt;513%2C198%20511%2C198%20503%2C198%20495%2C200%20493%2C200%20485%2C204%20483%2C205%20475%2C207%20474%&lt;br /&gt;2C208%20470%2C212%20466%2C216%20465%2C217%20464%2C219%20463%2C220%20463%2C222%20463%2C223%20463%2C22&lt;br /&gt;5%20463%2C226%20463%2C228%20464%2C230%20465%2C231%20466%2C233%20467%2C234%20471%2C238%20472%2C238%20&lt;br /&gt;478%2C242%20484%2C246%20485%2C247%20488%2C247%20489%2C248%20491%2C248%20493%2C249%20496%2C249%20497%&lt;br /&gt;2C249%20505%2C249%20515%2C249%20521%2C247%20531%2C245%20533%2C245%20539%2C243%20547%2C243%20548%2C24&lt;br /&gt;3%20550%2C242%20555%2C237%20556%2C237%20557%2C235%20558%2C234%20558%2C233%20559%2C231%20559%2C230%20&lt;br /&gt;560%2C228%20560%2C226%20560%2C222%20559%2C221%20559%2C220%20559%2C219%20559%2C217%20559%2C216%20558%&lt;br /&gt;2C215%20558%2C214%20556%2C208%20555%2C206%20555%2C205%20553%2C199%20549%2C191%20547%2C185%20546%2C18&lt;br /&gt;4%20544%2C176%20540%2C170%20539%2C168%20535%2C162%20534%2C161%20528%2C155%20528%2C154%20524%2C148%20&lt;br /&gt;518%2C144%20517%2C143%20511%2C139%20509%2C138%20501%2C134%20499%2C133%20491%2C129%20489%2C129%20479%&lt;br /&gt;2C129%20469%2C129%20467%2C129%20459%2C129%20457%2C129%20454%2C129%20452%2C129%20446%2C131%20438%2C13&lt;br /&gt;1%20437%2C132%20435%2C132%20435%2C133%20434%2C133%20434%2C134%20433%2C134%20433%2C135%27%23%3A&lt;br /&gt;&lt;/param&gt;&lt;param var='sender'&gt;34855&lt;/param&gt;&lt;/params&gt;&lt;/method&gt;&lt;method name='create'&gt;&lt;params&gt;&lt;param &lt;br /&gt;var='type'&gt;shape&lt;/param&gt;&lt;param var='body'&gt;polyline%20x%3D%27457%27%20y%3D%27175%27%20fill%3D%27none&lt;br /&gt;%27%20stroke%3D%27red%27%20id%3D&lt;br /&gt;%27348554%27%20stroke-width%3D%272%27%20points%3D%27457%2C175%20456%2C175%20455%2C176%20454%2C176%20&lt;br /&gt;453%2C177%20452%2C177%20451%2C177%20449%2C178%20448%2C179%20442%2C181%20440%2C183%20438%2C184%20438%&lt;br /&gt;2C185%20437%2C186%20436%2C187%20435%2C189%20435%2C191%20434%2C193%20434%2C194%20433%2C195%20433%2C19&lt;br /&gt;6%20431%2C200%20431%2C201%20431%2C203%20431%2C205%20431%2C206%20431%2C207%20431%2C208%20431%2C209%20&lt;br /&gt;431%2C210%20431%2C211%20431%2C212%20431%2C213%20431%2C214%20431%2C215%20431%2C216%20431%2C217%20432%&lt;br /&gt;2C223%20432%2C224%20432%2C225%20432%2C226%20433%2C226%20433%2C227%20433%2C228%20433%2C229%20434%2C22&lt;br /&gt;9%20434%2C230%20435%2C231%20435%2C233%20435%2C234%20436%2C235%20437%2C236%20437%2C237%20438%2C237%20&lt;br /&gt;438%2C238%20438%2C239%20438%2C240%20439%2C240%20439%2C241%20443%2C245%20444%2C246%20444%2C247%20445%&lt;br /&gt;2C247%20446%2C248%20447%2C248%20448%2C248%20448%2C249%20449%2C249%20450%2C250%20451%2C251%20452%2C25&lt;br /&gt;2%20454%2C253%20455%2C253%20461%2C255%20462%2C255%20464%2C256%20466%2C256%20467%2C257%20469%2C257%20&lt;br /&gt;469%2C258%20471%2C259%20472%2C259%20474%2C260%20475%2C260%20477%2C261%20478%2C261%20480%2C262%20481%&lt;br /&gt;2C262%20481%2C263%20482%2C263%20483%2C263%20484%2C263%20485%2C263%20486%2C263%20489%2C263%20491%2C26&lt;br /&gt;3%20492%2C263%20495%2C263%20496%2C263%20502%2C261%20504%2C261%20507%2C261%20509%2C261%20510%2C261%20&lt;br /&gt;511%2C261%20512%2C261%20513%2C261%20515%2C261%20517%2C261%20518%2C261%20520%2C260%20523%2C260%20524%&lt;br /&gt;2C260%20526%2C259%20528%2C259%20529%2C259%20534%2C258%20535%2C258%20536%2C257%20537%2C257%20538%2C25&lt;br /&gt;7%20540%2C257%27%23%3A&lt;/param&gt;&lt;param var='sender'&gt;34855&lt;/param&gt;&lt;/params&gt;&lt;/method&gt;"&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;In the above example there are 2 methods calls ready to be sent to the server, the 2nd method would be removed after the undoLast() function had executed.&lt;br /&gt;&lt;br /&gt;The methods are ready to be passed to the function getLatestMessages which passes the request through the ProjectX API, which then returns the results. &lt;br /&gt;&lt;br /&gt;This code only removes the shape before it's sent to the server, I still need to write the code to delete a shape which is in the server whiteboardqueue, and remove the shape element from the web browser display (SVG DOM).</description>
      <pubDate>Mon, 07 Apr 2008 23:42:40 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5335</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>Instruct a shared whiteboard to save and refresh</title>
      <link>http://snippets.dzone.com/posts/show/5284</link>
      <description>The following code used with the ProjectX API informs the client web browser that the whiteboard will be refreshed in 5 seconds. It then archives the current whiteboard information, formats it, and sends a message to each web browser to refresh their view.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;project name="whiteboardqueue"&gt;&lt;br /&gt;  &lt;methods&gt;&lt;br /&gt;    &lt;method name="create"&gt;&lt;br /&gt;      &lt;params&gt;&lt;br /&gt;        &lt;param var="type"&gt;ecmascript&lt;/param&gt;&lt;br /&gt;        &lt;param var="body"&gt;startRefresh(5)&lt;/param&gt;&lt;br /&gt;        &lt;param var="sender"&gt;system&lt;/param&gt;&lt;br /&gt;      &lt;/params&gt;&lt;br /&gt;    &lt;/method&gt;&lt;br /&gt;    &lt;method name="timer"&gt;&lt;br /&gt;      &lt;params&gt;&lt;br /&gt;        &lt;param var="timer"&gt;5&lt;/param&gt;&lt;br /&gt;      &lt;/params&gt;&lt;br /&gt;    &lt;/method&gt;&lt;br /&gt;    &lt;method name="archive_and_format"&gt;&lt;br /&gt;      &lt;params/&gt;&lt;br /&gt;    &lt;/method&gt;&lt;br /&gt;    &lt;method name="create"&gt;&lt;br /&gt;      &lt;params&gt;&lt;br /&gt;        &lt;param var="type"&gt;ecmascript&lt;/param&gt;&lt;br /&gt;        &lt;param var="body"&gt;reloadDocument()&lt;/param&gt;&lt;br /&gt;        &lt;param var="sender"&gt;system&lt;/param&gt;&lt;br /&gt;      &lt;/params&gt;&lt;br /&gt;    &lt;/method&gt;&lt;br /&gt;  &lt;/methods&gt;&lt;br /&gt;&lt;/project&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;*update 1:14am*&lt;br /&gt;The &lt;a href="http://rorbuilder.info/r/whiteboardqueue/index2.svg"&gt;whiteboard demo&lt;/a&gt; [rorbuilder.info] allows the user to draw using the mouse within the web browser which renders SVG. Tested on Flock and Firefox.&lt;br /&gt;&lt;br /&gt;*update 4:42pm 28 Mar 08*&lt;br /&gt;You can also view the &lt;a href="http://rorbuilder.info/whiteboardqueue/whiteboardqueue_data.xml?passthru=1"&gt;whiteboard message queue&lt;/a&gt; [rorbuilder.info].&lt;br /&gt;&lt;br /&gt;*update 6:29pm Mar 08*&lt;br /&gt;I've created a short url (http://rubyurl.com/vxHD) (to demonstrate the cleaning of the whiteboard) which redirects to this http://rorbuilder.info/api/projectx.cgi?xml_project=&lt;project name="whiteboardqueue"&gt;&lt;methods&gt;&lt;method name="create"&gt;&lt;params&gt;&lt;param var="type"&gt;ecmascript&lt;/param&gt;&lt;param var="body"&gt;startRefresh(5)&lt;/param&gt;&lt;param var="sender"&gt;system&lt;/param&gt;&lt;/params&gt;&lt;/method&gt;&lt;method name="timer"&gt;&lt;params&gt;&lt;param var="timer"&gt;5&lt;/param&gt;&lt;/params&gt;&lt;/method&gt;&lt;method name="archive_and_format"&gt;&lt;params/&gt;&lt;/method&gt;&lt;method name="create"&gt;&lt;params&gt;&lt;param var="type"&gt;ecmascript&lt;/param&gt;&lt;param var="body"&gt;reloadDocument()&lt;/param&gt;&lt;param var="sender"&gt;system&lt;/param&gt;&lt;/params&gt;&lt;/method&gt;&lt;/methods&gt;&lt;/project&gt;&lt;br /&gt;&lt;br /&gt;I've </description>
      <pubDate>Thu, 27 Mar 2008 19:14:07 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5284</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>Drawing a single Polyline using SVG</title>
      <link>http://snippets.dzone.com/posts/show/5270</link>
      <description>This code is very similar to &lt;a href="http://snippets.dzone.com/posts/show/5269"&gt;Draw a series of lines using SVG&lt;/a&gt; [dzone.com] but now we can draw a series of points at the same time the mouse button is pressed and is moving. Here's an &lt;a href="http://twitxr.com/image/18451/"&gt;example of the SVG squiggle output&lt;/a&gt; [twitxr.com].&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;svg	xmlns="http://www.w3.org/2000/svg" width="100%"&lt;br /&gt;		xmlns:xlink="http://www.w3.org/1999/xlink" &gt;&lt;br /&gt;  &lt;g id="sketch" class="sketch"&gt;&lt;br /&gt;&lt;br /&gt;    &lt;rect x="0"&lt;br /&gt;y="0" width="100%" height="100%" fill="yellow" /&gt;&lt;br /&gt;  &lt;/g&gt;&lt;br /&gt;&lt;br /&gt;  &lt;script&gt;&lt;br /&gt;  &lt;![CDATA[&lt;br /&gt;  var	xmlns="http://www.w3.org/2000/svg"&lt;br /&gt;  Root=document.documentElement&lt;br /&gt;  on_start(Root)&lt;br /&gt;&lt;br /&gt;  function mouseUp(evt) {&lt;br /&gt;	  on_pen_up(Root);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  function on_start(R){&lt;br /&gt;	  var Attr={&lt;br /&gt;	    "onmousemove":"mouseMove",&lt;br /&gt;      "onmousedown":"add_line(evt)",	&lt;br /&gt;      "onmouseup":"mouseUp"&lt;br /&gt;	  }&lt;br /&gt;	  assignAttr(R,Attr)&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  function on_pen_down(R){&lt;br /&gt;	  var Attr={&lt;br /&gt;	    "onmousemove":"addPoint(evt)",&lt;br /&gt;	    "onmouseup":"on_pen_up(Root)"&lt;br /&gt;	  }&lt;br /&gt;	  assignAttr(R,Attr)&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  function on_pen_up(R){&lt;br /&gt;	  var Attr={&lt;br /&gt;	    "onmousemove":"null"&lt;br /&gt;	  }&lt;br /&gt;	  assignAttr(R,Attr)&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  function add_line(evt){&lt;br /&gt;	  //if (evt.target.nodeName!="rect") return&lt;br /&gt;	  var C=document.createElementNS(xmlns,"polyline") &lt;br /&gt;	&lt;br /&gt;	  var Attr={&lt;br /&gt;		  "x":30,&lt;br /&gt;		  "y":180,&lt;br /&gt;		  "fill":'none',&lt;br /&gt;		  "stroke": '#44a',&lt;br /&gt;		  "id":'pl1',&lt;br /&gt;		  "stroke-width":2&lt;br /&gt;	  }&lt;br /&gt;    &lt;br /&gt;	  assignAttr(C,Attr)&lt;br /&gt;	  Root.appendChild(C)&lt;br /&gt;    &lt;br /&gt;	  on_pen_down(Root)&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  function addPoint (evt) {&lt;br /&gt;    element = document.getElementById('pl1') 	&lt;br /&gt;    var point = element.ownerDocument.documentElement.createSVGPoint(); &lt;br /&gt;    point.x = evt.clientX; &lt;br /&gt;    point.y = evt.clientY;&lt;br /&gt;    &lt;br /&gt;    element.points.appendItem(point);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  function assignAttr(O,A){&lt;br /&gt;	  for (i in A) O.setAttributeNS(null,i, A[i])&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  ]]&gt;&lt;br /&gt;  &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;  &lt;text font-size="12pt" x="50" y="20" id="t1"&gt;Click something to move it&lt;/text&gt;&lt;br /&gt;  &lt;text font-size="12pt" x="80" y="40" id="t2"&gt;Click nothing to add something&lt;/text&gt;&lt;br /&gt;&lt;/svg&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;*update 7:44pm*&lt;br /&gt;By simply making the id unique using a global variable count it was possible to draw &lt;a href="http://www.twitxr.com/image/18474/"&gt;multiple polylines&lt;/a&gt; [twitxr.com].</description>
      <pubDate>Sat, 22 Mar 2008 19:15:43 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5270</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>Draw a series of lines using SVG</title>
      <link>http://snippets.dzone.com/posts/show/5269</link>
      <description>This code draws a line every time the user presses the mouse button.  Here is an &lt;a href="http://twitxr.com/image/18406/"&gt;example of the SVG output&lt;/a&gt; [twitxr.com].&lt;br /&gt;&lt;br /&gt;Tested in Firefox 3 beta 4.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;br /&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" version="1.1"&lt;br /&gt; onclick="addPoint(evt, document.getElementById('pl1'));"&gt; &lt;br /&gt;  &lt;title&gt;click to add point to polyline&lt;/title&gt;&lt;br /&gt;  &lt;script type="text/ecmascript"&gt;&lt;br /&gt;    &lt;![CDATA[ &lt;br /&gt;      function addPoint (evt, element) {&lt;br /&gt;        var point = element.ownerDocument.documentElement.createSVGPoint(); &lt;br /&gt;        point.x = evt.clientX; &lt;br /&gt;        point.y = evt.clientY; &lt;br /&gt;        element.points.appendItem(point);&lt;br /&gt;      }&lt;br /&gt;    ]]&gt;&lt;br /&gt;  &lt;/script&gt; &lt;br /&gt;  &lt;rect x="0" y="0" width="100%" height="100%" fill-opacity="0" /&gt;&lt;br /&gt;  &lt;polyline id="pl1" fill="none" stroke="green" stroke-width="2" points="30,180 50,150" /&gt;&lt;br /&gt;&lt;/svg&gt; &lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sat, 22 Mar 2008 16:50:18 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5269</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>Create and drag circles in SVG</title>
      <link>http://snippets.dzone.com/posts/show/5268</link>
      <description>Demonstrates creating creating and dragging circles using SVG and ECMAScript.&lt;br /&gt;&lt;br /&gt;Tested on Firefox 3 beta 4.&lt;br /&gt;&lt;br /&gt;file: makeDragDrop.svg&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;svg	xmlns="http://www.w3.org/2000/svg" width="100%"&lt;br /&gt;		xmlns:xlink="http://www.w3.org/1999/xlink" &gt;&lt;br /&gt;&lt;script&gt;&lt;![CDATA[&lt;br /&gt;var	xmlns="http://www.w3.org/2000/svg"&lt;br /&gt;	xlink="http://www.w3.org/1999/xlink" &lt;br /&gt;	Root=document.documentElement&lt;br /&gt;standardize(Root)&lt;br /&gt;&lt;br /&gt;function standardize(R){&lt;br /&gt;	var Attr={&lt;br /&gt;		"onmouseup":"add(evt)",&lt;br /&gt;		"onmousedown":"grab(evt)",&lt;br /&gt;		"onmousemove":null,&lt;br /&gt;		"onmouseover":"hilight(evt)",&lt;br /&gt;		"onmouseout":"hilight(evt)"&lt;br /&gt;	}&lt;br /&gt;	assignAttr(R,Attr)&lt;br /&gt;}&lt;br /&gt;function hilight(evt){&lt;br /&gt;	var T=evt.target&lt;br /&gt;	if (T.nodeName=="rect") return&lt;br /&gt;	if (evt.type=="mouseover") T.setAttributeNS(null,"stroke-opacity",1)&lt;br /&gt;	else T.setAttributeNS(null,"stroke-opacity",.5)&lt;br /&gt;}&lt;br /&gt;function add(evt){&lt;br /&gt;	if (evt.target.nodeName!="rect") return&lt;br /&gt;	var C=document.createElementNS(xmlns,"circle") &lt;br /&gt;	var stroke=Color()&lt;br /&gt;	var rad=10+Math.random()*50&lt;br /&gt;	var Attr={&lt;br /&gt;		r:rad,&lt;br /&gt;		cx:evt.clientX,&lt;br /&gt;		cy:evt.clientY,&lt;br /&gt;		"fill": Color(),&lt;br /&gt;		"fill-opacity":.75,&lt;br /&gt;		"stroke": stroke,&lt;br /&gt;		"stroke-opacity":.5,&lt;br /&gt;		"id":stroke,&lt;br /&gt;		"stroke-width":10+Math.random()*(55-rad)&lt;br /&gt;	}&lt;br /&gt;	assignAttr(C,Attr)&lt;br /&gt;	Root.appendChild(C)&lt;br /&gt;}&lt;br /&gt;function grab(evt){&lt;br /&gt;	var O=evt.target&lt;br /&gt;	if (evt.target.nodeName=="rect") return&lt;br /&gt;	var Attr={&lt;br /&gt;		"onmousemove":"slide(evt,'"+O.id+"')",&lt;br /&gt;		"onmouseup":"standardize(Root)"&lt;br /&gt;	}&lt;br /&gt;	assignAttr(Root,Attr)&lt;br /&gt;}&lt;br /&gt;function slide(evt,id){&lt;br /&gt;	var o=document.getElementById(id)&lt;br /&gt;	var c=""; if (o.nodeName=="circle") c="c"&lt;br /&gt;	o.setAttributeNS(null, c+"x", evt.clientX)&lt;br /&gt;	o.setAttributeNS(null, c+"y", evt.clientY)&lt;br /&gt;}&lt;br /&gt;function assignAttr(O,A){&lt;br /&gt;	for (i in A) O.setAttributeNS(null,i, A[i])&lt;br /&gt;}&lt;br /&gt;function Color(){&lt;br /&gt;	return "rgb("+parseInt(Math.random()*255)+","+parseInt(Math.random()*255)+","+parseInt(Math.random()*255)+")"&lt;br /&gt;}&lt;br /&gt;]]&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;rect width="100%" height="100%" fill="white"/&gt;&lt;br /&gt;&lt;text font-size="12pt" x="50" y="20" id="t1"&gt;Click something to move it&lt;/text&gt;&lt;br /&gt;&lt;text font-size="12pt" x="80" y="40" id="t2"&gt;Click nothing to add something&lt;/text&gt;&lt;br /&gt;&lt;/svg&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Source file copied from &lt;a href="http://srufaculty.sru.edu/david.dailey/svg/makeDragDrop.svg"&gt;http://srufaculty.sru.edu/david.dailey/svg/makeDragDrop.svg&lt;/a&gt;&lt;br /&gt;</description>
      <pubDate>Sat, 22 Mar 2008 00:30:36 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5268</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
  </channel>
</rss>
