var Chart = function() { var width, height, barPadding, factor, len, svg; var addComma = d3.format("0,000"); var init = function(options) { width = options.width || 1000; height = options.height || 1000; barPadding = options.barPadding || 1; factor = options.factor || 1; }; var createSVG = function(){ svg = d3.select('body') .append('svg') .attr('width', width) .attr('height', height); return svg; }; var appendElements = function(data, element) { len = data.length; return svg.selectAll(element) .data(data) .enter() .append(element); }; var drawElements = function(elements, key){ elements .attr({ x: 0, y: function(d, i) { return i * 10; }, width: function(d,i){ return +d[key]/factor; }, height: 8 }); }; var addToolTip = function(elements, label, value) { elements .append('title') .text(function(d){ return d[label] + ': ' + addComma(d[value]); }); }; return { appendElements: appendElements, drawElements: drawElements, addToolTip: addToolTip, createSVG: createSVG, init: init }; };