56 lines
2.1 KiB
JavaScript
56 lines
2.1 KiB
JavaScript
define("dojox/treemap/ScaledLabel", ["dojo/_base/declare", "dojo/dom-geometry", "dojo/dom-construct", "dojo/dom-style"],
|
|
function(declare, domGeom, domConstruct, domStyle) {
|
|
|
|
return declare("dojox.treemap.ScaledLabel", null, {
|
|
// summary:
|
|
// Specializes TreeMap to display scaled leaf labels instead of constant size labels.
|
|
|
|
onRendererUpdated: function(evt){
|
|
if(evt.kind == "leaf"){
|
|
var renderer = evt.renderer;
|
|
// start back with default size
|
|
var oldSize = domStyle.get(renderer, "fontSize");
|
|
domStyle.set(renderer.firstChild, "fontSize", oldSize);
|
|
oldSize = parseInt(oldSize);
|
|
var hRatio = 0.75 * domGeom.getContentBox(renderer).w / domGeom.getMarginBox(renderer.firstChild).w;
|
|
var vRatio = domGeom.getContentBox(renderer).h / domGeom.getMarginBox(renderer.firstChild).h;
|
|
var hDiff = domGeom.getContentBox(renderer).w - domGeom.getMarginBox(renderer.firstChild).w;
|
|
var vDiff = domGeom.getContentBox(renderer).h - domGeom.getMarginBox(renderer.firstChild).h;
|
|
var newSize = Math.floor(oldSize * Math.min(hRatio, vRatio));
|
|
while(vDiff > 0 && hDiff > 0){
|
|
domStyle.set(renderer.firstChild, "fontSize", newSize + "px");
|
|
hDiff = domGeom.getContentBox(renderer).w - domGeom.getMarginBox(renderer.firstChild).w;
|
|
vDiff = domGeom.getContentBox(renderer).h - domGeom.getMarginBox(renderer.firstChild).h;
|
|
oldSize = newSize;
|
|
newSize += 1;
|
|
}
|
|
if(vDiff < 0 || hDiff < 0){
|
|
// back track
|
|
domStyle.set(renderer.firstChild, "fontSize", oldSize + "px");
|
|
}
|
|
}
|
|
},
|
|
|
|
createRenderer: function(item, level, kind){
|
|
var renderer = this.inherited(arguments);
|
|
if(kind == "leaf"){
|
|
var p = domConstruct.create("div");
|
|
domStyle.set(p, {
|
|
"position": "absolute",
|
|
"width": "auto"
|
|
});
|
|
domConstruct.place(p, renderer);
|
|
}
|
|
return renderer;
|
|
},
|
|
|
|
styleRenderer: function(renderer, item, level, kind){
|
|
if (kind != "leaf"){
|
|
this.inherited(arguments);
|
|
}else{
|
|
domStyle.set(renderer, "background", this.getColorForItem(item).toHex());
|
|
renderer.firstChild.innerHTML = this.getLabelForItem(item);
|
|
}
|
|
}
|
|
});
|
|
}); |