OpenLayers OpenLayers

Changeset 4097

Show
Ignore:
Timestamp:
08/28/07 23:30:31 (1 year ago)
Author:
crschmidt
Message:

Looks like r3153 never made it into this sandbox (probably a conflicted
merge at some point). Merging in manually.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • sandbox/tschaub/feature/lib/OpenLayers/Map.js

    r4091 r4097  
    304304        // only append link stylesheet if the theme property is set 
    305305        if(this.theme) { 
    306             var cssNode = document.createElement('link'); 
    307             cssNode.setAttribute('rel', 'stylesheet'); 
    308             cssNode.setAttribute('type', 'text/css'); 
    309             cssNode.setAttribute('href', this.theme); 
    310             document.getElementsByTagName('head')[0].appendChild(cssNode); 
     306            // check existing links for equivalent url 
     307            var addNode = true; 
     308            var nodes = document.getElementsByTagName('link'); 
     309            for(var i=0; i<nodes.length; ++i) { 
     310                if(OpenLayers.Util.isEquivalentUrl(nodes.item(i).href, 
     311                                                   this.theme)) { 
     312                    addNode = false; 
     313                    break; 
     314                } 
     315            } 
     316            // only add a new node if one with an equivalent url hasn't already 
     317            // been added 
     318            if(addNode) { 
     319                var cssNode = document.createElement('link'); 
     320                cssNode.setAttribute('rel', 'stylesheet'); 
     321                cssNode.setAttribute('type', 'text/css'); 
     322                cssNode.setAttribute('href', this.theme); 
     323                document.getElementsByTagName('head')[0].appendChild(cssNode); 
     324            } 
    311325        } 
    312326 
  • sandbox/tschaub/feature/tests/test_Map.html

    r4091 r4097  
    338338        t.plan(5); 
    339339         
    340         var head = document.getElementsByTagName('head')[0]; 
    341         var nodeCount = head.childNodes.length; 
    342          
    343         map = new OpenLayers.Map('map'); 
    344         var lastNode = head.childNodes[head.childNodes.length - 1]; 
    345  
    346         t.eq(nodeCount + 1, head.childNodes.length, "by default, a node is added to document head" ); 
    347         t.eq(lastNode.tagName, "LINK", "node added is a link element"); 
    348         t.eq(lastNode.rel, "stylesheet", "node added has rel set to stylesheet"); 
    349         t.eq(lastNode.type, "text/css", "node added has type set to text/css"); 
    350         t.ok(OpenLayers.Util.isEquivalentUrl(map.theme, lastNode.href), "node added has href equivalent to map.theme"); 
     340        var links = document.getElementsByTagName('link'); 
     341        map = new OpenLayers.Map('map'); 
     342        var gotNodes = 0; 
     343        var themeNode = null; 
     344        for(var i=0; i<links.length; ++i) { 
     345            if(OpenLayers.Util.isEquivalentUrl(map.theme, links.item(i).href)) { 
     346                gotNodes += 1; 
     347                themeNode = links.item(i); 
     348            } 
     349        } 
     350        t.eq(gotNodes, 1, "by default, a single link node is added to document"); 
     351        t.ok(themeNode != null, "a link node with the theme href was added"); 
     352        t.eq(themeNode.rel, "stylesheet", "node added has rel set to stylesheet"); 
     353        t.eq(themeNode.type, "text/css", "node added has type set to text/css"); 
     354         
     355        // reconstruct the map to prove that another link is not added 
     356        map = new OpenLayers.Map('map'); 
     357        t.eq(links.length, document.getElementsByTagName('link').length, 
     358             "calling the map constructor twice with the same theme doesn't add duplicate link nodes"); 
    351359    } 
    352360    function test_17_Map_customTheme(t) { 
    353361        t.plan(5); 
    354362         
    355         var head = document.getElementsByTagName('head')[0]; 
    356         var nodeCount = head.childNodes.length; 
    357          
    358         var options = {theme: 'foo'}; 
     363        var customTheme = 'foo'; 
     364        var options = {theme: customTheme}; 
    359365        map = new OpenLayers.Map('map', options); 
    360366 
    361         var lastNode = head.childNodes[head.childNodes.length - 1]; 
    362  
    363         t.eq(nodeCount + 1, head.childNodes.length, "with custom theme, a node is added to document head" ); 
    364         t.eq(lastNode.tagName, "LINK", "node added is a link element"); 
    365         t.eq(lastNode.rel, "stylesheet", "node added has rel set to stylesheet"); 
    366         t.eq(lastNode.type, "text/css", "node added has type set to text/css"); 
    367         t.ok(OpenLayers.Util.isEquivalentUrl(map.theme, lastNode.href), "node added has href equivalent to map.theme"); 
     367        var links = document.getElementsByTagName('link'); 
     368        var gotNodes = 0; 
     369        var themeNode = null; 
     370        for(var i=0; i<links.length; ++i) { 
     371            if(OpenLayers.Util.isEquivalentUrl(map.theme, links.item(i).href)) { 
     372                gotNodes += 1; 
     373                themeNode = links.item(i); 
     374            } 
     375        } 
     376         
     377        t.eq(map.theme, customTheme, "map theme is properly set"); 
     378        t.eq(gotNodes, 1, "with custom theme, a single link node is added to document"); 
     379        t.ok(themeNode != null, "a link node with the theme href was added"); 
     380        t.eq(themeNode.rel, "stylesheet", "node added has rel set to stylesheet"); 
     381        t.eq(themeNode.type, "text/css", "node added has type set to text/css"); 
    368382    } 
    369383    function test_18_Map_noTheme(t) {