var ScatterPlotChart = function() { var width, height, barPadding, len, svg, padding, yScale, xScale; var addComma = d3.format("0,000"); var init = function(options) { width = options.width || 1000; height = options.height || 1000; barPadding = options.barPadding || 1; padding = options.padding || [20, 20, 20, 20]; }; 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, options){ console.log(options) elements .attr({ cx: function(d){ return xScale(+d[options.xKey]); }, cy: function(d) { return yScale(+d[options.yKey]); }, r: options.radius, fill: function(d) { if(d.camp_total > 0) { return 'green'; } else { return 'red'; } } }); }; var addToolTip = function(elements, options) { var str =''; elements .append('title') .text(function(d){ str = d[options.label] + ' - '; options.fields.forEach(function(field){ str += field.label + ': ' + addComma(d[field.key])+ ', '; }); return str; }); }; var addLinearScale = function(options) { return d3.scale.linear() .range([options.rangeMin, options.rangeMax]) .domain([options.domainMin, options.domainMax]); }; var addOrdinalScale = function(options) { return d3.scale.ordinal() .rangeRoundBands([options.rangeMin, options.rangeMax], options.barPadding) .domain(options.domain); }; var addYScale = function(options) { if (options.scaleType === 'linear') { yScale = addLinearScale(options); } else if (options.scaleType === 'ordinal') { yScale = addOrdinalScale(options); } }; var addXScale = function(options) { if (options.scaleType === 'linear') { xScale = addLinearScale(options); } else if (options.scaleType === 'ordinal') { xScale = addOrdinalScale(options); } }; var addAxis = function(scale, orient) { if (scale === 'xScale') { scale = xScale; } else { scale = yScale; } return d3.svg.axis() .scale(scale) .ticks(5) .orient(orient); }; var appendAxis = function(axis, options) { svg.append("g") .attr("class", options.class) .attr("transform", "translate(" + options.xTranslate + " ," + options.yTranslate + " )") .call(axis); }; var addTransition = function(elements, options) { elements .sort(options.sort()) .transition() .delay(options.delay()) .duration(options.duration) .attr(options.attr()); }; return { appendElements: appendElements, drawElements: drawElements, addToolTip: addToolTip, createSVG: createSVG, init: init, addYScale: addYScale, addXScale: addXScale, addAxis: addAxis, appendAxis: appendAxis, addTransition: addTransition }; };