Devel-SizeMe
view release on metacpan or search on metacpan
lib/Devel/SizeMe/Graph/static/jit.js view on Meta::CPAN
Example:
(start code js)
areaChart.restore();
(end code)
See also:
<AreaChart.filter>.
*/
restore: function(callback) {
if(this.busy) return;
this.busy = true;
if(this.config.Tips.enable) this.delegate.tips.hide();
this.select(false, false, false);
this.normalizeDims();
var that = this;
this.delegate.fx.animate({
modes: ['node-property:height:dimArray'],
duration:1500,
onComplete: function() {
that.busy = false;
callback && callback.onComplete();
}
});
},
//adds the little brown bar when hovering the node
select: function(id, name, index) {
if(!this.config.selectOnHover) return;
var s = this.selected;
if(s.id != id || s.name != name
|| s.index != index) {
s.id = id;
s.name = name;
s.index = index;
this.delegate.graph.eachNode(function(n) {
n.setData('border', false);
});
if(id) {
var n = this.delegate.graph.getNode(id);
n.setData('border', s);
var link = index === 0? 'prev':'next';
link = n.getData(link);
if(link) {
n = this.delegate.graph.getByName(link);
if(n) {
n.setData('border', {
name: name,
index: 1-index
});
}
}
}
this.delegate.plot();
}
},
/*
Method: getLegend
Returns an object containing as keys the legend names and as values hex strings with color values.
Example:
(start code js)
var legend = areaChart.getLegend();
(end code)
*/
getLegend: function() {
var legend = {};
var n;
this.delegate.graph.getNode(this.delegate.root).eachAdjacency(function(adj) {
n = adj.nodeTo;
});
var colors = n.getData('colorArray'),
len = colors.length;
$.each(n.getData('stringArray'), function(s, i) {
legend[s] = colors[i % len];
});
return legend;
},
/*
Method: getMaxValue
Returns the maximum accumulated value for the stacks. This method is used for normalizing the graph heights according to the canvas height.
Example:
(start code js)
var ans = areaChart.getMaxValue();
(end code)
In some cases it could be useful to override this method to normalize heights for a group of AreaCharts, like when doing small multiples.
Example:
(start code js)
//will return 100 for all AreaChart instances,
//displaying all of them with the same scale
$jit.AreaChart.implement({
'getMaxValue': function() {
return 100;
}
});
(end code)
*/
getMaxValue: function() {
var maxValue = 0;
this.delegate.graph.eachNode(function(n) {
var valArray = n.getData('valueArray'),
acumLeft = 0, acumRight = 0;
$.each(valArray, function(v) {
acumLeft += +v[0];
acumRight += +v[1];
});
var acum = acumRight>acumLeft? acumRight:acumLeft;
maxValue = maxValue>acum? maxValue:acum;
});
return maxValue;
},
normalizeDims: function() {
//number of elements
var root = this.delegate.graph.getNode(this.delegate.root), l=0;
root.eachAdjacency(function() {
l++;
});
var maxValue = this.getMaxValue() || 1,
size = this.delegate.canvas.getSize(),
config = this.config,
margin = config.Margin,
labelOffset = config.labelOffset + config.Label.size,
fixedDim = (size.width - (margin.left + margin.right)) / l,
animate = config.animate,
height = size.height - (margin.top + margin.bottom) - (config.showAggregates && labelOffset)
- (config.showLabels && labelOffset);
this.delegate.graph.eachNode(function(n) {
var acumLeft = 0, acumRight = 0, animateValue = [];
lib/Devel/SizeMe/Graph/static/jit.js view on Meta::CPAN
var animate = this.config.animate;
var that = this;
var horz = this.config.orientation == 'horizontal';
$.each(values, function(v) {
var n = graph.getByName(v.label);
if(n) {
n.setData('valueArray', $.splat(v.values));
if(json.label) {
n.setData('stringArray', $.splat(json.label));
}
}
});
this.normalizeDims();
delegate.compute();
delegate.select(delegate.root);
if(animate) {
if(horz) {
delegate.fx.animate({
modes: ['node-property:width:dimArray'],
duration:1500,
onComplete: function() {
that.busy = false;
onComplete && onComplete.onComplete();
}
});
} else {
delegate.fx.animate({
modes: ['node-property:height:dimArray'],
duration:1500,
onComplete: function() {
that.busy = false;
onComplete && onComplete.onComplete();
}
});
}
}
},
//adds the little brown bar when hovering the node
select: function(id, name) {
if(!this.config.hoveredColor) return;
var s = this.selected;
if(s.id != id || s.name != name) {
s.id = id;
s.name = name;
s.color = this.config.hoveredColor;
this.delegate.graph.eachNode(function(n) {
if(id == n.id) {
n.setData('border', s);
} else {
n.setData('border', false);
}
});
this.delegate.plot();
}
},
/*
Method: getLegend
Returns an object containing as keys the legend names and as values hex strings with color values.
Example:
(start code js)
var legend = barChart.getLegend();
(end code)
*/
getLegend: function() {
var legend = {};
var n;
this.delegate.graph.getNode(this.delegate.root).eachAdjacency(function(adj) {
n = adj.nodeTo;
});
var colors = n.getData('colorArray'),
len = colors.length;
$.each(n.getData('stringArray'), function(s, i) {
legend[s] = colors[i % len];
});
return legend;
},
/*
Method: getMaxValue
Returns the maximum accumulated value for the stacks. This method is used for normalizing the graph heights according to the canvas height.
Example:
(start code js)
var ans = barChart.getMaxValue();
(end code)
In some cases it could be useful to override this method to normalize heights for a group of BarCharts, like when doing small multiples.
Example:
(start code js)
//will return 100 for all BarChart instances,
//displaying all of them with the same scale
$jit.BarChart.implement({
'getMaxValue': function() {
return 100;
}
});
(end code)
*/
getMaxValue: function() {
var maxValue = 0, stacked = this.config.type.split(':')[0] == 'stacked';
this.delegate.graph.eachNode(function(n) {
var valArray = n.getData('valueArray'),
acum = 0;
if(!valArray) return;
if(stacked) {
$.each(valArray, function(v) {
acum += +v;
});
} else {
acum = Math.max.apply(null, valArray);
}
maxValue = maxValue>acum? maxValue:acum;
});
return maxValue;
},
setBarType: function(type) {
this.config.type = type;
this.delegate.config.Node.type = 'barchart-' + type.split(':')[0];
},
normalizeDims: function() {
//number of elements
var root = this.delegate.graph.getNode(this.delegate.root), l=0;
root.eachAdjacency(function() {
l++;
});
var maxValue = this.getMaxValue() || 1,
size = this.delegate.canvas.getSize(),
config = this.config,
lib/Devel/SizeMe/Graph/static/jit.js view on Meta::CPAN
(end code)
*/
updateJSON: function(json, onComplete) {
if(this.busy) return;
this.busy = true;
var delegate = this.delegate;
var graph = delegate.graph;
var values = json.values;
var animate = this.config.animate;
var that = this;
$.each(values, function(v) {
var n = graph.getByName(v.label),
vals = $.splat(v.values);
if(n) {
n.setData('valueArray', vals);
n.setData('angularWidth', $.reduce(vals, function(x,y){return x+y;}));
if(json.label) {
n.setData('stringArray', $.splat(json.label));
}
}
});
this.normalizeDims();
if(animate) {
delegate.compute('end');
delegate.fx.animate({
modes: ['node-property:dimArray:span', 'linear'],
duration:1500,
onComplete: function() {
that.busy = false;
onComplete && onComplete.onComplete();
}
});
} else {
delegate.refresh();
}
},
//adds the little brown bar when hovering the node
select: function(id, name) {
if(!this.config.hoveredColor) return;
var s = this.selected;
if(s.id != id || s.name != name) {
s.id = id;
s.name = name;
s.color = this.config.hoveredColor;
this.delegate.graph.eachNode(function(n) {
if(id == n.id) {
n.setData('border', s);
} else {
n.setData('border', false);
}
});
this.delegate.plot();
}
},
/*
Method: getLegend
Returns an object containing as keys the legend names and as values hex strings with color values.
Example:
(start code js)
var legend = pieChart.getLegend();
(end code)
*/
getLegend: function() {
var legend = {};
var n;
this.delegate.graph.getNode(this.delegate.root).eachAdjacency(function(adj) {
n = adj.nodeTo;
});
var colors = n.getData('colorArray'),
len = colors.length;
$.each(n.getData('stringArray'), function(s, i) {
legend[s] = colors[i % len];
});
return legend;
},
/*
Method: getMaxValue
Returns the maximum accumulated value for the stacks. This method is used for normalizing the graph heights according to the canvas height.
Example:
(start code js)
var ans = pieChart.getMaxValue();
(end code)
In some cases it could be useful to override this method to normalize heights for a group of PieCharts, like when doing small multiples.
Example:
(start code js)
//will return 100 for all PieChart instances,
//displaying all of them with the same scale
$jit.PieChart.implement({
'getMaxValue': function() {
return 100;
}
});
(end code)
*/
getMaxValue: function() {
var maxValue = 0;
this.delegate.graph.eachNode(function(n) {
var valArray = n.getData('valueArray'),
acum = 0;
$.each(valArray, function(v) {
acum += +v;
});
maxValue = maxValue>acum? maxValue:acum;
});
return maxValue;
},
normalizeDims: function() {
//number of elements
var root = this.delegate.graph.getNode(this.delegate.root), l=0;
root.eachAdjacency(function() {
l++;
});
var maxValue = this.getMaxValue() || 1,
config = this.config,
animate = config.animate,
rho = this.delegate.config.levelDistance;
this.delegate.graph.eachNode(function(n) {
var acum = 0, animateValue = [];
$.each(n.getData('valueArray'), function(v) {
acum += +v;
animateValue.push(1);
});
var stat = (animateValue.length == 1) && !config.updateHeights;
if(animate) {
n.setData('dimArray', $.map(n.getData('valueArray'), function(n) {
( run in 0.673 second using v1.01-cache-2.11-cpan-c966e8aa7e8 )