jui.define("chart.brush.equalizer", [], function() { /** * @class chart.brush.equalizer * @extends chart.brush.core */ var EqualizerBrush = function(chart, axis, brush) { var g, zeroY, width, barWidth, half_width; this.drawBefore = function() { g = chart.svg.group(); zeroY = axis.y(0); width = axis.x.rangeBand(); half_width = (width - brush.outerPadding * 2) / 2; barWidth = (width - brush.outerPadding * 2 - (brush.target.length - 1) * brush.innerPadding) / brush.target.length; } this.draw = function() { this.eachData(function(data, i) { var startX = this.offset("x", i) - half_width; for (var j = 0; j < brush.target.length; j++) { var barGroup = chart.svg.group(); var startY = axis.y(data[brush.target[j]]), padding = 1.5, eY = zeroY, eIndex = 0; if (startY <= zeroY) { while (eY > startY) { var unitHeight = (eY - brush.unit < startY) ? Math.abs(eY - startY) : brush.unit; var r = chart.svg.rect({ x : startX, y : eY - unitHeight, width : barWidth, height : unitHeight, fill : this.color(Math.floor(eIndex / brush.gap)) }); eY -= unitHeight + padding; eIndex++; barGroup.append(r); } } else { while (eY < startY) { var unitHeight = (eY + brush.unit > startY) ? Math.abs(eY - startY) : brush.unit; var r = chart.svg.rect({ x : startX, y : eY, width : barWidth, height : unitHeight, fill : this.color(Math.floor(eIndex / brush.gap)) }); eY += unitHeight + padding; eIndex++; barGroup.append(r); } } this.addEvent(barGroup, i, j); g.append(barGroup); startX += barWidth + brush.innerPadding; } }); return g; } } EqualizerBrush.setup = function() { return { /** @cfg {Number} [innerPadding=10] Determines the inner margin of an equalizer.*/ innerPadding: 10, /** @cfg {Number} [outerPadding=15] Determines the outer margin of an equalizer. */ outerPadding: 15, /** @cfg {Number} [unit=5] Determines the reference value that represents the color.*/ unit: 5, /** @cfg {Number} [gap=5] Determines the number of columns in an equalizer - expressed as a color.*/ gap: 5 }; } return EqualizerBrush; }, "chart.brush.core");