!function() {
// module container
var boxPlotFunctions = {};
boxPlotFunctions.removeTooltip = removeTooltip;
function removeTooltip (d, i, element) {
if (!$(element).popover) return;
$('.popover').each(function() {
$(this).remove();
});
}
boxPlotFunctions.showTooltip = showTooltip;
function showTooltip (d, i, element, constituents, options) {
if (!$(element).popover) return;
$(element).popover({
placement: 'auto top',
container: '#' + constituents.elements.domParent.attr('id'),
trigger: 'manual',
html : true,
content: function() {
var identifier = options.data.identifier && d[options.data.identifier] ?
d[options.data.identifier] : 'undefined';
var value = options.axes.y.label && d[options.axes.y.label] ?
options.axes.y.tickFormat(d[options.axes.y.label]) : '';
var message = "";
message += d[options.data.identifier] + ': ' + d[options.axes.y.label] + "";
return message;
}
});
$(element).popover('show');
}
boxPlotFunctions.defineTooltip = defineTooltip;
function defineTooltip(constituents, options, events) {
var tip = d3.tip().attr('class','explodingBoxplot tip')
.direction('n')
.html(tipFunction)
function tipFunction(d) {
var color = options.data.color_index && d[options.data.color_index] ?
constituents.scales.color(d[options.data.color_index]) : 'blue';
var identifier = options.data.identifier && d[options.data.identifier] ?
d[options.data.identifier] : 'undefined';
var value = options.axes.y.label && d[options.axes.y.label] ?
options.axes.y.tickFormat(d[options.axes.y.label]) : '';
var message = ' ' + identifier +
' : ' + value + '';
return message;
}
events.point.mouseover = tip.show;
events.point.mouseout = tip.hide;
if (constituents.elements.chartRoot) constituents.elements.chartRoot.call(tip);
}
boxPlotFunctions.defaultDistribution = defaultDistribution;
function defaultDistribution(tooltip) {
var default_distributions = 'atp_wta.dat';
var container = d3.select('#pointDistributions');
d3.json(default_distributions, function(error, result) {
if (error || !result) return;
var xbp = explodingBoxplot();
boxPlotFunctions.xbp = xbp;
if (tooltip) {
if (tooltip == 'popover') xbp.events({ 'point': { 'mouseover': showTooltip, 'mouseout': removeTooltip } });
if (tooltip == 'd3-tip') xbp.events({ 'update': { 'ready': defineTooltip } });
}
xbp.options(
{
id: 'demo',
data: {
group: 'Set Score',
color_index: 'Set Score',
identifier: 'h2h'
},
width: 700,
height: 480,
axes: {
x: { label: 'Set Score' },
y: { label: 'Total Points' }
}
}
);
xbp.data(result.data);
container.call(xbp);
xbp.update();
});
}
boxPlotFunctions.demoSetup = demoSetup;
function demoSetup() {
var data;
var original_width;
var original_height;
var vizcontrol = d3.select('#controls');
var viztable = vizcontrol.append('table').attr('align', 'center');
var row1 = viztable.append('tr').append('td').attr('align', 'left');
row1.append('input').attr('name', 'tooltip').attr('id', 'popover').attr('type', 'radio').attr('value', 'popover');
row1.append('label').html(' Bootstrap Popover').style('font-size', '12px');
document.getElementById("popover").addEventListener("change", function() {
boxPlotFunctions.xbp.events({ 'point': { 'mouseover': showTooltip, 'mouseout': removeTooltip }, 'update': { 'ready': null } });
});
var row2 = viztable.append('tr').append('td').attr('align', 'left');
row2.append('input').attr('name', 'tooltip').attr('id', 'd3tip').attr('type', 'radio').attr('value', 'd3tip').attr('checked', 'checked');
row2.append('label').html(' d3-tip Tooltip').style('font-size', '12px');
document.getElementById("d3tip").addEventListener("change", function() {
boxPlotFunctions.xbp.events({ 'update': { 'ready': defineTooltip } });
boxPlotFunctions.xbp.update();
});
var row3 = viztable.append('tr').append('td').append('hr');
var row4 = viztable.append('tr').append('td').attr('align', 'left');
row4.append('input').attr('name', 'colors').attr('id', 'shuffle').attr('type', 'radio').attr('value', 'shuffle');
row4.append('label').html(' Shuffle Colors').style('font-size', '12px');
document.getElementById("shuffle").addEventListener("change", function() {
var shuffle_colors = {
7: "#a6cee3", 4: "#ff7f00", 1: "#b2df8a", 3: "#1f78b4", 2: "#fdbf6f", 0: "#33a02c",
5: "#cab2d6", 8: "#6a3d9a", 9: "#fb9a99", 6: "#e31a1c", 11: "#ffff99", 10: "#b15928"
};
boxPlotFunctions.xbp.colors(shuffle_colors);
boxPlotFunctions.xbp.update();
});
var row5 = viztable.append('tr').append('td').attr('align', 'left');
row5.append('input').attr('name', 'colors').attr('id', 'default').attr('type', 'radio').attr('value', 'default').attr('checked', 'checked');
row5.append('label').html(' Default Colors').style('font-size', '12px');
document.getElementById("default").addEventListener("change", function() {
boxPlotFunctions.xbp.colors({foo: 'bogus'});
boxPlotFunctions.xbp.update();
});
var row6 = viztable.append('tr').append('td').append('hr');
var row7 = viztable.append('tr').append('td').attr('align', 'left');
row7.append('input').attr('name', 'size').attr('id', 'resize').attr('type', 'radio').attr('value', 'resize');
row7.append('label').html(' Resize').style('font-size', '12px');
document.getElementById("resize").addEventListener("change", function() {
original_width = boxPlotFunctions.xbp.width();
original_height = boxPlotFunctions.xbp.height();
boxPlotFunctions.xbp.width(400).height(300);
boxPlotFunctions.xbp.update();
});
var row8 = viztable.append('tr').append('td').attr('align', 'left');
row8.append('input').attr('name', 'size').attr('id', 'original').attr('type', 'radio').attr('value', 'original').attr('checked', 'checked');
row8.append('label').html(' Original Dimensions').style('font-size', '12px');
document.getElementById("original").addEventListener("change", function() {
if (original_width && original_height) {
boxPlotFunctions.xbp.width(original_width).height(original_height);
boxPlotFunctions.xbp.update();
}
});
var row9 = viztable.append('tr').append('td').append('hr');
var row10 = viztable.append('tr').append('td').attr('align', 'left');
row10.append('input').attr('name', 'data').attr('id', 'slice').attr('type', 'radio').attr('value', 'slice');
row10.append('label').html(' Slice Data').style('font-size', '12px');
document.getElementById("slice").addEventListener("change", function() {
data = boxPlotFunctions.xbp.data();
boxPlotFunctions.xbp.data(data.slice(1000, 3000));
boxPlotFunctions.xbp.update();
});
var row11 = viztable.append('tr').append('td').attr('align', 'left');
row11.append('input').attr('name', 'data').attr('id', 'full').attr('type', 'radio').attr('value', 'full').attr('checked', 'checked');
row11.append('label').html(' Original Data').style('font-size', '12px');
document.getElementById("full").addEventListener("change", function() {
if (data) {
boxPlotFunctions.xbp.data(data);
boxPlotFunctions.xbp.update();
}
});
var row12 = viztable.append('tr').append('td').append('hr');
var row13 = viztable.append('tr').append('td').attr('align', 'left');
row13.append('input').attr('name', 'attribute').attr('id', 'shots').attr('type', 'radio').attr('value', 'shots');
row13.append('label').html(' Change Attribute').style('font-size', '12px');
document.getElementById("shots").addEventListener("change", function() {
boxPlotFunctions.xbp.options( { axes: { y: { label: 'Total Shots' } } });
boxPlotFunctions.xbp.update();
});
var row14 = viztable.append('tr').append('td').attr('align', 'left');
row14.append('input').attr('name', 'attribute').attr('id', 'points').attr('type', 'radio').attr('value', 'points').attr('checked', 'checked');
row14.append('label').html(' Original Attribute').style('font-size', '12px');
document.getElementById("points").addEventListener("change", function() {
boxPlotFunctions.xbp.options( { axes: { y: { label: 'Total Points' } } });
boxPlotFunctions.xbp.update();
});
var row12 = viztable.append('tr').append('td').append('hr');
var row13 = viztable.append('tr').append('td').attr('align', 'left')
.html('Explode: click on boxes
Reset: double-click background');
}
if (typeof define === "function" && define.amd) define(boxPlotFunctions); else if (typeof module === "object" && module.exports) module.exports = boxPlotFunctions;
this.boxPlotFunctions = boxPlotFunctions;
}();