Changeset 1334

Show
Ignore:
Timestamp:
03/19/08 07:55:47 (4 months ago)
Author:
bob@redivi.com
Message:

svg support in loader

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • mochikit/trunk/MochiKit/MochiKit.js

    r1210 r1334  
    9898        } 
    9999        var scripts = document.getElementsByTagName("script"); 
     100        var kXHTMLNSURI = "http://www.w3.org/1999/xhtml"; 
     101        var kSVGNSURI = "http://www.w3.org/2000/svg"; 
     102        var kXLINKNSURI = "http://www.w3.org/1999/xlink"; 
    100103        var kXULNSURI = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; 
    101104        var base = null; 
     
    104107        var i; 
    105108        for (i = 0; i < scripts.length; i++) { 
    106             var src = scripts[i].getAttribute("src"); 
     109            var src; 
     110            switch (scripts[i].namespaceURI) { 
     111                case '': // HTML 
     112                case kXHTMLNSURI: 
     113                case kXULNSURI: 
     114                    src = scripts[i].getAttribute("src"); 
     115                    break; 
     116                case kSVGNSURI: 
     117                    src = scripts[i].getAttributeNS(kXLINKNSURI, "href"); 
     118                    break; 
     119                default: 
     120                    throw new Error("Unsupported namespace"); 
     121            } 
    107122            if (!src) { 
    108123                continue; 
     
    126141                continue; 
    127142            } 
    128             if (document.documentElement && 
    129                 document.documentElement.namespaceURI == kXULNSURI) { 
    130                 // XUL 
    131                 var s = document.createElementNS(kXULNSURI, 'script'); 
     143            if (baseElem.namespaceURI == kSVGNSURI || 
     144                baseElem.namespaceURI == kXULNSURI) { 
     145                // SVG, XUL 
     146                /* 
     147                    SVG does not support document.write, so if Safari wants to 
     148                    support SVG tests it should fix its deferred loading bug 
     149                    (see following below). 
     150 
     151                */ 
     152                var s = document.createElementNS(baseElem.namespaceURI, 'script'); 
    132153                s.setAttribute("id", "MochiKit_" + base + modules[i]); 
    133                 s.setAttribute("src", uri); 
     154                if (baseElem.namespaceURI == kSVGNSURI) { 
     155                    s.setAttributeNS(kXLINKNSURI, 'href', uri); 
     156                } else { 
     157                    s.setAttribute('src', uri); 
     158                } 
    134159                s.setAttribute("type", "application/x-javascript"); 
    135160                baseElem.parentNode.appendChild(s); 
    136161            } else { 
    137                 // HTML 
     162                // HTML, XHTML 
    138163                /* 
    139164                    DOM can not be used here because Safari does 
     
    147172 
    148173                */ 
    149                 document.write('<script src="' + uri + 
     174                document.write('<' + baseElem.nodeName + ' src="' + uri +  
    150175                    '" type="text/javascript"></script>'); 
    151176            } 
  • mochikit/trunk/packed/MochiKit/MochiKit.js

    r1333 r1334  
    66336633} 
    66346634var _726=document.getElementsByTagName("script"); 
    6635 var _727="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; 
     6635var _727="http://www.w3.org/1999/xhtml"; 
     6636var _728="http://www.w3.org/2000/svg"; 
     6637var _729="http://www.w3.org/1999/xlink"; 
     6638var _72a="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; 
    66366639var base=null; 
    6637 var _729=null; 
    6638 var _72a={}; 
     6640var _72c=null; 
     6641var _72d={}; 
    66396642var i; 
    66406643for(i=0;i<_726.length;i++){ 
    6641 var src=_726[i].getAttribute("src"); 
     6644var src; 
     6645switch(_726[i].namespaceURI){ 
     6646case "": 
     6647case _727: 
     6648case _72a: 
     6649src=_726[i].getAttribute("src"); 
     6650break; 
     6651case _728: 
     6652src=_726[i].getAttributeNS(_729,"href"); 
     6653break; 
     6654default: 
     6655throw new Error("Unsupported namespace"); 
     6656
    66426657if(!src){ 
    66436658continue; 
    66446659} 
    6645 _72a[src]=true; 
     6660_72d[src]=true; 
    66466661if(src.match(/MochiKit.js$/)){ 
    66476662base=src.substring(0,src.lastIndexOf("MochiKit.js")); 
    6648 _729=_726[i]; 
     6663_72c=_726[i]; 
    66496664} 
    66506665} 
     
    66526667return; 
    66536668} 
    6654 var _72d=MochiKit.MochiKit.SUBMODULES; 
    6655 for(var i=0;i<_72d.length;i++){ 
    6656 if(MochiKit[_72d[i]]){ 
     6669var _730=MochiKit.MochiKit.SUBMODULES; 
     6670for(var i=0;i<_730.length;i++){ 
     6671if(MochiKit[_730[i]]){ 
    66576672continue; 
    66586673} 
    6659 var uri=base+_72d[i]+".js"; 
    6660 if(uri in _72a){ 
     6674var uri=base+_730[i]+".js"; 
     6675if(uri in _72d){ 
    66616676continue; 
    66626677} 
    6663 if(document.documentElement&&document.documentElement.namespaceURI==_727){ 
    6664 var s=document.createElementNS(_727,"script"); 
    6665 s.setAttribute("id","MochiKit_"+base+_72d[i]); 
     6678if(_72c.namespaceURI==_728||_72c.namespaceURI==_72a){ 
     6679var s=document.createElementNS(_72c.namespaceURI,"script"); 
     6680s.setAttribute("id","MochiKit_"+base+_730[i]); 
     6681if(_72c.namespaceURI==_728){ 
     6682s.setAttributeNS(_729,"href",uri); 
     6683}else{ 
    66666684s.setAttribute("src",uri); 
     6685} 
    66676686s.setAttribute("type","application/x-javascript"); 
    6668 _729.parentNode.appendChild(s); 
    6669 }else{ 
    6670 document.write("<script src=\""+uri+"\" type=\"text/javascript\"></script>"); 
     6687_72c.parentNode.appendChild(s); 
     6688}else{ 
     6689document.write("<"+_72c.nodeName+" src=\""+uri+"\" type=\"text/javascript\"></script>"); 
    66716690} 
    66726691}