Changeset 11494

Show
Ignore:
Timestamp:
11/12/07 08:59:52 (14 months ago)
Author:
bill
Message:

Fixes #5060 on trunk: ColorPalette? inefficient code and memory leak on IE6.
Also makes _Templated.js's dojo.addOnUnload() call itempotent since it executes twice
when debugAtAllCosts is true (refs #5091).

Thanks to Jean Cunat (Orange-ftgroup CCLA on file) for patch.

Location:
dijit/trunk
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • dijit/trunk/ColorPalette.js

    r11168 r11494  
    100100                this._highlightNodes = [];       
    101101                this.colorNames = dojo.i18n.getLocalization("dojo", "colors", this.lang); 
    102  
     102                var url = dojo.moduleUrl("dijit", "templates/blank.gif"), 
     103            colorObject = new dojo.Color(), 
     104                    coords = this._paletteCoords; 
    103105                for(var row=0; row < choices.length; row++){ 
    104                         for(var col=0; col < choices[row].length; col++){ 
    105                                 var highlightNode = document.createElement("img"); 
    106                                 highlightNode.src = dojo.moduleUrl("dijit", "templates/blank.gif"); 
    107                                 dojo.addClass(highlightNode, "dijitPaletteImg"); 
    108                                 var color = choices[row][col]; 
    109                                 var colorValue = new dojo.Color(dojo.Color.named[color]); 
    110                                 highlightNode.alt = this.colorNames[color]; 
    111                                 highlightNode.color = colorValue.toHex(); 
    112                                 var highlightStyle = highlightNode.style; 
    113                                 highlightStyle.color = highlightStyle.backgroundColor = highlightNode.color; 
    114                                 dojo.forEach(["Dijitclick", "MouseOut", "MouseOver", "Blur", "Focus"], function(handler){ 
    115                                         this.connect(highlightNode, "on"+handler.toLowerCase(), "_onColor"+handler); 
    116                                 }, this); 
    117                                 this.divNode.appendChild(highlightNode); 
    118                                 var coords = this._paletteCoords; 
    119                                 highlightStyle.top = coords.topOffset + (row * coords.cHeight) + "px"; 
    120                                 highlightStyle.left = coords.leftOffset + (col * coords.cWidth) + "px"; 
    121                                 highlightNode.setAttribute("tabIndex","-1"); 
    122                                 highlightNode.title = this.colorNames[color]; 
    123                                 dijit.setWaiRole(highlightNode, "gridcell"); 
    124                                 highlightNode.index = this._highlightNodes.length; 
    125                                 this._highlightNodes.push(highlightNode); 
    126                         } 
     106                        for(var col=0; col < choices[row].length; col++) { 
     107                var highlightNode = document.createElement("img"); 
     108                highlightNode.src = url; 
     109                dojo.addClass(highlightNode, "dijitPaletteImg"); 
     110                var color = choices[row][col], 
     111                        colorValue = colorObject.setColor(dojo.Color.named[color]); 
     112                highlightNode.alt = this.colorNames[color]; 
     113                highlightNode.color = colorValue.toHex(); 
     114                var highlightStyle = highlightNode.style; 
     115                highlightStyle.color = highlightStyle.backgroundColor = highlightNode.color; 
     116                dojo.forEach(["Dijitclick", "MouseOut", "MouseOver", "Blur", "Focus"], function(handler) { 
     117                    this.connect(highlightNode, "on" + handler.toLowerCase(), "_onColor" + handler); 
     118                }, this); 
     119                this.divNode.appendChild(highlightNode); 
     120                highlightStyle.top = coords.topOffset + (row * coords.cHeight) + "px"; 
     121                highlightStyle.left = coords.leftOffset + (col * coords.cWidth) + "px"; 
     122                highlightNode.setAttribute("tabIndex", "-1"); 
     123                highlightNode.title = this.colorNames[color]; 
     124                dijit.setWaiRole(highlightNode, "gridcell"); 
     125                highlightNode.index = this._highlightNodes.length; 
     126                this._highlightNodes.push(highlightNode); 
     127            } 
    127128                } 
    128129                this._highlightNodes[this._currentFocus].tabIndex = 0; 
     
    145146                }; 
    146147                for(var key in keyIncrementMap){ 
    147                         dijit.typematic.addKeyListener(this.domNode, 
     148                        this._connects.push(dijit.typematic.addKeyListener(this.domNode, 
    148149                                {keyCode:dojo.keys[key], ctrlKey:false, altKey:false, shiftKey:false}, 
    149150                                this, 
     
    152153                                        return function(count){ this._navigateByKey(increment, count); }; 
    153154                                }(), 
    154                                 this.timeoutChangeRate, this.defaultTimeout); 
     155                                this.timeoutChangeRate, this.defaultTimeout)); 
    155156                } 
    156157        }, 
  • dijit/trunk/tests/test_ColorPalette.html

    r10409 r11494  
    77 
    88        <script type="text/javascript" src="../../dojo/dojo.js" 
    9                 djConfig="isDebug: true, parseOnLoad: true, debugAtAllCosts: true"></script> 
     9                djConfig="isDebug: true, parseOnLoad: true"></script> 
    1010        <script type="text/javascript" src="_testCommon.js"></script> 
    1111 
     
    1717                var palette; 
    1818                function init(){ 
    19                         palette = new dijit.ColorPalette({palette: "7x10", id: "progPalette"}, dojo.byId("programPalette")); 
    20                 } 
     19            var date0 = new Date(); 
     20            palette = new dijit.ColorPalette({palette: "7x10", id: "progPalette"}, dojo.byId("programPalette")); 
     21            console.log("creation time: " + (new Date() - date0) ); 
     22        } 
    2123 
    2224                dojo.addOnLoad(init); 
  • dijit/trunk/_Templated.js

    r11481 r11494  
    258258                                dojo._destroyElement(value); 
    259259                        } 
    260                         cache[key] = null; 
     260                        delete cache[key]; 
    261261                } 
    262262        });