in jspwiki-war/src/main/scripts/jspwiki-common.js [1155:1236]
$ES('*[class^=graphBars]',page).each( function(g){
var lbound = 20, //max - lowerbound size of bar
ubound = 320, //min - upperbound size of bar
vwidth = 20, //vertical bar width
color1 = null, // bar color
color2 = null, // 2nd bar color used depending on bar-type
isGauge = false, // gauge bar
isProgress = false, // progress bar
isHorizontal = true,// horizontal or vertical orientation
parms = g.className.substr(9).split('-'),
barName = parms.shift(), //first param is optional barName
size,bars,barData,border;
parms.each(function(p){
p = p.toLowerCase();
if(p == "vertical") { isHorizontal = false; }
else if(p == "progress") { isProgress = true; }
else if(p == "gauge") { isGauge = true; }
else if(p.indexOf("min") == 0) { lbound = p.substr(3).toInt(); }
else if(p.indexOf("max") == 0) { ubound = p.substr(3).toInt(); }
else if(p != "") {
p = new Color(p,'hex'); if(!p.hex) return;
if(!color1) color1 = p;
else if(!color2) color2 = p;
}
});
if( !color2 && color1) color2 = (isGauge || isProgress) ? color1.invert() : color1;
if( lbound > ubound ) { var m = ubound; ubound=lbound; ubound=m; }
size = ubound-lbound;
bars = $ES('.gBar'+barName, g); //collect all gBar elements
if( (bars.length==0) && barName && (barName!="")){ // check table data
bars = this.getTableValues(g, barName);
}
if( !bars ) return;
barData = this.parseBarData( bars, lbound, size );
border = (isHorizontal ? 'borderLeft' : 'borderBottom');
bars.each(function(b,j){
var bar1 = $H().set(border+'Width',barData[j]),
bar2 = $H(), // 2nd bar only valid ico 'progress'
barEL = new Element('span',{'class':'graphBar'}),
pb = b.getParent(); // parent of gBar element
if(isHorizontal){
barEL.setHTML('x');
if(isProgress){
bar2.extend(bar1.obj);
bar1.set(border+'Width',ubound-barData[j]).set('marginLeft','-1ex');
}
} else { // isVertical
if(pb.getTag()=='td') { pb = new Element('div').wrapChildren(pb); }
pb.setStyles({'height':ubound+b.getStyle('lineHeight').toInt(), 'position':'relative'});
b.setStyle('position', 'relative'); //needed for inserted spans ;-)) hehe
if( !isProgress ) { b.setStyle('top', (ubound-barData[j])); }
bar1.extend({'position':'absolute', 'width':vwidth, 'bottom':'0'});
if(isProgress){
bar2.extend(bar1.obj).set(border+'Width', ubound);
}
}
if(isProgress){
if(color1){ bar1.set('borderColor', color1.hex); }
if(color2){
bar2.set('borderColor', color2.hex);
} else {
bar1.set('borderColor', 'transparent');
}
} else if(color1){
var percent = isGauge ? (barData[j]-lbound)/size : j/(bars.length-1);
bar1.set('borderColor', color1.mix(color2, 100 * percent).hex);
}
if(bar2.length > 0){ barEL.clone().setStyles(bar2.obj).injectBefore(b); };
if(bar1.length > 0){ barEL.setStyles(bar1.obj).injectBefore(b); };
},this);
},this);