{"id":6,"date":"2010-01-23T04:38:56","date_gmt":"2010-01-23T12:38:56","guid":{"rendered":"http:\/\/patternweaver.com\/blog\/?p=4"},"modified":"2011-12-19T18:53:15","modified_gmt":"2011-12-19T18:53:15","slug":"cross-browser-svg-using-moo-raphael-xml-for-script","status":"publish","type":"post","link":"http:\/\/patternweaver.com\/blog\/2010\/01\/cross-browser-svg-using-moo-raphael-xml-for-script\/","title":{"rendered":"Cross Browser SVG Using Moo + Raphael + XML for Script"},"content":{"rendered":"<p>I&#8217;m used to a very easy to implement, callback oriented php SAX parser from working with PHP for so long, and I&#8217;ve found a number of instances where I found myself wanting that capability in javascript.  In addition, I tend to favor Extending objects to callback passing, as you don&#8217;t end up messing with scope issues. So what I really wanted was a simple base class I could extend to build whatever I happened to be working on at the moment. So I went out searching for something like this. The only remotely suitable option I found was <a href=\"http:\/\/sourceforge.net\/projects\/xmljs\/files\/\">XML for Script 3.1<\/a> which seemed dubious if only for the amount of time since it was last touched. I did a simple test though, and it seemed to be pretty solid. Relating to my earlier fondness for php&#8217;s simple 3 function interface made me want less of what I percieved to be an archaic interface, so I set out to build a MooTools wrapper I could then extend in the way I wanted.<\/p>\n<div id=\"gist1498376\" class=\"gist\">\n    <div class=\"gist-file\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-xmlforscript_interface-js\" class=\"file\">\n    \n\n  <div class=\"blob-wrapper data type-javascript\">\n      <table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\">\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\">\/\/ SAX constructor<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC2\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-en\">MidasSAXEventHandler<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-k\">function<\/span>() {<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC3\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-v\">this<\/span>.<span class=\"pl-c1\">characterData<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span><span class=\"pl-pds\">&quot;<\/span><\/span>;<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L4\" class=\"blob-num js-line-number\" data-line-number=\"4\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC4\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L5\" class=\"blob-num js-line-number\" data-line-number=\"5\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC5\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L6\" class=\"blob-num js-line-number\" data-line-number=\"6\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC6\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\">\/\/ My Non-exposed hooks (all existing hooks require fucking with char data<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L7\" class=\"blob-num js-line-number\" data-line-number=\"7\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC7\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\">\/\/ internally, so we call cleanly out to here to make truly pluggable functions)<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L8\" class=\"blob-num js-line-number\" data-line-number=\"8\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC8\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L9\" class=\"blob-num js-line-number\" data-line-number=\"9\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC9\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">MidasSAXEventHandler<\/span>.<span class=\"pl-c1\">prototype<\/span>.<span class=\"pl-en\">startTag<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-k\">function<\/span>(<span class=\"pl-smi\">name<\/span>, <span class=\"pl-smi\">attrs<\/span>){<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L10\" class=\"blob-num js-line-number\" data-line-number=\"10\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC10\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L11\" class=\"blob-num js-line-number\" data-line-number=\"11\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC11\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L12\" class=\"blob-num js-line-number\" data-line-number=\"12\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC12\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">MidasSAXEventHandler<\/span>.<span class=\"pl-c1\">prototype<\/span>.<span class=\"pl-en\">charData<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-k\">function<\/span>(<span class=\"pl-smi\">chars<\/span>){<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L13\" class=\"blob-num js-line-number\" data-line-number=\"13\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC13\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L14\" class=\"blob-num js-line-number\" data-line-number=\"14\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC14\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L15\" class=\"blob-num js-line-number\" data-line-number=\"15\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC15\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">MidasSAXEventHandler<\/span>.<span class=\"pl-c1\">prototype<\/span>.<span class=\"pl-en\">endTag<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-k\">function<\/span>(<span class=\"pl-smi\">name<\/span>){<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L16\" class=\"blob-num js-line-number\" data-line-number=\"16\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC16\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L17\" class=\"blob-num js-line-number\" data-line-number=\"17\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC17\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L18\" class=\"blob-num js-line-number\" data-line-number=\"18\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC18\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\">\/\/MidasSAXEventHandler Object SAX INTERFACES<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L19\" class=\"blob-num js-line-number\" data-line-number=\"19\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC19\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">MidasSAXEventHandler<\/span>.<span class=\"pl-c1\">prototype<\/span>.<span class=\"pl-en\">characters<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-k\">function<\/span>(<span class=\"pl-smi\">data<\/span>, <span class=\"pl-smi\">start<\/span>, <span class=\"pl-smi\">length<\/span>) {<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L20\" class=\"blob-num js-line-number\" data-line-number=\"20\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC20\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-v\">this<\/span>.<span class=\"pl-c1\">characterData<\/span> <span class=\"pl-k\">+=<\/span> data.<span class=\"pl-c1\">substr<\/span>(start, length);<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L21\" class=\"blob-num js-line-number\" data-line-number=\"21\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC21\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L22\" class=\"blob-num js-line-number\" data-line-number=\"22\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC22\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L23\" class=\"blob-num js-line-number\" data-line-number=\"23\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC23\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">MidasSAXEventHandler<\/span>.<span class=\"pl-c1\">prototype<\/span>.<span class=\"pl-en\">endDocument<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-k\">function<\/span>() {<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L24\" class=\"blob-num js-line-number\" data-line-number=\"24\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC24\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-v\">this<\/span>.<span class=\"pl-c1\">_handleCharacterData<\/span>();<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L25\" class=\"blob-num js-line-number\" data-line-number=\"25\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC25\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-c\">\/\/place endDocument event handling code below this line<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L26\" class=\"blob-num js-line-number\" data-line-number=\"26\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC26\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L27\" class=\"blob-num js-line-number\" data-line-number=\"27\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC27\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L28\" class=\"blob-num js-line-number\" data-line-number=\"28\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC28\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">MidasSAXEventHandler<\/span>.<span class=\"pl-c1\">prototype<\/span>.<span class=\"pl-en\">endElement<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-k\">function<\/span>(<span class=\"pl-smi\">name<\/span>) {<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L29\" class=\"blob-num js-line-number\" data-line-number=\"29\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC29\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-v\">this<\/span>.<span class=\"pl-c1\">_handleCharacterData<\/span>();<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L30\" class=\"blob-num js-line-number\" data-line-number=\"30\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC30\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-c\">\/\/place endElement event handling code below this line<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L31\" class=\"blob-num js-line-number\" data-line-number=\"31\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC31\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-v\">this<\/span>.<span class=\"pl-c1\">endTag<\/span>(name);<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L32\" class=\"blob-num js-line-number\" data-line-number=\"32\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC32\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L33\" class=\"blob-num js-line-number\" data-line-number=\"33\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC33\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L34\" class=\"blob-num js-line-number\" data-line-number=\"34\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC34\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">MidasSAXEventHandler<\/span>.<span class=\"pl-c1\">prototype<\/span>.<span class=\"pl-en\">processingInstruction<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-k\">function<\/span>(<span class=\"pl-smi\">target<\/span>, <span class=\"pl-smi\">data<\/span>) {<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L35\" class=\"blob-num js-line-number\" data-line-number=\"35\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC35\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-v\">this<\/span>.<span class=\"pl-c1\">_handleCharacterData<\/span>();<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L36\" class=\"blob-num js-line-number\" data-line-number=\"36\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC36\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-c\">\/\/place processingInstruction event handling code below this line<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L37\" class=\"blob-num js-line-number\" data-line-number=\"37\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC37\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L38\" class=\"blob-num js-line-number\" data-line-number=\"38\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC38\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L39\" class=\"blob-num js-line-number\" data-line-number=\"39\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC39\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">MidasSAXEventHandler<\/span>.<span class=\"pl-c1\">prototype<\/span>.<span class=\"pl-en\">setDocumentLocator<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-k\">function<\/span>(<span class=\"pl-smi\">locator<\/span>) {<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L40\" class=\"blob-num js-line-number\" data-line-number=\"40\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC40\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-v\">this<\/span>.<span class=\"pl-c1\">_handleCharacterData<\/span>();<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L41\" class=\"blob-num js-line-number\" data-line-number=\"41\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC41\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-c\">\/\/place setDocumentLocator event handling code below this line<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L42\" class=\"blob-num js-line-number\" data-line-number=\"42\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC42\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L43\" class=\"blob-num js-line-number\" data-line-number=\"43\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC43\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L44\" class=\"blob-num js-line-number\" data-line-number=\"44\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC44\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">MidasSAXEventHandler<\/span>.<span class=\"pl-c1\">prototype<\/span>.<span class=\"pl-en\">startElement<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-k\">function<\/span>(<span class=\"pl-smi\">name<\/span>, <span class=\"pl-smi\">atts<\/span>) {<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L45\" class=\"blob-num js-line-number\" data-line-number=\"45\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC45\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-v\">this<\/span>.<span class=\"pl-c1\">_handleCharacterData<\/span>();<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L46\" class=\"blob-num js-line-number\" data-line-number=\"46\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC46\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">var<\/span> attrs <span class=\"pl-k\">=<\/span> {};<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L47\" class=\"blob-num js-line-number\" data-line-number=\"47\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC47\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-c\">\/\/place startElement event handling code below this line<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L48\" class=\"blob-num js-line-number\" data-line-number=\"48\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC48\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">for<\/span>(<span class=\"pl-k\">var<\/span> lcv <span class=\"pl-k\">=<\/span><span class=\"pl-c1\">0<\/span>; lcv <span class=\"pl-k\">&lt;<\/span> atts.<span class=\"pl-c1\">getLength<\/span>(); lcv<span class=\"pl-k\">++<\/span>){<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L49\" class=\"blob-num js-line-number\" data-line-number=\"49\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC49\" class=\"blob-code blob-code-inner js-file-line\">        attrs[atts.<span class=\"pl-c1\">getName<\/span>(lcv)] <span class=\"pl-k\">=<\/span> atts.<span class=\"pl-c1\">getValue<\/span>(lcv);<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L50\" class=\"blob-num js-line-number\" data-line-number=\"50\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC50\" class=\"blob-code blob-code-inner js-file-line\">    }<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L51\" class=\"blob-num js-line-number\" data-line-number=\"51\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC51\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-v\">this<\/span>.<span class=\"pl-c1\">startTag<\/span>(name, attrs);<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L52\" class=\"blob-num js-line-number\" data-line-number=\"52\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC52\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L53\" class=\"blob-num js-line-number\" data-line-number=\"53\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC53\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L54\" class=\"blob-num js-line-number\" data-line-number=\"54\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC54\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">MidasSAXEventHandler<\/span>.<span class=\"pl-c1\">prototype<\/span>.<span class=\"pl-en\">startDocument<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-k\">function<\/span>() {<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L55\" class=\"blob-num js-line-number\" data-line-number=\"55\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC55\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-v\">this<\/span>.<span class=\"pl-c1\">_handleCharacterData<\/span>();<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L56\" class=\"blob-num js-line-number\" data-line-number=\"56\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC56\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-c\">\/\/place startDocument event handling code below this line<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L57\" class=\"blob-num js-line-number\" data-line-number=\"57\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC57\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L58\" class=\"blob-num js-line-number\" data-line-number=\"58\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC58\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L59\" class=\"blob-num js-line-number\" data-line-number=\"59\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC59\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\">\/\/MidasSAXEventHandler Object Lexical Handlers<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L60\" class=\"blob-num js-line-number\" data-line-number=\"60\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC60\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">MidasSAXEventHandler<\/span>.<span class=\"pl-c1\">prototype<\/span>.<span class=\"pl-en\">comment<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-k\">function<\/span>(<span class=\"pl-smi\">data<\/span>, <span class=\"pl-smi\">start<\/span>, <span class=\"pl-smi\">length<\/span>) {<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L61\" class=\"blob-num js-line-number\" data-line-number=\"61\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC61\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-v\">this<\/span>.<span class=\"pl-c1\">_handleCharacterData<\/span>();<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L62\" class=\"blob-num js-line-number\" data-line-number=\"62\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC62\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-c\">\/\/place comment event handling code below this line<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L63\" class=\"blob-num js-line-number\" data-line-number=\"63\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC63\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L64\" class=\"blob-num js-line-number\" data-line-number=\"64\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC64\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L65\" class=\"blob-num js-line-number\" data-line-number=\"65\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC65\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">MidasSAXEventHandler<\/span>.<span class=\"pl-c1\">prototype<\/span>.<span class=\"pl-en\">endCDATA<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-k\">function<\/span>() {<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L66\" class=\"blob-num js-line-number\" data-line-number=\"66\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC66\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-v\">this<\/span>.<span class=\"pl-c1\">_handleCharacterData<\/span>();<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L67\" class=\"blob-num js-line-number\" data-line-number=\"67\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC67\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-c\">\/\/place endCDATA event handling code below this line<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L68\" class=\"blob-num js-line-number\" data-line-number=\"68\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC68\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L69\" class=\"blob-num js-line-number\" data-line-number=\"69\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC69\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L70\" class=\"blob-num js-line-number\" data-line-number=\"70\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC70\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">MidasSAXEventHandler<\/span>.<span class=\"pl-c1\">prototype<\/span>.<span class=\"pl-en\">startCDATA<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-k\">function<\/span>() {<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L71\" class=\"blob-num js-line-number\" data-line-number=\"71\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC71\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-v\">this<\/span>.<span class=\"pl-c1\">_handleCharacterData<\/span>();<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L72\" class=\"blob-num js-line-number\" data-line-number=\"72\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC72\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-c\">\/\/place startCDATA event handling code below this line<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L73\" class=\"blob-num js-line-number\" data-line-number=\"73\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC73\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L74\" class=\"blob-num js-line-number\" data-line-number=\"74\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC74\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L75\" class=\"blob-num js-line-number\" data-line-number=\"75\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC75\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\">\/\/ MidasSAXEventHandler Object Error Interface<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L76\" class=\"blob-num js-line-number\" data-line-number=\"76\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC76\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">MidasSAXEventHandler<\/span>.<span class=\"pl-c1\">prototype<\/span>.<span class=\"pl-en\">error<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-k\">function<\/span>(<span class=\"pl-smi\">exception<\/span>) {<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L77\" class=\"blob-num js-line-number\" data-line-number=\"77\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC77\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-v\">this<\/span>.<span class=\"pl-c1\">_handleCharacterData<\/span>();<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L78\" class=\"blob-num js-line-number\" data-line-number=\"78\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC78\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-c\">\/\/place error event handling code below this line<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L79\" class=\"blob-num js-line-number\" data-line-number=\"79\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC79\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L80\" class=\"blob-num js-line-number\" data-line-number=\"80\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC80\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L81\" class=\"blob-num js-line-number\" data-line-number=\"81\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC81\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">MidasSAXEventHandler<\/span>.<span class=\"pl-c1\">prototype<\/span>.<span class=\"pl-en\">fatalError<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-k\">function<\/span>(<span class=\"pl-smi\">exception<\/span>) {<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L82\" class=\"blob-num js-line-number\" data-line-number=\"82\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC82\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-v\">this<\/span>.<span class=\"pl-c1\">_handleCharacterData<\/span>();<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L83\" class=\"blob-num js-line-number\" data-line-number=\"83\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC83\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-c\">\/\/place fatalError event handling code below this line<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L84\" class=\"blob-num js-line-number\" data-line-number=\"84\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC84\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L85\" class=\"blob-num js-line-number\" data-line-number=\"85\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC85\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L86\" class=\"blob-num js-line-number\" data-line-number=\"86\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC86\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">MidasSAXEventHandler<\/span>.<span class=\"pl-c1\">prototype<\/span>.<span class=\"pl-en\">warning<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-k\">function<\/span>(<span class=\"pl-smi\">exception<\/span>) {<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L87\" class=\"blob-num js-line-number\" data-line-number=\"87\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC87\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-v\">this<\/span>.<span class=\"pl-c1\">_handleCharacterData<\/span>();<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L88\" class=\"blob-num js-line-number\" data-line-number=\"88\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC88\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-c\">\/\/place warning event handling code below this line<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L89\" class=\"blob-num js-line-number\" data-line-number=\"89\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC89\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L90\" class=\"blob-num js-line-number\" data-line-number=\"90\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC90\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L91\" class=\"blob-num js-line-number\" data-line-number=\"91\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC91\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\">\/\/MidasSAXEventHandler Object Internal Functions<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L92\" class=\"blob-num js-line-number\" data-line-number=\"92\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC92\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">MidasSAXEventHandler<\/span>.<span class=\"pl-c1\">prototype<\/span>.<span class=\"pl-en\">_fullCharacterDataReceived<\/span> <span class=\"pl-k\">=<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L93\" class=\"blob-num js-line-number\" data-line-number=\"93\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC93\" class=\"blob-code blob-code-inner js-file-line\">               <span class=\"pl-k\">function<\/span>(<span class=\"pl-smi\">fullCharacterData<\/span>){<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L94\" class=\"blob-num js-line-number\" data-line-number=\"94\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC94\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-c\">\/\/place character (text) event handling code below this line<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L95\" class=\"blob-num js-line-number\" data-line-number=\"95\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC95\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-v\">this<\/span>.<span class=\"pl-c1\">charData<\/span>(fullCharacterData);<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L96\" class=\"blob-num js-line-number\" data-line-number=\"96\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC96\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L97\" class=\"blob-num js-line-number\" data-line-number=\"97\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC97\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L98\" class=\"blob-num js-line-number\" data-line-number=\"98\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC98\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">MidasSAXEventHandler<\/span>.<span class=\"pl-c1\">prototype<\/span>.<span class=\"pl-en\">_handleCharacterData<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-k\">function<\/span>()  {<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L99\" class=\"blob-num js-line-number\" data-line-number=\"99\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC99\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">if<\/span> (<span class=\"pl-v\">this<\/span>.<span class=\"pl-c1\">characterData<\/span> <span class=\"pl-k\">!=<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span><span class=\"pl-pds\">&quot;<\/span><\/span>){<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L100\" class=\"blob-num js-line-number\" data-line-number=\"100\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC100\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-v\">this<\/span>.<span class=\"pl-c1\">_fullCharacterDataReceived<\/span>(<span class=\"pl-v\">this<\/span>.<span class=\"pl-c1\">characterData<\/span>);<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L101\" class=\"blob-num js-line-number\" data-line-number=\"101\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC101\" class=\"blob-code blob-code-inner js-file-line\">    }<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L102\" class=\"blob-num js-line-number\" data-line-number=\"102\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC102\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-v\">this<\/span>.<span class=\"pl-c1\">characterData<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span><span class=\"pl-pds\">&quot;<\/span><\/span>;<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-xmlforscript_interface-js-L103\" class=\"blob-num js-line-number\" data-line-number=\"103\"><\/td>\n        <td id=\"file-xmlforscript_interface-js-LC103\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n      <\/tr>\n<\/table>\n\n  <\/div>\n\n  <\/div>\n  \n<\/div>\n\n      <\/div>\n      <div class=\"gist-meta\">\n        <a href=\"https:\/\/gist.github.com\/khrome\/1498376\/raw\/dc6792db22a8327a193f54e56ab219a99788d4b9\/xmlforscript_interface.js\" style=\"float:right\">view raw<\/a>\n        <a href=\"https:\/\/gist.github.com\/khrome\/1498376#file-xmlforscript_interface-js\">xmlforscript_interface.js<\/a>\n        hosted with &#10084; by <a href=\"https:\/\/github.com\">GitHub<\/a>\n      <\/div>\n    <\/div>\n<\/div>\n\n<p>This created my interface into the existing library, and now I need a base class to extend:<\/p>\n<script src=\"https:\/\/gist.github.com\/1498376.js?file=xml_parser.js\"><\/script><noscript><pre><code class=\"language-javascript javascript\">MidasXMLParser = new Class({\n    initialize: function(){\n        this.buildXMLcomponents();\n    },\n    buildXMLcomponents: function(){\n        this.handler = new MidasSAXEventHandler();\n        this.parser = new SAXDriver();\n    },\n    open: function(tagName, attributes){\n        var node = document.id('widget_panel');\n        \/\/var pro = profile(attributes);\n        var pro = attributes[&quot;d&quot;];\n        node.innerHTML = node.innerHTML + pro +&quot;&lt;br\/&gt;&lt;br\/&gt;&quot;;\n    },\n    content: function(text){\n    },\n    close: function(tagName){\n    },\n    parse: function(xml){\n        this.handler.startTag = this.open;\n        this.handler.endTag = this.close;\n        this.handler.charData = this.content;\n        this.parser.setDocumentHandler(this.handler);\n        this.parser.setLexicalHandler(this.handler);\n        this.parser.setErrorHandler(this.handler);\n        this.parser.parse(xml);\n    }\n});<\/code><\/pre><\/noscript>\n<p>Now to test this I wanted to parse some XML that was entertaining, and I had just been working with the <a href=\"http:\/\/raphaeljs.com\/\">Rapha\u00c3\u00abl<\/a> Library and had casually mentioned to a coworker that I supposed it would be possible to draw an SVG using raphael in all 3 browsers, most significantly IE if you could just parse it, and here I was with a pretty simple to implement parser. It couldn&#8217;t be <b>that<\/b> easy&#8230;<\/p>\n<p>So I gave it a whirl:<\/p>\n<div id=\"gist1498376\" class=\"gist\">\n    <div class=\"gist-file\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-render_parsed_svg_nodes-js\" class=\"file\">\n    \n\n  <div class=\"blob-wrapper data type-javascript\">\n      <table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\">\n      <tr>\n        <td id=\"file-render_parsed_svg_nodes-js-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"><\/td>\n        <td id=\"file-render_parsed_svg_nodes-js-LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\">\/\/set up the raphael canvas<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-render_parsed_svg_nodes-js-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"><\/td>\n        <td id=\"file-render_parsed_svg_nodes-js-LC2\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">var<\/span> panel <span class=\"pl-k\">=<\/span> <span class=\"pl-c1\">Raphael<\/span>(<span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>widget_panel<span class=\"pl-pds\">&quot;<\/span><\/span>, <span class=\"pl-c1\">1000<\/span>, <span class=\"pl-c1\">600<\/span>);<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-render_parsed_svg_nodes-js-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"><\/td>\n        <td id=\"file-render_parsed_svg_nodes-js-LC3\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\">\/\/setup our own XML Parser<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-render_parsed_svg_nodes-js-L4\" class=\"blob-num js-line-number\" data-line-number=\"4\"><\/td>\n        <td id=\"file-render_parsed_svg_nodes-js-LC4\" class=\"blob-code blob-code-inner js-file-line\">SVGParser <span class=\"pl-k\">=<\/span> <span class=\"pl-k\">new<\/span> <span class=\"pl-en\">Class<\/span>({<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-render_parsed_svg_nodes-js-L5\" class=\"blob-num js-line-number\" data-line-number=\"5\"><\/td>\n        <td id=\"file-render_parsed_svg_nodes-js-LC5\" class=\"blob-code blob-code-inner js-file-line\">Extends <span class=\"pl-k\">:<\/span> MidasXMLParser,<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-render_parsed_svg_nodes-js-L6\" class=\"blob-num js-line-number\" data-line-number=\"6\"><\/td>\n        <td id=\"file-render_parsed_svg_nodes-js-LC6\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-en\">open<\/span><span class=\"pl-k\">:<\/span> <span class=\"pl-k\">function<\/span>(<span class=\"pl-smi\">tag<\/span>, <span class=\"pl-smi\">attributes<\/span>){<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-render_parsed_svg_nodes-js-L7\" class=\"blob-num js-line-number\" data-line-number=\"7\"><\/td>\n        <td id=\"file-render_parsed_svg_nodes-js-LC7\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">if<\/span>(tag <span class=\"pl-k\">==<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>path<span class=\"pl-pds\">&quot;<\/span><\/span>){<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-render_parsed_svg_nodes-js-L8\" class=\"blob-num js-line-number\" data-line-number=\"8\"><\/td>\n        <td id=\"file-render_parsed_svg_nodes-js-LC8\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-c\">\/\/when we find a path, draw it on the raphael canvas<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-render_parsed_svg_nodes-js-L9\" class=\"blob-num js-line-number\" data-line-number=\"9\"><\/td>\n        <td id=\"file-render_parsed_svg_nodes-js-LC9\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">var<\/span> shape <span class=\"pl-k\">=<\/span> panel.<span class=\"pl-c1\">path<\/span>(attributes[<span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>d<span class=\"pl-pds\">&quot;<\/span><\/span>]).<span class=\"pl-c1\">attr<\/span>({<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-render_parsed_svg_nodes-js-L10\" class=\"blob-num js-line-number\" data-line-number=\"10\"><\/td>\n        <td id=\"file-render_parsed_svg_nodes-js-LC10\" class=\"blob-code blob-code-inner js-file-line\">           fill<span class=\"pl-k\">:<\/span><span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>#000000<span class=\"pl-pds\">&quot;<\/span><\/span>,<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-render_parsed_svg_nodes-js-L11\" class=\"blob-num js-line-number\" data-line-number=\"11\"><\/td>\n        <td id=\"file-render_parsed_svg_nodes-js-LC11\" class=\"blob-code blob-code-inner js-file-line\">           <span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>stroke-width<span class=\"pl-pds\">&quot;<\/span><\/span><span class=\"pl-k\">:<\/span> <span class=\"pl-c1\">1<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-render_parsed_svg_nodes-js-L12\" class=\"blob-num js-line-number\" data-line-number=\"12\"><\/td>\n        <td id=\"file-render_parsed_svg_nodes-js-LC12\" class=\"blob-code blob-code-inner js-file-line\">        });<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-render_parsed_svg_nodes-js-L13\" class=\"blob-num js-line-number\" data-line-number=\"13\"><\/td>\n        <td id=\"file-render_parsed_svg_nodes-js-LC13\" class=\"blob-code blob-code-inner js-file-line\">    }<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-render_parsed_svg_nodes-js-L14\" class=\"blob-num js-line-number\" data-line-number=\"14\"><\/td>\n        <td id=\"file-render_parsed_svg_nodes-js-LC14\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-render_parsed_svg_nodes-js-L15\" class=\"blob-num js-line-number\" data-line-number=\"15\"><\/td>\n        <td id=\"file-render_parsed_svg_nodes-js-LC15\" class=\"blob-code blob-code-inner js-file-line\">});<\/td>\n      <\/tr>\n<\/table>\n\n  <\/div>\n\n  <\/div>\n  \n<\/div>\n\n      <\/div>\n      <div class=\"gist-meta\">\n        <a href=\"https:\/\/gist.github.com\/khrome\/1498376\/raw\/dc6792db22a8327a193f54e56ab219a99788d4b9\/render_parsed_svg_nodes.js\" style=\"float:right\">view raw<\/a>\n        <a href=\"https:\/\/gist.github.com\/khrome\/1498376#file-render_parsed_svg_nodes-js\">render_parsed_svg_nodes.js<\/a>\n        hosted with &#10084; by <a href=\"https:\/\/github.com\">GitHub<\/a>\n      <\/div>\n    <\/div>\n<\/div>\n\n<p>and now we just need to load an svg&#8230;.<\/p>\n<div id=\"gist1498376\" class=\"gist\">\n    <div class=\"gist-file\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-load_parse_render-js\" class=\"file\">\n    \n\n  <div class=\"blob-wrapper data type-javascript\">\n      <table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\">\n      <tr>\n        <td id=\"file-load_parse_render-js-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"><\/td>\n        <td id=\"file-load_parse_render-js-LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">var<\/span> parser <span class=\"pl-k\">=<\/span> <span class=\"pl-k\">new<\/span> <span class=\"pl-en\">SVGParser<\/span>();<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-load_parse_render-js-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"><\/td>\n        <td id=\"file-load_parse_render-js-LC2\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">var<\/span> svgRequest <span class=\"pl-k\">=<\/span> <span class=\"pl-k\">new<\/span> <span class=\"pl-en\">Request<\/span>({<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-load_parse_render-js-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"><\/td>\n        <td id=\"file-load_parse_render-js-LC3\" class=\"blob-code blob-code-inner js-file-line\">    url<span class=\"pl-k\">:<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>awesome.svg<span class=\"pl-pds\">&#39;<\/span><\/span>,<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-load_parse_render-js-L4\" class=\"blob-num js-line-number\" data-line-number=\"4\"><\/td>\n        <td id=\"file-load_parse_render-js-LC4\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-en\">onSuccess<\/span><span class=\"pl-k\">:<\/span> <span class=\"pl-k\">function<\/span>(<span class=\"pl-smi\">responseText<\/span>, <span class=\"pl-smi\">responseXML<\/span>) {<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-load_parse_render-js-L5\" class=\"blob-num js-line-number\" data-line-number=\"5\"><\/td>\n        <td id=\"file-load_parse_render-js-LC5\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-c\">\/\/once we recieve the SVG, we parse it<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-load_parse_render-js-L6\" class=\"blob-num js-line-number\" data-line-number=\"6\"><\/td>\n        <td id=\"file-load_parse_render-js-LC6\" class=\"blob-code blob-code-inner js-file-line\">        parser.<span class=\"pl-c1\">parse<\/span>(responseText);<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-load_parse_render-js-L7\" class=\"blob-num js-line-number\" data-line-number=\"7\"><\/td>\n        <td id=\"file-load_parse_render-js-LC7\" class=\"blob-code blob-code-inner js-file-line\">    }<\/td>\n      <\/tr>\n      <tr>\n        <td id=\"file-load_parse_render-js-L8\" class=\"blob-num js-line-number\" data-line-number=\"8\"><\/td>\n        <td id=\"file-load_parse_render-js-LC8\" class=\"blob-code blob-code-inner js-file-line\">}).<span class=\"pl-c1\">send<\/span>();<\/td>\n      <\/tr>\n<\/table>\n\n  <\/div>\n\n  <\/div>\n  \n<\/div>\n\n      <\/div>\n      <div class=\"gist-meta\">\n        <a href=\"https:\/\/gist.github.com\/khrome\/1498376\/raw\/dc6792db22a8327a193f54e56ab219a99788d4b9\/load_parse_render.js\" style=\"float:right\">view raw<\/a>\n        <a href=\"https:\/\/gist.github.com\/khrome\/1498376#file-load_parse_render-js\">load_parse_render.js<\/a>\n        hosted with &#10084; by <a href=\"https:\/\/github.com\">GitHub<\/a>\n      <\/div>\n    <\/div>\n<\/div>\n\n<p>Imagine my surprise staring at an SVG in IE after comparatively little work. Excellent.<\/p>\n<p>I have since been using Raphael, this XML parser, MooTools and jQuery in a much more sophisticated, yet still happy arrangement. Please, check out the <a href=\"http:\/\/patternweaver.com\/SVGParser\/\">demo<\/a>, which uses Al MacDonald&#8217;s <a href=\"http:\/\/upload.wikimedia.org\/wikipedia\/commons\/8\/80\/World_map_-_low_resolution.svg\">low resolution world<\/a> image. Lemme know if you have questions&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;m used to a very easy to implement, callback oriented php SAX parser from working with PHP for so long, and I&#8217;ve found a number of instances where I found myself wanting that capability in javascript. In addition, I tend to favor Extending objects to callback passing, as you don&#8217;t end up messing with scope [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-6","post","type-post","status-publish","format-standard","hentry","category-js"],"_links":{"self":[{"href":"http:\/\/patternweaver.com\/blog\/wp-json\/wp\/v2\/posts\/6","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/patternweaver.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/patternweaver.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/patternweaver.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/patternweaver.com\/blog\/wp-json\/wp\/v2\/comments?post=6"}],"version-history":[{"count":0,"href":"http:\/\/patternweaver.com\/blog\/wp-json\/wp\/v2\/posts\/6\/revisions"}],"wp:attachment":[{"href":"http:\/\/patternweaver.com\/blog\/wp-json\/wp\/v2\/media?parent=6"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/patternweaver.com\/blog\/wp-json\/wp\/v2\/categories?post=6"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/patternweaver.com\/blog\/wp-json\/wp\/v2\/tags?post=6"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}