diff --git a/build/aeTable.js b/build/aeTable.js
index 8a54213..90509ea 100644
--- a/build/aeTable.js
+++ b/build/aeTable.js
@@ -47,8 +47,8 @@ var colorScale = d3.scale.ordinal().range(['#377EB8', '#4DAF4A', '#984EA3', '#FF
\------------------------------------------------------------------------------------------------*/
function layout() {
- var wrapper = this.wrap.append('div').attr('class', 'aeTable row-fluid').append('div').attr('class', 'table-wrapper');
- wrapper.append('div').attr('class', 'controls form-inline row-fluid');
+ var wrapper = this.wrap.append('div').attr('class', 'aeTable').append('div').attr('class', 'table-wrapper');
+ wrapper.append('div').attr('class', 'controls');
wrapper.append('div').attr('class', 'SummaryTable');
if (this.config.validation) this.wrap.append('a').attr({
id: 'downloadCSV'
@@ -269,13 +269,13 @@ var summaryControl = { init: init$4 };
function init$5(chart) {
//draw the search control
- var selector = chart.controls.wrap.append('div').attr('class', 'searchForm navbar-search pull-right').attr('onsubmit', 'return false;');
+ var selector = chart.controls.wrap.append('div').attr('class', 'searchForm wc-navbar-search pull-right').attr('onsubmit', 'return false;');
//Clear search control.
selector.selectAll('span.seach-label, input.searchBar').remove();
//Generate search control.
- var searchLabel = selector.append('span').attr('class', 'search-label label hidden');
+ var searchLabel = selector.append('span').attr('class', 'search-label label wc-hidden');
searchLabel.append('span').attr('class', 'search-count');
searchLabel.append('span').attr('class', 'clear-search').html('☓');
selector.append('input').attr('type', 'text').attr('class', 'searchBar search-query input-medium').attr('placeholder', 'Search');
@@ -297,10 +297,10 @@ function init$5(chart) {
chart.wrap.selectAll('div.SummaryTable table tbody tr').classed('search', false);
//Hide expand/collapse cells.
- chart.wrap.selectAll('div.SummaryTable table tbody tr td.controls span').classed('hidden', true);
+ chart.wrap.selectAll('div.SummaryTable table tbody tr td.controls span').classed('wc-hidden', true);
//Display 'clear search' icon.
- chart.wrap.select('span.search-label').classed('hidden', false);
+ chart.wrap.select('span.search-label').classed('wc-hidden', false);
//Flag summary table.
var tab = chart.wrap.select('div.SummaryTable').classed('search', true);
@@ -372,7 +372,7 @@ function clear(chart) {
});
//Remove 'clear search' icon and label.
- chart.wrap.select('span.search-label').classed('hidden', true);
+ chart.wrap.select('span.search-label').classed('wc-hidden', true);
//Clear search flags.
chart.wrap.selectAll('div.SummaryTable').classed('search', false);
@@ -420,7 +420,7 @@ function redraw(chart) {
\------------------------------------------------------------------------------------------------*/
function wipe(canvas) {
- canvas.select('.table-wrapper .SummaryTable .alert').remove();
+ canvas.select('.table-wrapper .SummaryTable .wc-alert').remove();
canvas.select('.table-wrapper .SummaryTable table').remove();
canvas.select('.table-wrapper .SummaryTable button').remove();
canvas.select('.table-wrapper .DetailTable').remove();
@@ -709,7 +709,7 @@ function fillRow(currentRow, chart, d) {
return d.key;
}).enter().append('td').attr('class', 'values').classed('total', function (d) {
return d.key == 'Total';
- }).classed('hidden', function (d) {
+ }).classed('wc-hidden', function (d) {
if (d.key == 'Total') {
return !chart.config.defaults.totalCol;
} else {
@@ -732,7 +732,7 @@ function fillRow(currentRow, chart, d) {
return chart.percentScale(d.values['per']);
}).attr('cy', chart.config.plotSettings.h / 2).attr('r', chart.config.plotSettings.r - 2).attr('fill', function (d) {
return table.colorScale(d.values['group']);
- }).classed('hidden', function (d) {
+ }).classed('wc-hidden', function (d) {
if (d.key == 'Total') {
return !chart.config.defaults.totalCol;
} else {
@@ -757,7 +757,7 @@ function fillRow(currentRow, chart, d) {
return chart.diffScale(d.upper);
}).attr('x2', function (d) {
return chart.diffScale(d.lower);
- }).attr('y1', chart.config.plotSettings.h / 2).attr('y2', chart.config.plotSettings.h / 2).attr('class', 'ci').classed('hidden', chart.config.groups.length > 2).attr('stroke', '#bbb');
+ }).attr('y1', chart.config.plotSettings.h / 2).attr('y2', chart.config.plotSettings.h / 2).attr('class', 'ci').classed('wc-hidden', chart.config.groups.length > 2).attr('stroke', '#bbb');
//Append graphical rate differences.
var triangle = d3.svg.line().x(function (d) {
@@ -1059,7 +1059,7 @@ var defaultSettings = {
\------------------------------------------------------------------------------------------------*/
function setDefaults(chart) {
function errorNote(msg) {
- chart.wrap.append('div').attr('class', 'alert').text('Fatal Error: ' + msg);
+ chart.wrap.append('div').attr('class', 'wc-alert').text('Fatal Error: ' + msg);
}
/////////////////////////////
@@ -1263,7 +1263,7 @@ function init$6(chart) {
/////////////////////////////////////
//Check to make sure there is some data
if (!chart.data.major.length) {
- chart.wrap.select('.SummaryTable').append('div').attr('class', 'alert').text('Error: No data matches the current filters. Update the filters to see results.');
+ chart.wrap.select('.SummaryTable').append('div').attr('class', 'wc-alert').text('Error: No data matches the current filters. Update the filters to see results.');
throw new Error('No data found in the column specified for major category. ');
}
@@ -1307,7 +1307,7 @@ function init$6(chart) {
return chart.colorScale(d.key);
}).attr('class', 'values').classed('total', function (d) {
return d.key == 'Total';
- }).classed('hidden', function (d) {
+ }).classed('wc-hidden', function (d) {
if (d.key == 'Total') {
return !chart.config.defaults.totalCol;
} else {
@@ -1418,13 +1418,13 @@ function init$6(chart) {
});
//Display CI;
- d3.select(this.parentNode).select('.ci').classed('hidden', false);
+ d3.select(this.parentNode).select('.ci').classed('wc-hidden', false);
//show cell counts for selected groups
showCellCounts(chart, currentRow, d.group1);
showCellCounts(chart, currentRow, d.group2);
}).on('mouseout', function (d) {
- d3.select(this.parentNode).select('.ci').classed('hidden', true); //hide CI
+ d3.select(this.parentNode).select('.ci').classed('wc-hidden', true); //hide CI
chart.wrap.selectAll('.annote').remove(); //Delete annotations.
});
@@ -1451,13 +1451,16 @@ function init$6(chart) {
//Update classes (row visibility handeled via css)
var toggle = !chart.wrap.select('.SummaryTable table').classed('summary');
chart.wrap.select('.SummaryTable table').classed('summary', toggle);
- chart.wrap.select('div.controls').selectAll('div').classed('hidden', toggle);
+ chart.wrap.select('div.controls').selectAll('div').classed('wc-hidden', toggle);
//Create/remove the participant level table
if (toggle) {
var major = d.values[0].values['major'];
var minor = d.values[0].values['minor'];
- var detailTableSettings = { major: major, minor: minor };
+ var detailTableSettings = {
+ major: major,
+ minor: minor
+ };
chart.detailTable.init(chart, detailTableSettings);
} else {
chart.wrap.select('.DetailTable').remove();
@@ -1478,7 +1481,7 @@ function toggleRows(chart) {
//Toggle Difference plots
var differenceToggle = false;
- chart.wrap.selectAll('.SummaryTable .diffplot').classed('hidden', differenceToggle);
+ chart.wrap.selectAll('.SummaryTable .diffplot').classed('wc-hidden', differenceToggle);
//Filter based on prevalence.
var filterVal = chart.wrap.select('div.controls input.rateFilter').property('value');
@@ -1497,7 +1500,7 @@ function toggleRows(chart) {
});
filterRows.classed('filter', 'true');
- d3.select(this).select('tr.major td.controls span').classed('hidden', filterRows[0].length + 1 >= allRows[0].length);
+ d3.select(this).select('tr.major td.controls span').classed('wc-hidden', filterRows[0].length + 1 >= allRows[0].length);
});
}
@@ -1561,9 +1564,9 @@ function init$7(chart, detailTableSettings) {
closeButton.on('click', function () {
chart.wrap.select('.SummaryTable table').classed('summary', false);
- chart.wrap.select('div.controls').selectAll('div').classed('hidden', false);
+ chart.wrap.select('div.controls').selectAll('div').classed('wc-hidden', false);
chart.wrap.select('div.controls').select('div.custom-filters').selectAll('select').property('disabled', '');
- chart.wrap.selectAll('.SummaryTable table tbody tr').classed('active', false);
+ chart.wrap.selectAll('.SummaryTable table tbody tr').classed('wc-active', false);
chart.detailTable.wrap.remove();
chart.detailTable.head.remove();
});
@@ -1574,7 +1577,7 @@ function init$7(chart, detailTableSettings) {
//Details about current population filters
var filtered = chart.raw_event_data.length != chart.population_event_data.length;
if (filtered) {
- chart.wrap.select('div.controls').select('div.custom-filters').classed('hidden', false).selectAll('select').property('disabled', 'disabled');
+ chart.wrap.select('div.controls').select('div.custom-filters').classed('wc-hidden', false).selectAll('select').property('disabled', 'disabled');
chart.detailTable.head.append('span').html(filtered ? 'The listing is filtered as shown:' : '');
}
diff --git a/build/aeTable.min.js b/build/aeTable.min.js
index 23ea25d..cf44106 100644
--- a/build/aeTable.min.js
+++ b/build/aeTable.min.js
@@ -1,2 +1,4 @@
-(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?module.exports=factory():typeof define==="function"&&define.amd?define(factory):global.aeTable=factory()})(this,function(){"use strict";function init(data){var settings=this.config;this.wrap=d3.select(this.element).append("div");this.wrap.attr("class","aeExplorer");this.raw_data=data;this.util.setDefaults(this);this.layout();var placeholderCol=this.config.defaults.placeholderFlag.value_col;var placeholderValues=this.config.defaults.placeholderFlag.values;this.raw_data.forEach(function(d){return d.placeholderFlag=placeholderValues.indexOf(d[placeholderCol])>-1});this.raw_event_data=data.filter(function(d){return!d.placeholderFlag});this.controls.init(this);this.AETable.redraw(this)}var colorScale=d3.scale.ordinal().range(["#377EB8","#4DAF4A","#984EA3","#FF7F00","#A65628","#F781BF","#FFFF33","#E41A1C"]);function layout(){var wrapper=this.wrap.append("div").attr("class","aeTable row-fluid").append("div").attr("class","table-wrapper");wrapper.append("div").attr("class","controls form-inline row-fluid");wrapper.append("div").attr("class","SummaryTable");if(this.config.validation)this.wrap.append("a").attr({id:"downloadCSV"}).text("Download Summarized Data")}function init$1(chart){chart.controls.wrap=chart.wrap.select("div.controls");chart.controls.wrap.attr("onsubmit","return false;");chart.controls.wrap.selectAll("*").remove();chart.controls.filters.rate.init(chart);chart.controls.summaryControl.init(chart);chart.controls.search.init(chart);chart.controls.filters.custom.init(chart);chart.controls.filters.rate.set(chart);chart.controls.wrap.selectAll("div").classed("filterDiv",true)}function init$2(chart){var selector=chart.controls.wrap.append("div").attr("class","rate-filter");selector.selectAll("span.filterLabel, div.rateFilterDiv").remove();selector.append("span").attr("class","sectionHead").text("Filter by prevalence:");var rateFilter=selector.append("div").attr("class","input-prepend input-append input-medium rateFilterDiv");rateFilter.append("span").attr("class","add-on before").html("≥");rateFilter.append("input").attr({class:"appendedPrependedInput rateFilter",type:"text"});rateFilter.append("span").attr("class","add-on after").text("%");rateFilter.on("change",function(d){chart.wrap.selectAll(".SummaryTable table tbody tr").classed("filter",false);chart.AETable.toggleRows(chart)})}function set(chart){chart.controls.wrap.select("input.rateFilter").property("value",chart.config.defaults.maxPrevalence?chart.config.defaults.maxPrevalence:0)}var rate={init:init$2,set:set};function init$3(chart){var selector=chart.controls.wrap.append("div").attr("class","custom-filters");chart.config.variables.filters.forEach(function(e){var currentData=e.type=="participant"?chart.raw_data:chart.raw_event_data;e.values=d3.nest().key(function(d){return d[e.value_col]}).entries(currentData).map(function(d){return d.key})});chart.config.variables.filters=chart.config.variables.filters.filter(function(d){if(d.values.length<=1){console.warn(d.value_col+" filter not shown since the variable has less than 2 levels")}return d.values.length>1});selector.selectAll("ul.nav").remove();var filterList=selector.append("ul").attr("class","nav");var filterItem=filterList.selectAll("li").data(chart.config.variables.filters).enter().append("li").attr("class",function(d){return"custom-"+d.key+" filterCustom"});var filterLabel=filterItem.append("span").attr("class","filterLabel");filterLabel.append("span").html(function(d){return d.label||d.value_col});filterLabel.append("sup").attr("class","filterType").text(function(d){return d.type=="event"?"E":"P"}).property("title",function(d){return d.type=="event"?"Event filter: Changes rate counts only. Does not change population.":"Participant filter: Changes rate counts and populations."});var filterCustom=filterItem.append("select").attr("multiple",true);var filterItems=filterCustom.selectAll("option").data(function(d){return d.values.map(function(di){return{value:di,selected:Array.isArray(d.start)&&d.start.length?d.start.indexOf(di)>-1:true}})}).enter().append("option").html(function(d){return d.value}).attr("value",function(d){return d.value}).attr("selected",function(d){return d.selected?"selected":null});filterCustom.on("change",function(){chart.AETable.redraw(chart)})}var custom={init:init$3};var filters={rate:rate,custom:custom};function init$4(chart){chart.config.summary=chart.config.defaults.summarizeBy;var selector=chart.controls.wrap.append("div").attr("class","summary-control");selector.selectAll("div.summaryDiv").remove();selector.append("span").attr("class","sectionHead").text("Summarize by:");var summaryControl=selector.append("div").attr("class","input-prepend input-append input-medium summaryDiv");summaryControl.selectAll("div").data(["participant","event"]).enter().append("div").append("label").style("font-weight",function(d){return d===chart.config.summary?"bold":null}).text(function(d){return d}).append("input").attr({class:"appendedPrependedInput summaryRadio",type:"radio"}).property("checked",function(d){return d===chart.config.summary});var radios=chart.wrap.selectAll("div.summaryDiv .summaryRadio");radios.on("change",function(d){radios.each(function(di){d3.select(this.parentNode).style("font-weight","normal");d3.select(this)[0][0].checked=false});d3.select(this)[0][0].checked=true;d3.select(this.parentNode).style("font-weight","bold");chart.config.summary=d3.select(this.parentNode)[0][0].textContent;chart.AETable.redraw(chart)})}var summaryControl={init:init$4};function init$5(chart){var selector=chart.controls.wrap.append("div").attr("class","searchForm navbar-search pull-right").attr("onsubmit","return false;");selector.selectAll("span.seach-label, input.searchBar").remove();var searchLabel=selector.append("span").attr("class","search-label label hidden");searchLabel.append("span").attr("class","search-count");searchLabel.append("span").attr("class","clear-search").html("☓");selector.append("input").attr("type","text").attr("class","searchBar search-query input-medium").attr("placeholder","Search");chart.wrap.select("input.searchBar").on("change",function(d){var searchTerm=d3.select(this).property("value").toLowerCase();if(searchTerm.length>0){chart.controls.search.clear(chart);d3.select(this).property("value",searchTerm);chart.wrap.selectAll("div.SummaryTable table tbody").classed("minorHidden",false);chart.wrap.selectAll("div.SummaryTable table tbody tr").classed("filter",false);chart.wrap.select("div.SummaryTable").classed("search",false);chart.wrap.selectAll("div.SummaryTable table tbody").classed("search",false);chart.wrap.selectAll("div.SummaryTable table tbody tr").classed("search",false);chart.wrap.selectAll("div.SummaryTable table tbody tr td.controls span").classed("hidden",true);chart.wrap.select("span.search-label").classed("hidden",false);var tab=chart.wrap.select("div.SummaryTable").classed("search",true);var tbodyMatch=tab.select("table").selectAll("tbody").each(function(bodyElement){var bodyCurrent=d3.select(this);var bodyData=bodyCurrent.data()[0];bodyCurrent.selectAll("tr").each(function(rowElement){var rowCurrent=d3.select(this);var rowData=rowCurrent.data()[0];var rowText=rowCurrent.classed("major")?bodyData.key.toLowerCase():rowData.key.toLowerCase();if(rowText.search(searchTerm)>=0){bodyCurrent.classed("search",true);rowCurrent.classed("search",true);var currentText=rowCurrent.select("td.rowLabel").html();var searchStart=currentText.toLowerCase().search(searchTerm);var searchStop=searchStart+searchTerm.length;var newText=currentText.slice(0,searchStart)+''+currentText.slice(searchStart,searchStop)+""+currentText.slice(searchStop,currentText.length);rowCurrent.select("td.rowLabel").html(newText)}})});d3.select("input.rateFilter").property("disabled",true);var matchCount=chart.wrap.selectAll("tr.search")[0].length;chart.wrap.select("span.search-count").text(matchCount+" matches");chart.wrap.select("span.search-label").attr("class",matchCount===0?"search-label label label-warning":"search-label label label-success");if(matchCount===0){chart.wrap.selectAll("div.SummaryTable").classed("search",false);chart.wrap.selectAll("div.SummaryTable table tbody").classed("search",false);chart.wrap.selectAll("div.SummaryTable table tbody tr").classed("search",false);chart.AETable.toggleRows(chart)}}else chart.controls.search.clear(chart)});chart.wrap.select("span.clear-search").on("click",function(){chart.controls.search.clear(chart)})}function clear(chart){chart.wrap.select("input.rateFilter").property("disabled",false);chart.wrap.select("input.searchBar").property("value","");chart.wrap.selectAll("div.SummaryTable table tbody tr.search td.rowLabel").html(function(d){return d.values[0].values["label"]});chart.wrap.select("span.search-label").classed("hidden",true);chart.wrap.selectAll("div.SummaryTable").classed("search",false);chart.wrap.selectAll("div.SummaryTable table tbody").classed("search",false);chart.wrap.selectAll("div.SummaryTable table tbody tr").classed("search",false);chart.AETable.toggleRows(chart)}var search={init:init$5,clear:clear};var controls={init:init$1,filters:filters,summaryControl:summaryControl,search:search};function redraw(chart){chart.controls.search.clear(chart);chart.AETable.wipe(chart.wrap);chart.util.prepareData(chart);chart.AETable.init(chart);chart.AETable.toggleRows(chart)}function wipe(canvas){canvas.select(".table-wrapper .SummaryTable .alert").remove();canvas.select(".table-wrapper .SummaryTable table").remove();canvas.select(".table-wrapper .SummaryTable button").remove();canvas.select(".table-wrapper .DetailTable").remove();canvas.select(".table-wrapper .DetailTable").remove()}function showCellCounts(chart,rows,group){rows.selectAll("td.values").filter(function(e){return e.key===group}).append("span.annote").classed("annote",true).text(function(d){return" ("+d["values"].n+"/"+d["values"].tot+")"})}function calculateDifference(major,minor,group1,group2,n1,tot1,n2,tot2){var zCrit=1.96;var p1=n1/tot1;var p2=n2/tot2;var diff=p1-p2;var se=Math.sqrt(p1*(1-p1)/tot1+p2*(1-p2)/tot2);var lower=diff-1.96*se;var upper=diff+1.96*se;var sig=lower>0|upper<0?1:0;var summary={major:major,minor:minor,group1:group1,n1:n1,tot1:tot1,p1:p1,group2:group2,n2:n2,tot2:tot2,p2:p2,diff:diff*100,lower:lower*100,upper:upper*100,sig:sig};return summary}function addDifferences(data,groups){var nGroups=groups.length;if(nGroups>1){data.forEach(function(major){major.values.forEach(function(minor){minor.differences=[];var groups=minor.values;var otherGroups=[].concat(minor.values);groups.forEach(function(group){delete otherGroups[otherGroups.map(function(m){return m.key}).indexOf(group.key)];otherGroups.forEach(function(otherGroup){var diff=calculateDifference(major.key,minor.key,group.key,otherGroup.key,group.values.n,group.values.tot,otherGroup.values.n,otherGroup.values.tot);minor.differences.push(diff)})})})})}return data}function cross(data,groups,id,major,minor,group){var groupNames=groups.map(function(d){return d.key});var summary=d3.selectAll(".summaryDiv label").filter(function(d){return d3.select(this).selectAll(".summaryRadio").property("checked")})[0][0].textContent;var nestedData=d3.nest().key(function(d){return major=="All"?"All":d[major]}).key(function(d){return minor=="All"?"All":d[minor]}).key(function(d){return d[group]}).rollup(function(d){var selection={};selection.major=major==="All"?"All":d[0][major];selection.minor=minor==="All"?"All":d[0][minor];selection.label=selection.minor==="All"?selection.major:selection.minor;selection.group=d[0][group];var currentGroup=groups.filter(function(di){return di.key===d[0][group]});if(summary==="participant"){var ids=d3.nest().key(function(di){return di[id]}).entries(d);selection.n=ids.length;selection.tot=currentGroup[0].n}else{selection.n=d.length;selection.tot=currentGroup[0].nEvents}selection.per=Math.round(selection.n/selection.tot*1e3)/10;return selection}).entries(data);nestedData.forEach(function(dMajor){dMajor.values.forEach(function(dMinor){var currentGroupList=dMinor.values.map(function(d){return d.key});groupNames.forEach(function(dGroup,groupIndex){if(currentGroupList.indexOf(dGroup)===-1){var currentGroup=groups.filter(function(d){return d.key===dGroup});var tot=summary==="participant"?currentGroup[0].n:currentGroup[0].nEvents;var shellMajorMinorGroup={key:dGroup,values:{major:dMajor.key,minor:dMinor.key,label:dMinor.key==="All"?dMajor.key:dMinor.key,group:dGroup,n:0,tot:tot,per:0}};dMinor.values.push(shellMajorMinorGroup)}});dMinor.values.sort(function(a,b){return groups.map(function(group){return group.key}).indexOf(a.key)-groups.map(function(group){return group.key}).indexOf(b.key)})})});return nestedData}var sort={maxPer:function maxPer(a,b){var max_a=a.values.map(function(minor){var n=d3.sum(minor.values.map(function(group){return group.values.n}));var tot=d3.sum(minor.values.map(function(group){return group.values.tot}));return n/tot})[0];var max_b=b.values.map(function(minor){var n=d3.sum(minor.values.map(function(group){return group.values.n}));var tot=d3.sum(minor.values.map(function(group){return group.values.tot}));return n/tot})[0];var diff=max_b-max_a;return diff?diff:a.key1&&chart.config.defaults.diffCol){var differencePlot=currentRow.append("td").classed("diffplot",true).append("svg").attr("height",chart.config.plotSettings.h).attr("width",chart.config.plotSettings.w+10).append("svg:g").attr("transform","translate(5,0)");var diffPoints=differencePlot.selectAll("g").data(d.differences).enter().append("svg:g");diffPoints.append("title").text(function(d){return d.group1+" ("+d3.format(",.1%")(d.p1)+") vs. "+d.group2+" ("+d3.format(",.1%")(d.p2)+"): "+d3.format(",.1%")(d.diff/100)});diffPoints.append("svg:line").attr("x1",function(d){return chart.diffScale(d.upper)}).attr("x2",function(d){return chart.diffScale(d.lower)}).attr("y1",chart.config.plotSettings.h/2).attr("y2",chart.config.plotSettings.h/2).attr("class","ci").classed("hidden",chart.config.groups.length>2).attr("stroke","#bbb");var triangle=d3.svg.line().x(function(d){return d.x}).y(function(d){return d.y}).interpolate("linear-closed");diffPoints.append("svg:path").attr("d",function(d){var h=chart.config.plotSettings.h,r=chart.config.plotSettings.r;var leftpoints=[{x:chart.diffScale(d.diff),y:h/2+r},{x:chart.diffScale(d.diff)-r,y:h/2},{x:chart.diffScale(d.diff),y:h/2-r}];return triangle(leftpoints)}).attr("class","diamond").attr("fill-opacity",function(d){return d.sig===1?1:.1}).attr("fill",function(d){return d.diff<0?chart.colorScale(d.group1):chart.colorScale(d.group2)}).attr("stroke",function(d){return d.diff<0?chart.colorScale(d.group1):chart.colorScale(d.group2)}).attr("stroke-opacity",.3);diffPoints.append("svg:path").attr("d",function(d){var h=chart.config.plotSettings.h,r=chart.config.plotSettings.r;var rightpoints=[{x:chart.diffScale(d.diff),y:h/2+r},{x:chart.diffScale(d.diff)+r,y:h/2},{x:chart.diffScale(d.diff),y:h/2-r}];return triangle(rightpoints)}).attr("class","diamond").attr("fill-opacity",function(d){return d.sig===1?1:.1}).attr("fill",function(d){return d.diff<0?chart.colorScale(d.group2):chart.colorScale(d.group1)}).attr("stroke",function(d){return d.diff<0?chart.colorScale(d.group2):chart.colorScale(d.group1)}).attr("stroke-opacity",.3)}}function collapse(nested){var collapsed=nested.map(function(soc){var allRows=soc.values.map(function(e){var eCollapsed={};eCollapsed.majorCategory=e.values[0].values.major;eCollapsed.minorCategory=e.values[0].values.minor;e.values.forEach(function(val,i){var n=i+1;eCollapsed["val"+n+"_label"]=val.key;eCollapsed["val"+n+"_numerator"]=val.values.n;eCollapsed["val"+n+"_denominator"]=val.values.tot;eCollapsed["val"+n+"_percent"]=val.values.per});if(e.differences){e.differences.forEach(function(diff,i){var n=i+1;eCollapsed["diff"+n+"_label"]=diff.group1+"-"+diff.group2;eCollapsed["diff"+n+"_val"]=diff["diff"];eCollapsed["diff"+n+"_sig"]=diff["sig"]})}return eCollapsed});return allRows});return d3.merge(collapsed)}function json2csv(chart){var majorValidation=collapse(chart.data.major),minorValidation=collapse(chart.data.minor),fullValidation=d3.merge([majorValidation,minorValidation]).sort(function(a,b){return a.majorCategoryb.majorCategory?1:a.minorCategory=0});chart.config.variables.filters.filter(function(d){return d.type=="participant"}).forEach(function(filter_d){chart.population_data=chart.population_data.filter(function(rowData){return filter_d.currentValues.indexOf(""+rowData[filter_d.value_col])>-1})});chart.population_event_data=chart.population_data.filter(function(d){return!d.placeholderFlag});chart.config.variables.filters.filter(function(d){return d.type=="event"}).forEach(function(filter_d){chart.population_event_data=chart.population_event_data.filter(function(rowData){return filter_d.currentValues.indexOf(""+rowData[filter_d.value_col])>-1})});var nestedData=d3.nest().key(function(d){return d[vars.group]}).key(function(d){return d[vars.id]}).entries(chart.population_data);chart.config.groups.forEach(function(groupObj){var groupVar=chart.config.variables.group;var groupValue=groupObj.key;var groupEvents=chart.population_data.filter(function(f){return f[groupVar]==groupValue});groupObj.n=d3.set(groupEvents.map(function(m){return m[chart.config.variables.id]})).values().length;groupObj.nEvents=chart.population_event_data.filter(function(f){return f[groupVar]==groupValue}).length})}var defaultSettings={variables:{id:"USUBJID",major:"AEBODSYS",minor:"AEDECOD",group:"ARM",details:[],filters:[{value_col:"AESER",label:"Serious?",type:"event",start:[]},{value_col:"AESEV",label:"Severity",type:"event",start:[]},{value_col:"AEREL",label:"Relationship",type:"event",start:[]},{value_col:"AEOUT",label:"Outcome",type:"event",start:[]}]},groups:[],defaults:{placeholderFlag:{value_col:"AEBODSYS",values:["NA"]},maxPrevalence:0,maxGroups:6,totalCol:true,groupCols:true,diffCol:true,prefTerms:false,summarizeBy:"participant"},plotSettings:{h:15,w:200,margin:{left:40,right:40},diffMargin:{left:5,right:5},r:7},validation:false};function setDefaults(chart){function errorNote(msg){chart.wrap.append("div").attr("class","alert").text("Fatal Error: "+msg)}chart.config.variables=chart.config.variables||{};var variables=["id","major","minor","group","details"];variables.forEach(function(varName){chart.config.variables[varName]=chart.config.variables[varName]||defaultSettings.variables[varName]});chart.config.variables.filters=chart.config.variables.filters||defaultSettings.variables.filters;chart.config.groups=chart.config.groups||defaultSettings.groups;chart.config.defaults=chart.config.defaults||{};var defaults=Object.keys(defaultSettings.defaults);defaults.forEach(function(dflt){if(dflt!=="placeholderFlag")chart.config.defaults[dflt]=chart.config.defaults[dflt]!==undefined?chart.config.defaults[dflt]:defaultSettings.defaults[dflt];else{var object={};for(var prop in defaultSettings.defaults[dflt]){object[prop]=chart.config.defaults[dflt]!==undefined?chart.config.defaults[dflt][prop]!==undefined?chart.config.defaults[dflt][prop]:defaultSettings.defaults[dflt][prop]:defaultSettings.defaults[dflt][prop]}chart.config.defaults[dflt]=object}});chart.config.plotSettings=chart.config.plotSettings||{};var plotSettings=["h","w","r","margin","diffMargin"];plotSettings.forEach(function(varName){chart.config.plotSettings[varName]=chart.config.plotSettings[varName]||defaultSettings.plotSettings[varName]});var allGroups=d3.set(chart.raw_data.map(function(d){return d[chart.config.variables.group]})).values();chart.config.groups=chart.config.groups.map(function(d){return typeof d=="string"?{key:d}:d}).filter(function(d){if(allGroups.indexOf(d.key)===-1)console.log('Warning: You specified a group level ("'+d.key+'") that was not found in the data. It is being ignored.');return allGroups.indexOf(d.key)>-1});var groupsObject=allGroups.map(function(d){return{key:d}});if(!chart.config.groups||chart.config.groups.length===0)chart.config.groups=groupsObject.sort(function(a,b){return a.keyb.key?1:0});for(var x in chart.config.variables){var varList=d3.keys(chart.raw_data[0]).concat("data_all");if(varList.indexOf(chart.config.variables[x])===-1){if(chart.config.variables[x]instanceof Array){chart.config.variables[x].forEach(function(e){var value_col=e instanceof Object?e.value_col:e;if(varList.indexOf(value_col)===-1){errorNote("Error in variables object.");throw new Error(x+" variable "+"('"+e+"') not found in dataset.")}})}else{errorNote("Error in variables object.");throw new Error(x+" variable "+"('"+chart.config.variables[x]+"') not found in dataset.")}}}if(chart.config.defaults.groupCols){if(chart.config.defaults.groupCols&chart.config.groups.length>chart.config.defaults.maxGroups){var errorText="Too Many Group Variables specified. You specified "+chart.config.groups.length+", but the maximum supported is "+chart.config.defaults.maxGroups+".";errorNote(errorText);throw new Error(errorText)}chart.colorScale.domain(chart.config.groups.map(function(e){return e.key}))}if(!chart.config.defaults.groupCols&!chart.config.defaults.totalCol){var errorText="No data to render. Make sure at least one of chart.config.defaults.groupCols or chart.config.defaults.totalCol is set to true.";errorNote(errorText);throw new Error(errorText)}if(!chart.config.defaults.groupCols){chart.config.defaults.diffCol=false}if(chart.config.groups.length==1){chart.config.defaults.totalCol=false}if(chart.config.defaults.totalCol)chart.colorScale.range()[chart.config.groups.length]="#777"}var util={calculateDifference:calculateDifference,addDifferences:addDifferences,cross:cross,sort:sort,fillRow:fillRow,collapse:collapse,json2csv:json2csv,prepareData:prepareData,setDefaults:setDefaults};function init$6(chart){var vars=chart.config.variables;chart.data={};chart.data.any=util.cross(chart.population_event_data,chart.config.groups,vars["id"],"All","All",vars["group"],chart.config.groups);chart.data.major=util.cross(chart.population_event_data,chart.config.groups,vars["id"],vars["major"],"All",vars["group"],chart.config.groups);chart.data.minor=util.cross(chart.population_event_data,chart.config.groups,vars["id"],vars["major"],vars["minor"],vars["group"],chart.config.groups);chart.data.major=util.addDifferences(chart.data.major,chart.config.groups);chart.data.minor=util.addDifferences(chart.data.minor,chart.config.groups);chart.data.any=util.addDifferences(chart.data.any,chart.config.groups);chart.data.major=chart.data.major.sort(util.sort.maxPer);chart.data.minor.forEach(function(major){major.values.sort(function(a,b){var max_a=d3.sum(a.values.map(function(group){return group.values.n}))/d3.sum(a.values.map(function(group){return group.values.tot}));var max_b=d3.sum(b.values.map(function(group){return group.values.n}))/d3.sum(b.values.map(function(group){return group.values.tot}));var diff=max_b-max_a;return diff?diff:a.key"+d.key+""+'
(n='+(chart.config.summary==="participant"?d.n:d.nEvents)+")"}).style("color",function(d){return chart.colorScale(d.key)}).attr("class","values").classed("total",function(d){return d.key=="Total"}).classed("hidden",function(d){if(d.key=="Total"){return!chart.config.defaults.totalCol}else{return!chart.config.defaults.groupCols}});header2.append("th").attr("class","prevHeader");if(nGroups>1&&chart.config.defaults.diffCol){header1.append("th").text("Difference Between Groups").attr("class","diffplot");header2.append("th").attr("class","diffplot axis")}var allPercents=d3.merge(chart.data.major.map(function(major){return d3.merge(major.values.map(function(minor){return d3.merge(minor.values.map(function(group){return[group.values.per]}))}))}));chart.percentScale=d3.scale.linear().range([0,chart.config.plotSettings.w]).domain([0,d3.max(allPercents)]);var percentAxis=d3.svg.axis().scale(chart.percentScale).orient("top").ticks(6);var prevAxis=chart.wrap.select("th.prevHeader").append("svg").attr("height","34px").attr("width",chart.config.plotSettings.w+10).append("svg:g").attr("transform","translate(5,34)").attr("class","axis percent").call(percentAxis);if(chart.config.groups.length>1){var allDiffs=d3.merge(chart.data.major.map(function(major){return d3.merge(major.values.map(function(minor){return d3.merge(minor.differences.map(function(diff){return[diff.upper,diff.lower]}))}))}));var minorDiffs=d3.merge(chart.data.minor.map(function(m){return d3.merge(m.values.map(function(m2){return d3.merge(m2.differences.map(function(m3){return d3.merge([[m3.upper],[m3.lower]])}))}))}));chart.diffScale=d3.scale.linear().range([chart.config.plotSettings.diffMargin.left,chart.config.plotSettings.w-chart.config.plotSettings.diffMargin.right]).domain(d3.extent(d3.merge([minorDiffs,allDiffs])));var diffAxis=d3.svg.axis().scale(chart.diffScale).orient("top").ticks(8);var prevAxis=chart.wrap.select("th.diffplot.axis").append("svg").attr("height","34px").attr("width",chart.config.plotSettings.w+10).append("svg:g").attr("transform","translate(5,34)").attr("class","axis").attr("class","percent").call(diffAxis)}var majorGroups=tab.selectAll("tbody").data(chart.data.major,function(d){return d.key}).enter().append("tbody").attr("class","minorHidden").attr("class",function(d){return"major-"+d.key.replace(/[^A-Za-z0-9]/g,"")});var majorRows=majorGroups.selectAll("tr").data(function(d){return d.values},function(datum){return datum.key}).enter().append("tr").attr("class","major").each(function(d){var thisRow=d3.select(this);chart.util.fillRow(thisRow,chart,d)});var majorGroups=tab.selectAll("tbody").data(chart.data.minor,function(d){return d.key});var minorRows=majorGroups.selectAll("tr").data(function(d){return d.values},function(datum){return datum.key}).enter().append("tr").attr("class","minor").each(function(d){var thisRow=d3.select(this);chart.util.fillRow(thisRow,chart,d)});tab.append("tfoot").selectAll("tr").data(chart.data.any.length>0?chart.data.any[0].values:[]).enter().append("tr").each(function(d){var thisRow=d3.select(this);chart.util.fillRow(thisRow,chart,d)});tab.selectAll("tfoot svg").remove();tab.select("tfoot i").remove();tab.select("tfoot td.controls span").text("");chart.wrap.selectAll("td.diffplot svg g path.diamond").on("mouseover",function(d){var currentRow=chart.wrap.selectAll(".SummaryTable tbody tr").filter(function(e){return e.values[0].values.major===d.major&&e.values[0].values.minor===d.minor});d3.select(this.parentNode).select(".ci").classed("hidden",false);showCellCounts(chart,currentRow,d.group1);showCellCounts(chart,currentRow,d.group2)}).on("mouseout",function(d){d3.select(this.parentNode).select(".ci").classed("hidden",true);chart.wrap.selectAll(".annote").remove()});chart.wrap.selectAll(".SummaryTable tr").on("mouseover",function(d){d3.select(this).select("td.rowLabel").classed("highlight",true)}).on("mouseout",function(d){d3.select(this).select("td.rowLabel").classed("highlight",false)});chart.wrap.selectAll("tr.major").selectAll("td.controls").on("click",function(d){var current=d3.select(this.parentNode.parentNode);var toggle=!current.classed("minorHidden")
-;current.classed("minorHidden",toggle);d3.select(this).select("span").attr("title",toggle?"Expand":"Collapse").text(function(){return toggle?"+":"-"})});chart.wrap.selectAll("td.rowLabel").on("click",function(d){var toggle=!chart.wrap.select(".SummaryTable table").classed("summary");chart.wrap.select(".SummaryTable table").classed("summary",toggle);chart.wrap.select("div.controls").selectAll("div").classed("hidden",toggle);if(toggle){var major=d.values[0].values["major"];var minor=d.values[0].values["minor"];var detailTableSettings={major:major,minor:minor};chart.detailTable.init(chart,detailTableSettings)}else{chart.wrap.select(".DetailTable").remove();chart.wrap.select("div.closeDetailTable").remove()}})}function toggleRows(chart){var minorToggle=!chart.config.defaults.prefTerms;chart.wrap.selectAll(".SummaryTable tbody").classed("minorHidden",minorToggle);chart.wrap.selectAll(".SummaryTable table tbody").select("tr.major td.controls span").text(minorToggle?"+":"-");var differenceToggle=false;chart.wrap.selectAll(".SummaryTable .diffplot").classed("hidden",differenceToggle);var filterVal=chart.wrap.select("div.controls input.rateFilter").property("value");chart.wrap.selectAll("div.SummaryTable table tbody").each(function(d){var allRows=d3.select(this).selectAll("tr");var filterRows=allRows.filter(function(d){var percents=d.values.filter(function(d){return chart.config.defaults.groupCols?true:d.key=="Total"}).map(function(element){return element.values.per});var maxPercent=d3.max(percents);return maxPercent=allRows[0].length)})}var AETable={redraw:redraw,wipe:wipe,init:init$6,toggleRows:toggleRows};function init$7(chart,detailTableSettings){var major=detailTableSettings.major;var minor=detailTableSettings.minor;var vars=chart.config.variables;var details=chart.population_event_data.filter(function(d){var majorMatch=major==="All"?true:major===d[vars["major"]];var minorMatch=minor==="All"?true:minor===d[vars["minor"]];return majorMatch&&minorMatch});if(vars.details.length===0)vars.details=Object.keys(chart.population_data[0]).filter(function(d){return["data_all","placeholderFlag"].indexOf(d)===-1});var detailVars=vars.details;var details=details.map(function(d){var current={};detailVars.forEach(function(currentVar){if(currentVar.value_col){currentVar.label?current[currentVar.label]=d[currentVar.value_col]:current[currentVar.value_col]=d[currentVar.value_col]}else{current[currentVar]=d[currentVar]}});return current});chart.detailTable.wrap=chart.wrap.select("div.table-wrapper").append("div").attr("class","DetailTable");chart.detailTable.head=chart.wrap.select("div.table-wrapper").insert("div",".controls").attr("class","DetailHeader");var closeButton=chart.detailTable.head.append("button").attr("class","closeDetailTable btn btn-primary");closeButton.html(' Return to the Summary View');closeButton.on("click",function(){chart.wrap.select(".SummaryTable table").classed("summary",false);chart.wrap.select("div.controls").selectAll("div").classed("hidden",false);chart.wrap.select("div.controls").select("div.custom-filters").selectAll("select").property("disabled","");chart.wrap.selectAll(".SummaryTable table tbody tr").classed("active",false);chart.detailTable.wrap.remove();chart.detailTable.head.remove()});chart.detailTable.head.append("h4").html(minor==="All"?"Details for "+details.length+" "+major+" records":"Details for "+details.length+" "+minor+" ("+major+") records");var filtered=chart.raw_event_data.length!=chart.population_event_data.length;if(filtered){chart.wrap.select("div.controls").select("div.custom-filters").classed("hidden",false).selectAll("select").property("disabled","disabled");chart.detailTable.head.append("span").html(filtered?"The listing is filtered as shown:":"")}chart.detailTable.draw(chart.detailTable.wrap,details)}function draw(canvas,data){var listing=canvas.append("table").attr("class","table");var headerRow=listing.append("thead").append("tr");headerRow.selectAll("th").data(d3.keys(data[0])).enter().append("th").html(function(d){return d});var tbody=listing.append("tbody");var rows=tbody.selectAll("tr").data(data).enter().append("tr");var cols=rows.selectAll("tr").data(function(d){return d3.values(d)}).enter().append("td").html(function(d){return d})}var detailTable={init:init$7,draw:draw};function createChart(){var element=arguments.length>0&&arguments[0]!==undefined?arguments[0]:"body";var config=arguments[1];var chart={element:element,config:config,init:init,colorScale:colorScale,layout:layout,controls:controls,AETable:AETable,detailTable:detailTable,util:util};return chart}var index={createChart:createChart};return index});
+
+(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?module.exports=factory():typeof define==="function"&&define.amd?define(factory):global.aeTable=factory()})(this,function(){"use strict";function init(data){var settings=this.config;this.wrap=d3.select(this.element).append("div");this.wrap.attr("class","aeExplorer");this.raw_data=data;this.util.setDefaults(this);this.layout();var placeholderCol=this.config.defaults.placeholderFlag.value_col;var placeholderValues=this.config.defaults.placeholderFlag.values;this.raw_data.forEach(function(d){return d.placeholderFlag=placeholderValues.indexOf(d[placeholderCol])>-1});this.raw_event_data=data.filter(function(d){return!d.placeholderFlag});this.controls.init(this);this.AETable.redraw(this)}var colorScale=d3.scale.ordinal().range(["#377EB8","#4DAF4A","#984EA3","#FF7F00","#A65628","#F781BF","#FFFF33","#E41A1C"]);function layout(){var wrapper=this.wrap.append("div").attr("class","aeTable").append("div").attr("class","table-wrapper");wrapper.append("div").attr("class","controls");wrapper.append("div").attr("class","SummaryTable");if(this.config.validation)this.wrap.append("a").attr({id:"downloadCSV"}).text("Download Summarized Data")}function init$1(chart){chart.controls.wrap=chart.wrap.select("div.controls");chart.controls.wrap.attr("onsubmit","return false;");chart.controls.wrap.selectAll("*").remove();chart.controls.filters.rate.init(chart);chart.controls.summaryControl.init(chart);chart.controls.search.init(chart);chart.controls.filters.custom.init(chart);chart.controls.filters.rate.set(chart);chart.controls.wrap.selectAll("div").classed("filterDiv",true)}function init$2(chart){var selector=chart.controls.wrap.append("div").attr("class","rate-filter");selector.selectAll("span.filterLabel, div.rateFilterDiv").remove();selector.append("span").attr("class","sectionHead").text("Filter by prevalence:");var rateFilter=selector.append("div").attr("class","input-prepend input-append input-medium rateFilterDiv");rateFilter.append("span").attr("class","add-on before").html("≥");rateFilter.append("input").attr({class:"appendedPrependedInput rateFilter",type:"text"});rateFilter.append("span").attr("class","add-on after").text("%");rateFilter.on("change",function(d){chart.wrap.selectAll(".SummaryTable table tbody tr").classed("filter",false);chart.AETable.toggleRows(chart)})}function set(chart){chart.controls.wrap.select("input.rateFilter").property("value",chart.config.defaults.maxPrevalence?chart.config.defaults.maxPrevalence:0)}var rate={init:init$2,set:set};function init$3(chart){var selector=chart.controls.wrap.append("div").attr("class","custom-filters");chart.config.variables.filters.forEach(function(e){var currentData=e.type=="Participant"?chart.raw_data:chart.raw_event_data;e.values=d3.nest().key(function(d){return d[e.value_col]}).entries(currentData).map(function(d){return d.key})});chart.config.variables.filters=chart.config.variables.filters.filter(function(d){if(d.values.length<=1){console.warn(d.value_col+" filter not shown since the variable has less than 2 levels")}return d.values.length>1});selector.selectAll("ul.nav").remove();var filterList=selector.append("ul").attr("class","nav");var filterItem=filterList.selectAll("li").data(chart.config.variables.filters).enter().append("li").attr("class",function(d){return"custom-"+d.key+" filterCustom"});var filterLabel=filterItem.append("span").attr("class","filterLabel");filterLabel.append("span").html(function(d){return d.label||d.value_col});filterLabel.append("sup").attr("class","filterType").text(function(d){return d.type=="event"?"E":"P"}).property("title",function(d){return d.type=="event"?"Event filter: Changes rate counts only. Does not change population.":"Participant filter: Changes rate counts and populations."});var filterCustom=filterItem.append("select").attr("multiple",true);var filterItems=filterCustom.selectAll("option").data(function(d){return d.values.map(function(di){return{value:di,selected:Array.isArray(d.start)&&d.start.length?d.start.indexOf(di)>-1:true}})}).enter().append("option").html(function(d){return d.value}).attr("value",function(d){return d.value}).attr("selected",function(d){return d.selected?"selected":null});filterCustom.on("change",function(){chart.AETable.redraw(chart)})}var custom={init:init$3};var filters={rate:rate,custom:custom};function init$4(chart){chart.config.summary=chart.config.defaults.summarizeBy;var selector=chart.controls.wrap.append("div").attr("class","summary-control");selector.selectAll("div.summaryDiv").remove();selector.append("span").attr("class","sectionHead").text("Summarize by:");var summaryControl=selector.append("div").attr("class","input-prepend input-append input-medium summaryDiv");summaryControl.selectAll("div").data(["participant","event"]).enter().append("div").append("label").style("font-weight",function(d){return d===chart.config.summary?"bold":null}).text(function(d){return d}).append("input").attr({class:"appendedPrependedInput summaryRadio",type:"radio"}).property("checked",function(d){return d===chart.config.summary});var radios=chart.wrap.selectAll("div.summaryDiv .summaryRadio");radios.on("change",function(d){radios.each(function(di){d3.select(this.parentNode).style("font-weight","normal");d3.select(this)[0][0].checked=false});d3.select(this)[0][0].checked=true;d3.select(this.parentNode).style("font-weight","bold");chart.config.summary=d3.select(this.parentNode)[0][0].textContent;chart.AETable.redraw(chart)})}var summaryControl={init:init$4};function init$5(chart){var selector=chart.controls.wrap.append("div").attr("class","searchForm wc-navbar-search pull-right").attr("onsubmit","return false;");selector.selectAll("span.seach-label, input.searchBar").remove();var searchLabel=selector.append("span").attr("class","search-label label wc-hidden");searchLabel.append("span").attr("class","search-count");searchLabel.append("span").attr("class","clear-search").html("☓");selector.append("input").attr("type","text").attr("class","searchBar search-query input-medium").attr("placeholder","Search");chart.wrap.select("input.searchBar").on("change",function(d){var searchTerm=d3.select(this).property("value").toLowerCase();if(searchTerm.length>0){chart.controls.search.clear(chart);d3.select(this).property("value",searchTerm);chart.wrap.selectAll("div.SummaryTable table tbody").classed("minorHidden",false);chart.wrap.selectAll("div.SummaryTable table tbody tr").classed("filter",false);chart.wrap.select("div.SummaryTable").classed("search",false);chart.wrap.selectAll("div.SummaryTable table tbody").classed("search",false);chart.wrap.selectAll("div.SummaryTable table tbody tr").classed("search",false);chart.wrap.selectAll("div.SummaryTable table tbody tr td.controls span").classed("wc-hidden",true);chart.wrap.select("span.search-label").classed("wc-hidden",false);var tab=chart.wrap.select("div.SummaryTable").classed("search",true);var tbodyMatch=tab.select("table").selectAll("tbody").each(function(bodyElement){var bodyCurrent=d3.select(this);var bodyData=bodyCurrent.data()[0];bodyCurrent.selectAll("tr").each(function(rowElement){var rowCurrent=d3.select(this);var rowData=rowCurrent.data()[0];var rowText=rowCurrent.classed("major")?bodyData.key.toLowerCase():rowData.key.toLowerCase();if(rowText.search(searchTerm)>=0){bodyCurrent.classed("search",true);rowCurrent.classed("search",true);var currentText=rowCurrent.select("td.rowLabel").html();var searchStart=currentText.toLowerCase().search(searchTerm);var searchStop=searchStart+searchTerm.length;var newText=currentText.slice(0,searchStart)+''+currentText.slice(searchStart,searchStop)+""+currentText.slice(searchStop,currentText.length);rowCurrent.select("td.rowLabel").html(newText)}})});d3.select("input.rateFilter").property("disabled",true);var matchCount=chart.wrap.selectAll("tr.search")[0].length;chart.wrap.select("span.search-count").text(matchCount+" matches");chart.wrap.select("span.search-label").attr("class",matchCount===0?"search-label label label-warning":"search-label label label-success");if(matchCount===0){chart.wrap.selectAll("div.SummaryTable").classed("search",false);chart.wrap.selectAll("div.SummaryTable table tbody").classed("search",false);chart.wrap.selectAll("div.SummaryTable table tbody tr").classed("search",false);chart.AETable.toggleRows(chart)}}else chart.controls.search.clear(chart)});chart.wrap.select("span.clear-search").on("click",function(){chart.controls.search.clear(chart)})}function clear(chart){chart.wrap.select("input.rateFilter").property("disabled",false);chart.wrap.select("input.searchBar").property("value","");chart.wrap.selectAll("div.SummaryTable table tbody tr.search td.rowLabel").html(function(d){return d.values[0].values["label"]});chart.wrap.select("span.search-label").classed("wc-hidden",true);chart.wrap.selectAll("div.SummaryTable").classed("search",false);chart.wrap.selectAll("div.SummaryTable table tbody").classed("search",false);chart.wrap.selectAll("div.SummaryTable table tbody tr").classed("search",false);chart.AETable.toggleRows(chart)}var search={init:init$5,clear:clear};var controls={init:init$1,filters:filters,summaryControl:summaryControl,search:search};function redraw(chart){chart.controls.search.clear(chart);chart.AETable.wipe(chart.wrap);chart.util.prepareData(chart);chart.AETable.init(chart);chart.AETable.toggleRows(chart)}function wipe(canvas){canvas.select(".table-wrapper .SummaryTable .wc-alert").remove();canvas.select(".table-wrapper .SummaryTable table").remove();canvas.select(".table-wrapper .SummaryTable button").remove();canvas.select(".table-wrapper .DetailTable").remove();canvas.select(".table-wrapper .DetailTable").remove()}function showCellCounts(chart,rows,group){rows.selectAll("td.values").filter(function(e){return e.key===group}).append("span.annote").classed("annote",true).text(function(d){return" ("+d["values"].n+"/"+d["values"].tot+")"})}function calculateDifference(major,minor,group1,group2,n1,tot1,n2,tot2){var zCrit=1.96;var p1=n1/tot1;var p2=n2/tot2;var diff=p1-p2;var se=Math.sqrt(p1*(1-p1)/tot1+p2*(1-p2)/tot2);var lower=diff-1.96*se;var upper=diff+1.96*se;var sig=lower>0|upper<0?1:0;var summary={major:major,minor:minor,group1:group1,n1:n1,tot1:tot1,p1:p1,group2:group2,n2:n2,tot2:tot2,p2:p2,diff:diff*100,lower:lower*100,upper:upper*100,sig:sig};return summary}function addDifferences(data,groups){var nGroups=groups.length;if(nGroups>1){data.forEach(function(major){major.values.forEach(function(minor){minor.differences=[];var groups=minor.values;var otherGroups=[].concat(minor.values);groups.forEach(function(group){delete otherGroups[otherGroups.map(function(m){return m.key}).indexOf(group.key)];otherGroups.forEach(function(otherGroup){var diff=calculateDifference(major.key,minor.key,group.key,otherGroup.key,group.values.n,group.values.tot,otherGroup.values.n,otherGroup.values.tot);minor.differences.push(diff)})})})})}return data}function cross(data,groups,id,major,minor,group){var groupNames=groups.map(function(d){return d.key});var summary=d3.selectAll(".summaryDiv label").filter(function(d){return d3.select(this).selectAll(".summaryRadio").property("checked")})[0][0].textContent;var nestedData=d3.nest().key(function(d){return major=="All"?"All":d[major]}).key(function(d){return minor=="All"?"All":d[minor]}).key(function(d){return d[group]}).rollup(function(d){var selection={};selection.major=major==="All"?"All":d[0][major];selection.minor=minor==="All"?"All":d[0][minor];selection.label=selection.minor==="All"?selection.major:selection.minor;selection.group=d[0][group];var currentGroup=groups.filter(function(di){return di.key===d[0][group]});if(summary==="participant"){var ids=d3.nest().key(function(di){return di[id]}).entries(d);selection.n=ids.length;selection.tot=currentGroup[0].n}else{selection.n=d.length;selection.tot=currentGroup[0].nEvents}selection.per=Math.round(selection.n/selection.tot*1e3)/10;return selection}).entries(data);nestedData.forEach(function(dMajor){dMajor.values.forEach(function(dMinor){var currentGroupList=dMinor.values.map(function(d){return d.key});groupNames.forEach(function(dGroup,groupIndex){if(currentGroupList.indexOf(dGroup)===-1){var currentGroup=groups.filter(function(d){return d.key===dGroup});var tot=summary==="participant"?currentGroup[0].n:currentGroup[0].nEvents;var shellMajorMinorGroup={key:dGroup,values:{major:dMajor.key,minor:dMinor.key,label:dMinor.key==="All"?dMajor.key:dMinor.key,group:dGroup,n:0,tot:tot,per:0}};dMinor.values.push(shellMajorMinorGroup)}});dMinor.values.sort(function(a,b){return groups.map(function(group){return group.key}).indexOf(a.key)-groups.map(function(group){return group.key}).indexOf(b.key)})})});return nestedData}var sort={maxPer:function maxPer(a,b){var max_a=a.values.map(function(minor){var n=d3.sum(minor.values.map(function(group){return group.values.n}));var tot=d3.sum(minor.values.map(function(group){return group.values.tot}));return n/tot})[0];var max_b=b.values.map(function(minor){var n=d3.sum(minor.values.map(function(group){return group.values.n}));var tot=d3.sum(minor.values.map(function(group){return group.values.tot}));return n/tot})[0];var diff=max_b-max_a;return diff?diff:a.key1&&chart.config.defaults.diffCol){var differencePlot=currentRow.append("td").classed("diffplot",true).append("svg").attr("height",chart.config.plotSettings.h).attr("width",chart.config.plotSettings.w+10).append("svg:g").attr("transform","translate(5,0)");var diffPoints=differencePlot.selectAll("g").data(d.differences).enter().append("svg:g");diffPoints.append("title").text(function(d){return d.group1+" ("+d3.format(",.1%")(d.p1)+") vs. "+d.group2+" ("+d3.format(",.1%")(d.p2)+"): "+d3.format(",.1%")(d.diff/100)});diffPoints.append("svg:line").attr("x1",function(d){return chart.diffScale(d.upper)}).attr("x2",function(d){return chart.diffScale(d.lower)}).attr("y1",chart.config.plotSettings.h/2).attr("y2",chart.config.plotSettings.h/2).attr("class","ci").classed("wc-hidden",chart.config.groups.length>2).attr("stroke","#bbb");var triangle=d3.svg.line().x(function(d){return d.x}).y(function(d){return d.y}).interpolate("linear-closed");diffPoints.append("svg:path").attr("d",function(d){var h=chart.config.plotSettings.h,r=chart.config.plotSettings.r;var leftpoints=[{x:chart.diffScale(d.diff),y:h/2+r},{x:chart.diffScale(d.diff)-r,y:h/2},{x:chart.diffScale(d.diff),y:h/2-r}];return triangle(leftpoints)}).attr("class","diamond").attr("fill-opacity",function(d){return d.sig===1?1:.1}).attr("fill",function(d){return d.diff<0?chart.colorScale(d.group1):chart.colorScale(d.group2)}).attr("stroke",function(d){return d.diff<0?chart.colorScale(d.group1):chart.colorScale(d.group2)}).attr("stroke-opacity",.3);diffPoints.append("svg:path").attr("d",function(d){var h=chart.config.plotSettings.h,r=chart.config.plotSettings.r;var rightpoints=[{x:chart.diffScale(d.diff),y:h/2+r},{x:chart.diffScale(d.diff)+r,y:h/2},{x:chart.diffScale(d.diff),y:h/2-r}];return triangle(rightpoints)}).attr("class","diamond").attr("fill-opacity",function(d){return d.sig===1?1:.1}).attr("fill",function(d){return d.diff<0?chart.colorScale(d.group2):chart.colorScale(d.group1)}).attr("stroke",function(d){return d.diff<0?chart.colorScale(d.group2):chart.colorScale(d.group1)}).attr("stroke-opacity",.3)}}function collapse(nested){var collapsed=nested.map(function(soc){var allRows=soc.values.map(function(e){var eCollapsed={};eCollapsed.majorCategory=e.values[0].values.major;eCollapsed.minorCategory=e.values[0].values.minor;e.values.forEach(function(val,i){var n=i+1;eCollapsed["val"+n+"_label"]=val.key;eCollapsed["val"+n+"_numerator"]=val.values.n;eCollapsed["val"+n+"_denominator"]=val.values.tot;eCollapsed["val"+n+"_percent"]=val.values.per});if(e.differences){e.differences.forEach(function(diff,i){var n=i+1;eCollapsed["diff"+n+"_label"]=diff.group1+"-"+diff.group2;eCollapsed["diff"+n+"_val"]=diff["diff"];eCollapsed["diff"+n+"_sig"]=diff["sig"]})}return eCollapsed});return allRows});return d3.merge(collapsed)}function json2csv(chart){var majorValidation=collapse(chart.data.major),minorValidation=collapse(chart.data.minor),fullValidation=d3.merge([majorValidation,minorValidation]).sort(function(a,b){return a.majorCategoryb.majorCategory?1:a.minorCategory=0});chart.config.variables.filters.filter(function(d){return d.type=="participant"}).forEach(function(filter_d){chart.population_data=chart.population_data.filter(function(rowData){return filter_d.currentValues.indexOf(""+rowData[filter_d.value_col])>-1})});chart.population_event_data=chart.population_data.filter(function(d){return!d.placeholderFlag});chart.config.variables.filters.filter(function(d){return d.type=="event"}).forEach(function(filter_d){chart.population_event_data=chart.population_event_data.filter(function(rowData){return filter_d.currentValues.indexOf(""+rowData[filter_d.value_col])>-1})});var nestedData=d3.nest().key(function(d){return d[vars.group]}).key(function(d){return d[vars.id]}).entries(chart.population_data);chart.config.groups.forEach(function(groupObj){var groupVar=chart.config.variables.group;var groupValue=groupObj.key;var groupEvents=chart.population_data.filter(function(f){return f[groupVar]==groupValue});groupObj.n=d3.set(groupEvents.map(function(m){return m[chart.config.variables.id]})).values().length;groupObj.nEvents=chart.population_event_data.filter(function(f){return f[groupVar]==groupValue}).length})}var defaultSettings={variables:{id:"USUBJID",major:"AEBODSYS",minor:"AEDECOD",group:"ARM",details:[],filters:[{value_col:"AESER",label:"Serious?",type:"event",start:[]},{value_col:"AESEV",label:"Severity",type:"event",start:[]},{value_col:"AEREL",label:"Relationship",type:"event",start:[]},{value_col:"AEOUT",label:"Outcome",type:"event",start:[]}]},groups:[],defaults:{placeholderFlag:{value_col:"AEBODSYS",values:["NA"]},maxPrevalence:0,maxGroups:6,totalCol:true,groupCols:true,diffCol:true,prefTerms:false,summarizeBy:"participant"},plotSettings:{h:15,w:200,margin:{left:40,right:40},diffMargin:{left:5,right:5},r:7},validation:false};function setDefaults(chart){function errorNote(msg){chart.wrap.append("div").attr("class","wc-alert").text("Fatal Error: "+msg)}chart.config.variables=chart.config.variables||{};var variables=["id","major","minor","group","details"];variables.forEach(function(varName){chart.config.variables[varName]=chart.config.variables[varName]||defaultSettings.variables[varName]});chart.config.variables.filters=chart.config.variables.filters||defaultSettings.variables.filters;chart.config.groups=chart.config.groups||defaultSettings.groups;chart.config.defaults=chart.config.defaults||{};var defaults=Object.keys(defaultSettings.defaults);defaults.forEach(function(dflt){if(dflt!=="placeholderFlag")chart.config.defaults[dflt]=chart.config.defaults[dflt]!==undefined?chart.config.defaults[dflt]:defaultSettings.defaults[dflt];else{var object={};for(var prop in defaultSettings.defaults[dflt]){object[prop]=chart.config.defaults[dflt]!==undefined?chart.config.defaults[dflt][prop]!==undefined?chart.config.defaults[dflt][prop]:defaultSettings.defaults[dflt][prop]:defaultSettings.defaults[dflt][prop]}chart.config.defaults[dflt]=object}});chart.config.plotSettings=chart.config.plotSettings||{};var plotSettings=["h","w","r","margin","diffMargin"];plotSettings.forEach(function(varName){chart.config.plotSettings[varName]=chart.config.plotSettings[varName]||defaultSettings.plotSettings[varName]});var allGroups=d3.set(chart.raw_data.map(function(d){return d[chart.config.variables.group]})).values();chart.config.groups=chart.config.groups.map(function(d){return typeof d=="string"?{key:d}:d}).filter(function(d){if(allGroups.indexOf(d.key)===-1)console.log('Warning: You specified a group level ("'+d.key+'") that was not found in the data. It is being ignored.');return allGroups.indexOf(d.key)>-1});var groupsObject=allGroups.map(function(d){return{key:d}});if(!chart.config.groups||chart.config.groups.length===0)chart.config.groups=groupsObject.sort(function(a,b){return a.keyb.key?1:0});for(var x in chart.config.variables){var varList=d3.keys(chart.raw_data[0]).concat("data_all");if(varList.indexOf(chart.config.variables[x])===-1){if(chart.config.variables[x]instanceof Array){chart.config.variables[x].forEach(function(e){var value_col=e instanceof Object?e.value_col:e;if(varList.indexOf(value_col)===-1){errorNote("Error in variables object.");throw new Error(x+" variable "+"('"+e+"') not found in dataset.")}})}else{errorNote("Error in variables object.");throw new Error(x+" variable "+"('"+chart.config.variables[x]+"') not found in dataset.")}}}if(chart.config.defaults.groupCols){if(chart.config.defaults.groupCols&chart.config.groups.length>chart.config.defaults.maxGroups){var errorText="Too Many Group Variables specified. You specified "+chart.config.groups.length+", but the maximum supported is "+chart.config.defaults.maxGroups+".";errorNote(errorText);throw new Error(errorText)}chart.colorScale.domain(chart.config.groups.map(function(e){return e.key}))}if(!chart.config.defaults.groupCols&!chart.config.defaults.totalCol){var errorText="No data to render. Make sure at least one of chart.config.defaults.groupCols or chart.config.defaults.totalCol is set to true.";errorNote(errorText);throw new Error(errorText)}if(!chart.config.defaults.groupCols){chart.config.defaults.diffCol=false}if(chart.config.groups.length==1){chart.config.defaults.totalCol=false}if(chart.config.defaults.totalCol)chart.colorScale.range()[chart.config.groups.length]="#777"}var util={calculateDifference:calculateDifference,addDifferences:addDifferences,cross:cross,sort:sort,fillRow:fillRow,collapse:collapse,json2csv:json2csv,prepareData:prepareData,setDefaults:setDefaults};function init$6(chart){var vars=chart.config.variables;chart.data={};chart.data.any=util.cross(chart.population_event_data,chart.config.groups,vars["id"],"All","All",vars["group"],chart.config.groups);chart.data.major=util.cross(chart.population_event_data,chart.config.groups,vars["id"],vars["major"],"All",vars["group"],chart.config.groups);chart.data.minor=util.cross(chart.population_event_data,chart.config.groups,vars["id"],vars["major"],vars["minor"],vars["group"],chart.config.groups);chart.data.major=util.addDifferences(chart.data.major,chart.config.groups);chart.data.minor=util.addDifferences(chart.data.minor,chart.config.groups);chart.data.any=util.addDifferences(chart.data.any,chart.config.groups);chart.data.major=chart.data.major.sort(util.sort.maxPer);chart.data.minor.forEach(function(major){major.values.sort(function(a,b){var max_a=d3.sum(a.values.map(function(group){return group.values.n}))/d3.sum(a.values.map(function(group){return group.values.tot}));var max_b=d3.sum(b.values.map(function(group){return group.values.n}))/d3.sum(b.values.map(function(group){return group.values.tot}));var diff=max_b-max_a;return diff?diff:a.key"+d.key+""+'
(n='+(chart.config.summary==="participant"?d.n:d.nEvents)+")"}).style("color",function(d){return chart.colorScale(d.key)}).attr("class","values").classed("total",function(d){return d.key=="Total"}).classed("wc-hidden",function(d){if(d.key=="Total"){return!chart.config.defaults.totalCol}else{return!chart.config.defaults.groupCols}});header2.append("th").attr("class","prevHeader");if(nGroups>1&&chart.config.defaults.diffCol){header1.append("th").text("Difference Between Groups").attr("class","diffplot");header2.append("th").attr("class","diffplot axis")}var allPercents=d3.merge(chart.data.major.map(function(major){return d3.merge(major.values.map(function(minor){return d3.merge(minor.values.map(function(group){return[group.values.per]}))}))}));chart.percentScale=d3.scale.linear().range([0,chart.config.plotSettings.w]).domain([0,d3.max(allPercents)]);var percentAxis=d3.svg.axis().scale(chart.percentScale).orient("top").ticks(6);var prevAxis=chart.wrap.select("th.prevHeader").append("svg").attr("height","34px").attr("width",chart.config.plotSettings.w+10).append("svg:g").attr("transform","translate(5,34)").attr("class","axis percent").call(percentAxis);if(chart.config.groups.length>1){var allDiffs=d3.merge(chart.data.major.map(function(major){return d3.merge(major.values.map(function(minor){return d3.merge(minor.differences.map(function(diff){return[diff.upper,diff.lower]}))}))}));var minorDiffs=d3.merge(chart.data.minor.map(function(m){return d3.merge(m.values.map(function(m2){return d3.merge(m2.differences.map(function(m3){return d3.merge([[m3.upper],[m3.lower]])}))}))}));chart.diffScale=d3.scale.linear().range([chart.config.plotSettings.diffMargin.left,chart.config.plotSettings.w-chart.config.plotSettings.diffMargin.right]).domain(d3.extent(d3.merge([minorDiffs,allDiffs])));var diffAxis=d3.svg.axis().scale(chart.diffScale).orient("top").ticks(8);var prevAxis=chart.wrap.select("th.diffplot.axis").append("svg").attr("height","34px").attr("width",chart.config.plotSettings.w+10).append("svg:g").attr("transform","translate(5,34)").attr("class","axis").attr("class","percent").call(diffAxis)}var majorGroups=tab.selectAll("tbody").data(chart.data.major,function(d){return d.key}).enter().append("tbody").attr("class","minorHidden").attr("class",function(d){return"major-"+d.key.replace(/[^A-Za-z0-9]/g,"")});var majorRows=majorGroups.selectAll("tr").data(function(d){return d.values},function(datum){return datum.key}).enter().append("tr").attr("class","major").each(function(d){var thisRow=d3.select(this);chart.util.fillRow(thisRow,chart,d)});var majorGroups=tab.selectAll("tbody").data(chart.data.minor,function(d){return d.key});var minorRows=majorGroups.selectAll("tr").data(function(d){return d.values},function(datum){return datum.key}).enter().append("tr").attr("class","minor").each(function(d){var thisRow=d3.select(this);chart.util.fillRow(thisRow,chart,d)});tab.append("tfoot").selectAll("tr").data(chart.data.any.length>0?chart.data.any[0].values:[]).enter().append("tr").each(function(d){var thisRow=d3.select(this);chart.util.fillRow(thisRow,chart,d)});tab.selectAll("tfoot svg").remove();tab.select("tfoot i").remove();tab.select("tfoot td.controls span").text("");chart.wrap.selectAll("td.diffplot svg g path.diamond").on("mouseover",function(d){var currentRow=chart.wrap.selectAll(".SummaryTable tbody tr").filter(function(e){return e.values[0].values.major===d.major&&e.values[0].values.minor===d.minor});d3.select(this.parentNode).select(".ci").classed("wc-hidden",false);showCellCounts(chart,currentRow,d.group1);showCellCounts(chart,currentRow,d.group2)}).on("mouseout",function(d){d3.select(this.parentNode).select(".ci").classed("wc-hidden",true);chart.wrap.selectAll(".annote").remove()});chart.wrap.selectAll(".SummaryTable tr").on("mouseover",function(d){d3.select(this).select("td.rowLabel").classed("highlight",true)}).on("mouseout",function(d){d3.select(this).select("td.rowLabel").classed("highlight",false)});chart.wrap.selectAll("tr.major").selectAll("td.controls").on("click",function(d){var current=d3.select(this.parentNode.parentNode);var toggle=!current.classed("minorHidden")
+;current.classed("minorHidden",toggle);d3.select(this).select("span").attr("title",toggle?"Expand":"Collapse").text(function(){return toggle?"+":"-"})});chart.wrap.selectAll("td.rowLabel").on("click",function(d){var toggle=!chart.wrap.select(".SummaryTable table").classed("summary");chart.wrap.select(".SummaryTable table").classed("summary",toggle);chart.wrap.select("div.controls").selectAll("div").classed("wc-hidden",toggle);if(toggle){var major=d.values[0].values["major"];var minor=d.values[0].values["minor"];var detailTableSettings={major:major,minor:minor};chart.detailTable.init(chart,detailTableSettings)}else{chart.wrap.select(".DetailTable").remove();chart.wrap.select("div.closeDetailTable").remove()}})}function toggleRows(chart){var minorToggle=!chart.config.defaults.prefTerms;chart.wrap.selectAll(".SummaryTable tbody").classed("minorHidden",minorToggle);chart.wrap.selectAll(".SummaryTable table tbody").select("tr.major td.controls span").text(minorToggle?"+":"-");var differenceToggle=false;chart.wrap.selectAll(".SummaryTable .diffplot").classed("wc-hidden",differenceToggle);var filterVal=chart.wrap.select("div.controls input.rateFilter").property("value");chart.wrap.selectAll("div.SummaryTable table tbody").each(function(d){var allRows=d3.select(this).selectAll("tr");var filterRows=allRows.filter(function(d){var percents=d.values.map(function(element){return element.values.per});var maxPercent=d3.max(percents);return maxPercent=allRows[0].length)})}var AETable={redraw:redraw,wipe:wipe,init:init$6,toggleRows:toggleRows};function init$7(chart,detailTableSettings){var major=detailTableSettings.major;var minor=detailTableSettings.minor;var vars=chart.config.variables;var details=chart.population_event_data.filter(function(d){var majorMatch=major==="All"?true:major===d[vars["major"]];var minorMatch=minor==="All"?true:minor===d[vars["minor"]];return majorMatch&&minorMatch});if(vars.details.length===0)vars.details=Object.keys(chart.population_data[0]).filter(function(d){return["data_all","placeholderFlag"].indexOf(d)===-1});var detailVars=vars.details;var details=details.map(function(d){var current={};detailVars.forEach(function(currentVar){return current[currentVar]=d[currentVar]});return current});chart.detailTable.wrap=chart.wrap.select("div.table-wrapper").append("div").attr("class","DetailTable");chart.detailTable.head=chart.wrap.select("div.table-wrapper").insert("div",".controls").attr("class","DetailHeader");var closeButton=chart.detailTable.head.append("button").attr("class","closeDetailTable btn btn-primary");closeButton.html(' Return to the Summary View');closeButton.on("click",function(){chart.wrap.select(".SummaryTable table").classed("summary",false);chart.wrap.select("div.controls").selectAll("div").classed("wc-hidden",false);chart.wrap.select("div.controls").select("div.custom-filters").selectAll("select").property("disabled","");chart.wrap.selectAll(".SummaryTable table tbody tr").classed("wc-active",false);chart.detailTable.wrap.remove();chart.detailTable.head.remove()});chart.detailTable.head.append("h4").html(minor==="All"?"Details for "+details.length+" "+major+" records":"Details for "+details.length+" "+minor+" ("+major+") records");var filtered=chart.raw_event_data.length!=chart.population_event_data.length;if(filtered){chart.wrap.select("div.controls").select("div.custom-filters").classed("wc-hidden",false).selectAll("select").property("disabled","disabled");chart.detailTable.head.append("span").html(filtered?"The listing is filtered as shown:":"")}chart.detailTable.draw(chart.detailTable.wrap,details)}function draw(canvas,data){var listing=canvas.append("table").attr("class","table");var headerRow=listing.append("thead").append("tr");headerRow.selectAll("th").data(d3.keys(data[0])).enter().append("th").html(function(d){return d});var tbody=listing.append("tbody");var rows=tbody.selectAll("tr").data(data).enter().append("tr");var cols=rows.selectAll("tr").data(function(d){return d3.values(d)}).enter().append("td").html(function(d){return d})}var detailTable={init:init$7,draw:draw};function createChart(){var element=arguments.length>0&&arguments[0]!==undefined?arguments[0]:"body";var config=arguments[1];var chart={element:element,config:config,init:init,colorScale:colorScale,layout:layout,controls:controls,AETable:AETable,detailTable:detailTable,util:util};return chart}var index={createChart:createChart};return index});
+
diff --git a/css/aeTable.css b/css/aeTable.css
index 21acbfe..0462ac1 100644
--- a/css/aeTable.css
+++ b/css/aeTable.css
@@ -6,7 +6,7 @@
Table layout
\--------------------------------------------------------------------------------------***/
- div.aeTable div.navbar {
+ div.aeTable div.wc-navbar {
margin-top:5px;
}
@@ -19,15 +19,15 @@
font-size:14px;
}
- div.aeTable div.navbar .dropdown-menu li {
+ div.aeTable div.wc-navbar .wc-dropdown-menu li {
cursor: pointer;
}
- div.aeTable div.navbar ul.dropdown-menu li a.disabled {
+ div.aeTable div.wc-navbar ul.wc-dropdown-menu li a.disabled {
color: #BBB;
}
- div.aeTable .alert{
+ div.aeTable .wc-alert{
padding: 20px;
background-color: #f44336; /* Red */
color: white;
@@ -138,7 +138,7 @@
margin: 0 3px 5px 0;
}
- div.aeTable .controls .custom-filters ul li.active > a > label,
+ div.aeTable .controls .custom-filters ul li.wc-active > a > label,
div.aeTable .controls .custom-filters ul li:hover > a > label {
color: white;
}
@@ -178,7 +178,7 @@
cursor:pointer;
}
- div.aeTable .navbar-search .search-query {
+ div.aeTable .wc-navbar-search .search-query {
line-height: 1.3em;
}
@@ -270,9 +270,9 @@
display:none;
}
- div.aeTable .hidden,
- div.aeTable .controls .hidden,
- div.aeTable .controls .filterDiv.custom-filters.hidden {
+ div.aeTable .wc-hidden,
+ div.aeTable .controls .wc-hidden,
+ div.aeTable .controls .filterDiv.custom-filters.wc-hidden {
display: none;
}
diff --git a/css/aeTable.min.css b/css/aeTable.min.css
index cfeb72d..4124ed8 100644
--- a/css/aeTable.min.css
+++ b/css/aeTable.min.css
@@ -1 +1,2 @@
-div.aeTable div.navbar{margin-top:5px}div.aeTable span.headingtext{color:#377eb8}div.aeTable span.labeltext{color:#bbb;font-size:14px}div.aeTable div.navbar .dropdown-menu li{cursor:pointer}div.aeTable div.navbar ul.dropdown-menu li a.disabled{color:#bbb}div.aeTable .alert{padding:20px;background-color:#f44336;color:#fff;margin-bottom:15px}div.aeTable .controls .filterDiv{display:inline-block;vertical-align:top;padding-right:10px}div.aeTable .controls .filterDiv.custom-filters{display:block}div.aeTable .controls .filterDiv.custom-filters select{min-width:3em}div.aeTable .controls .rate-filter{margin-bottom:10px}div.aeTable .controls .rate-filter>*{display:table-cell;vertical-align:middle;float:left}div.aeTable .controls .summary-control{float:left;margin-bottom:10px}div.aeTable .controls .summary-control>*{display:table-cell;float:left}div.aeTable .controls .summary-control div{display:table-cell;vertical-align:middle;float:left}div.aeTable .controls .summary-control div label:hover{color:#00f}div.aeTable .controls .summary-control div label input{float:left}div.aeTable span.sectionHead{font-weight:700;padding-right:10px}div.aeTable .controls .rate-filter .rateFilterDiv>*{font-size:small;float:left;padding:3px;display:table-cell;line-height:1.5em}div.aeTable .controls .rate-filter span.add-on{background:#eee;text-align:center;text-shadow:0 1px 0 #fff;border:1px solid #ccc}div.aeTable .controls .rate-filter span.add-on.before{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}div.aeTable .controls .rate-filter span.add-on.after{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}div.aeTable .controls .rate-filter input{text-align:right;width:15%;border:1px solid #ccc}div.aeTable .controls .custom-filters{clear:both}div.aeTable .controls .custom-filters ul li{margin:0 3px 5px 0}div.aeTable .controls .custom-filters ul li.active>a>label,div.aeTable .controls .custom-filters ul li:hover>a>label{color:#fff}div.aeTable .controls .custom-filters ul li .filterType{font-size:.8em}div.aeTable .controls .custom-filters ul li.filterCustom{display:inline-block;padding-right:5px}div.aeTable .controls .custom-filters ul li.filterCustom *{display:block}div.aeTable .controls .custom-filters ul li.filterCustom span.filterLabel *{display:inline-block}div.aeTable .controls .custom-filters ul li.filterCustom span.filterLabel .filterType{font-style:italic;padding-left:3px;cursor:pointer}div.aeTable span.search-label{padding-left:5px;margin-right:5px}div.aeTable span.search-label span.clear-search{color:red;padding-left:5px;cursor:pointer}div.aeTable .navbar-search .search-query{line-height:1.3em}div.aeTable .SummaryTable table{border-collapse:collapse}div.aeTable .SummaryTable tr td{text-align:left;padding:.5em 5px}td.rowLabel.highlight{text-decoration:underline;cursor:pointer}div.aeTable tr.major td.controls:hover{cursor:pointer}div.aeTable tr.minor td.rowLabel{padding-left:15px}div.aeTable .SummaryTable th,div.aeTable .SummaryTable tr td.diffplot,div.aeTable .SummaryTable tr td.prevplot,div.aeTable .SummaryTable tr td.values{text-align:center}div.aeTable .SummaryTable th span.group-num{font-size:9pt}div.aeTable .SummaryTable thead tr th[rowspan="2"],div.aeTable .SummaryTable thead tr:last-of-type th{border-bottom:1px solid #555}div.aeTable .SummaryTable tfoot td,div.aeTable .SummaryTable th{padding:0 5px;background-color:#eee;font-weight:700;border:none}div.aeTable .SummaryTable th.diffplot.axis svg,div.aeTable .SummaryTable th.prevHeader svg{vertical-align:bottom}div.aeTable .SummaryTable th.diffplot.axis,div.aeTable .SummaryTable th.prevHeader{padding-bottom:0;vertical-align:bottom}div.aeTable .SummaryTable th.diffplot.axis svg text,div.aeTable .SummaryTable th.prevHeader svg text{font-size:10px}div.aeTable .SummaryTable tfoot,div.aeTable .SummaryTable thead{border-top:1px #555 solid;border-bottom:1px #555 solid}div.aeTable .SummaryTable i{cursor:pointer;font-size:.8em;top:0}div.aeTable .SummaryTable table tbody.minorHidden tr.minor,div.aeTable .SummaryTable table.summary,div.aeTable .SummaryTable tr.filter,div.aeTable .SummaryTable tr.inactive{display:none}div.aeTable .controls .filterDiv.custom-filters.hidden,div.aeTable .controls .hidden,div.aeTable .hidden{display:none}div.aeTable .SummaryTable tr td.values{min-width:100px;white-space:nowrap}div.aeTable .SummaryTable table tr:hover{background-color:#eee}div.aeTable .SummaryTable button.closeDetailTable{margin-right:auto;margin-left:auto}.SummaryTable.search tbody.search tr:not(.search),div.aeTable .SummaryTable.search tbody:not(.search) tr{display:none}.SummaryTable.search tbody.search tr.major,div.aeTable .SummaryTable.search tbody.search tr.search{display:table-row}div.aeTable .SummaryTable.search tbody tr.major td.controls span.toggle.icon{display:none}div.aeTable .SummaryTable.search tbody td.prevplot>svg>g.points>text{font-size:10px}div.aeTable span.search{background:#ffc;color:#bbb}div.aeTable span.icon.toggle{color:inherit;background-position:inherit}div.aeTable span.icon.details.transparent>i,div.aeTable span.icon.toggle.transparent>i{color:transparent;background-position:1000px}div.aeTable .axis path{fill:none;stroke:none}div.aeTable .axis line{fill:none;stroke:#999;shape-rendering:crispEdges}div.aeTable .axis{font-size:10px}div.aeTable .DetailTable h4{text-decoration:none;font-weight:400;margin-top:10px}div.aeTable .DetailTable h4 b{text-decoration:none;font-weight:700}div.aeTable .DetailTable table{font-size:9pt}div.aeTable .DetailTable th{padding:3px 5px;text-align:left}
\ No newline at end of file
+div.aeTable div.wc-navbar{margin-top:5px}div.aeTable span.headingtext{color:#377eb8}div.aeTable span.labeltext{color:#bbb;font-size:14px}div.aeTable div.wc-navbar .wc-dropdown-menu li{cursor:pointer}div.aeTable div.wc-navbar ul.wc-dropdown-menu li a.disabled{color:#bbb}div.aeTable .wc-alert{padding:20px;background-color:#f44336;color:#fff;margin-bottom:15px}div.aeTable .controls .filterDiv{display:inline-block;vertical-align:top;padding-right:10px}div.aeTable .controls .filterDiv.custom-filters{display:block}div.aeTable .controls .filterDiv.custom-filters select{min-width:3em}div.aeTable .controls .rate-filter{margin-bottom:10px}div.aeTable .controls .rate-filter>*{height:100%;display:table-cell;vertical-align:middle;float:left}div.aeTable .controls .summary-control{float:left;margin-bottom:10px}div.aeTable .controls .summary-control>*{height:100%;display:table-cell;float:left}div.aeTable .controls .summary-control div{height:100%;display:table-cell;vertical-align:middle;float:left}div.aeTable .controls .summary-control div label:hover{color:#00f}div.aeTable .controls .summary-control div label input{float:left}div.aeTable span.sectionHead{font-weight:700;padding-right:10px}div.aeTable .controls .rate-filter .rateFilterDiv>*{font-size:75%;float:left;padding:3px;display:table-cell;line-height:1.5em}div.aeTable .controls .rate-filter span.add-on{background:#eee;text-align:center;text-shadow:0 1px 0 #fff;border:1px solid #ccc}div.aeTable .controls .rate-filter span.add-on.before{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}div.aeTable .controls .rate-filter span.add-on.after{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}div.aeTable .controls .rate-filter input{text-align:right;width:15%;border:1px solid #ccc}div.aeTable .controls .custom-filters{clear:both}div.aeTable .controls .custom-filters ul li{margin:0 3px 5px 0}div.aeTable .controls .custom-filters ul li.wc-active>a>label,div.aeTable .controls .custom-filters ul li:hover>a>label{color:#fff}div.aeTable .controls .custom-filters ul li .filterType{font-size:.8em}div.aeTable .controls .custom-filters ul li.filterCustom{display:inline-block;padding-right:5px}div.aeTable .controls .custom-filters ul li.filterCustom *{display:block}div.aeTable .controls .custom-filters ul li.filterCustom span.filterLabel *{display:inline-block}div.aeTable .controls .custom-filters ul li.filterCustom span.filterLabel .filterType{font-style:italic;padding-left:3px;cursor:pointer}div.aeTable span.search-label{padding-left:5px;margin-right:5px}div.aeTable span.search-label span.clear-search{color:red;padding-left:5px;cursor:pointer}div.aeTable .wc-navbar-search .search-query{line-height:1.3em}div.aeTable .SummaryTable table{border-collapse:collapse}div.aeTable .SummaryTable tr td{text-align:left;padding:.5em 5px}td.rowLabel.highlight{text-decoration:underline;cursor:pointer}div.aeTable tr.major td.controls:hover{cursor:pointer}div.aeTable tr.minor td.rowLabel{padding-left:15px}div.aeTable .SummaryTable th,div.aeTable .SummaryTable tr td.diffplot,div.aeTable .SummaryTable tr td.prevplot,div.aeTable .SummaryTable tr td.values{text-align:center}div.aeTable .SummaryTable th span.group-num{font-size:9pt}div.aeTable .SummaryTable thead tr th[rowspan="2"],div.aeTable .SummaryTable thead tr:last-of-type th{border-bottom:1px solid #555}div.aeTable .SummaryTable tfoot td,div.aeTable .SummaryTable th{padding:0 5px;background-color:#eee;font-weight:700;border:none}div.aeTable .SummaryTable th.diffplot.axis svg,div.aeTable .SummaryTable th.prevHeader svg{vertical-align:bottom}div.aeTable .SummaryTable th.diffplot.axis,div.aeTable .SummaryTable th.prevHeader{padding-bottom:0;vertical-align:bottom}div.aeTable .SummaryTable th.diffplot.axis svg text,div.aeTable .SummaryTable th.prevHeader svg text{font-size:10px}div.aeTable .SummaryTable tfoot,div.aeTable .SummaryTable thead{border-top:1px #555 solid;border-bottom:1px #555 solid}div.aeTable .SummaryTable i{cursor:pointer;font-size:.8em;top:0}div.aeTable .SummaryTable table tbody.minorHidden tr.minor,div.aeTable .SummaryTable table.summary,div.aeTable .SummaryTable tr.filter,div.aeTable .SummaryTable tr.inactive{display:none}div.aeTable .controls .filterDiv.custom-filters.wc-hidden,div.aeTable .controls .wc-hidden,div.aeTable .wc-hidden{display:none}div.aeTable .SummaryTable tr td.values{min-width:100px;white-space:nowrap}div.aeTable .SummaryTable table tr:hover{background-color:#eee}div.aeTable .SummaryTable button.closeDetailTable{margin-right:auto;margin-left:auto}.SummaryTable.search tbody.search tr:not(.search),div.aeTable .SummaryTable.search tbody:not(.search) tr{display:none}.SummaryTable.search tbody.search tr.major,div.aeTable .SummaryTable.search tbody.search tr.search{display:table-row}div.aeTable .SummaryTable.search tbody tr.major td.controls span.toggle.icon{display:none}div.aeTable .SummaryTable.search tbody td.prevplot>svg>g.points>text{font-size:10px}div.aeTable span.search{background:#ffc;color:#bbb}div.aeTable span.icon.toggle{color:inherit;background-position:inherit}div.aeTable span.icon.details.transparent>i,div.aeTable span.icon.toggle.transparent>i{color:transparent;background-position:1000px}div.aeTable .axis path{fill:none;stroke:none}div.aeTable .axis line{fill:none;stroke:#999;shape-rendering:crispEdges}div.aeTable .axis{font-size:10px}div.aeTable .DetailTable h4{text-decoration:none;font-weight:400;margin-top:10px}div.aeTable .DetailTable h4 b{text-decoration:none;font-weight:700}div.aeTable .DetailTable table{font-size:9pt}div.aeTable .DetailTable th{padding:3px 5px;text-align:left}
+
diff --git a/src/chart/AETable/init.js b/src/chart/AETable/init.js
index 3c28bfc..9b67271 100644
--- a/src/chart/AETable/init.js
+++ b/src/chart/AETable/init.js
@@ -86,7 +86,7 @@ export function init(chart) {
chart.wrap
.select('.SummaryTable')
.append('div')
- .attr('class', 'alert')
+ .attr('class', 'wc-alert')
.text('Error: No data matches the current filters. Update the filters to see results.');
throw new Error('No data found in the column specified for major category. ');
}
@@ -139,7 +139,7 @@ export function init(chart) {
.style('color', d => chart.colorScale(d.key))
.attr('class', 'values')
.classed('total', d => d.key == 'Total')
- .classed('hidden', function(d) {
+ .classed('wc-hidden', function(d) {
if (d.key == 'Total') {
return !chart.config.defaults.totalCol;
} else {
@@ -326,14 +326,14 @@ export function init(chart) {
});
//Display CI;
- d3.select(this.parentNode).select('.ci').classed('hidden', false);
+ d3.select(this.parentNode).select('.ci').classed('wc-hidden', false);
//show cell counts for selected groups
showCellCounts(chart, currentRow, d.group1);
showCellCounts(chart, currentRow, d.group2);
})
.on('mouseout', function(d) {
- d3.select(this.parentNode).select('.ci').classed('hidden', true); //hide CI
+ d3.select(this.parentNode).select('.ci').classed('wc-hidden', true); //hide CI
chart.wrap.selectAll('.annote').remove(); //Delete annotations.
});
@@ -367,13 +367,16 @@ export function init(chart) {
//Update classes (row visibility handeled via css)
var toggle = !chart.wrap.select('.SummaryTable table').classed('summary');
chart.wrap.select('.SummaryTable table').classed('summary', toggle);
- chart.wrap.select('div.controls').selectAll('div').classed('hidden', toggle);
+ chart.wrap.select('div.controls').selectAll('div').classed('wc-hidden', toggle);
//Create/remove the participant level table
if (toggle) {
var major = d.values[0].values['major'];
var minor = d.values[0].values['minor'];
- var detailTableSettings = { major: major, minor: minor };
+ var detailTableSettings = {
+ major: major,
+ minor: minor
+ };
chart.detailTable.init(chart, detailTableSettings);
} else {
chart.wrap.select('.DetailTable').remove();
diff --git a/src/chart/AETable/toggleRows.js b/src/chart/AETable/toggleRows.js
index e92d693..6f96ddf 100644
--- a/src/chart/AETable/toggleRows.js
+++ b/src/chart/AETable/toggleRows.js
@@ -13,7 +13,7 @@ export function toggleRows(chart) {
//Toggle Difference plots
var differenceToggle = false;
- chart.wrap.selectAll('.SummaryTable .diffplot').classed('hidden', differenceToggle);
+ chart.wrap.selectAll('.SummaryTable .diffplot').classed('wc-hidden', differenceToggle);
//Filter based on prevalence.
var filterVal = chart.wrap.select('div.controls input.rateFilter').property('value');
@@ -37,6 +37,6 @@ export function toggleRows(chart) {
d3
.select(this)
.select('tr.major td.controls span')
- .classed('hidden', filterRows[0].length + 1 >= allRows[0].length);
+ .classed('wc-hidden', filterRows[0].length + 1 >= allRows[0].length);
});
}
diff --git a/src/chart/AETable/wipe.js b/src/chart/AETable/wipe.js
index a3b6a18..e912d8d 100644
--- a/src/chart/AETable/wipe.js
+++ b/src/chart/AETable/wipe.js
@@ -3,7 +3,7 @@
\------------------------------------------------------------------------------------------------*/
export function wipe(canvas) {
- canvas.select('.table-wrapper .SummaryTable .alert').remove();
+ canvas.select('.table-wrapper .SummaryTable .wc-alert').remove();
canvas.select('.table-wrapper .SummaryTable table').remove();
canvas.select('.table-wrapper .SummaryTable button').remove();
canvas.select('.table-wrapper .DetailTable').remove();
diff --git a/src/chart/controls/search/clear.js b/src/chart/controls/search/clear.js
index 76bfd20..861656b 100644
--- a/src/chart/controls/search/clear.js
+++ b/src/chart/controls/search/clear.js
@@ -15,7 +15,7 @@ export function clear(chart) {
});
//Remove 'clear search' icon and label.
- chart.wrap.select('span.search-label').classed('hidden', true);
+ chart.wrap.select('span.search-label').classed('wc-hidden', true);
//Clear search flags.
chart.wrap.selectAll('div.SummaryTable').classed('search', false);
diff --git a/src/chart/controls/search/init.js b/src/chart/controls/search/init.js
index ade3ff7..e3a3b0c 100644
--- a/src/chart/controls/search/init.js
+++ b/src/chart/controls/search/init.js
@@ -6,14 +6,14 @@ export function init(chart) {
//draw the search control
var selector = chart.controls.wrap
.append('div')
- .attr('class', 'searchForm navbar-search pull-right')
+ .attr('class', 'searchForm wc-navbar-search pull-right')
.attr('onsubmit', 'return false;');
//Clear search control.
selector.selectAll('span.seach-label, input.searchBar').remove();
//Generate search control.
- var searchLabel = selector.append('span').attr('class', 'search-label label hidden');
+ var searchLabel = selector.append('span').attr('class', 'search-label label wc-hidden');
searchLabel.append('span').attr('class', 'search-count');
searchLabel.append('span').attr('class', 'clear-search').html('☓');
selector
@@ -41,10 +41,10 @@ export function init(chart) {
//Hide expand/collapse cells.
chart.wrap
.selectAll('div.SummaryTable table tbody tr td.controls span')
- .classed('hidden', true);
+ .classed('wc-hidden', true);
//Display 'clear search' icon.
- chart.wrap.select('span.search-label').classed('hidden', false);
+ chart.wrap.select('span.search-label').classed('wc-hidden', false);
//Flag summary table.
var tab = chart.wrap.select('div.SummaryTable').classed('search', true);
diff --git a/src/chart/detailTable/init.js b/src/chart/detailTable/init.js
index 081e50a..2f5dc89 100644
--- a/src/chart/detailTable/init.js
+++ b/src/chart/detailTable/init.js
@@ -59,13 +59,13 @@ export function init(chart, detailTableSettings) {
closeButton.on('click', () => {
chart.wrap.select('.SummaryTable table').classed('summary', false);
- chart.wrap.select('div.controls').selectAll('div').classed('hidden', false);
+ chart.wrap.select('div.controls').selectAll('div').classed('wc-hidden', false);
chart.wrap
.select('div.controls')
.select('div.custom-filters')
.selectAll('select')
.property('disabled', '');
- chart.wrap.selectAll('.SummaryTable table tbody tr').classed('active', false);
+ chart.wrap.selectAll('.SummaryTable table tbody tr').classed('wc-active', false);
chart.detailTable.wrap.remove();
chart.detailTable.head.remove();
});
@@ -85,7 +85,7 @@ export function init(chart, detailTableSettings) {
chart.wrap
.select('div.controls')
.select('div.custom-filters')
- .classed('hidden', false)
+ .classed('wc-hidden', false)
.selectAll('select')
.property('disabled', 'disabled');
chart.detailTable.head
diff --git a/src/chart/layout.js b/src/chart/layout.js
index a8cf0ef..53d37ab 100644
--- a/src/chart/layout.js
+++ b/src/chart/layout.js
@@ -5,10 +5,10 @@
export function layout() {
var wrapper = this.wrap
.append('div')
- .attr('class', 'aeTable row-fluid')
+ .attr('class', 'aeTable')
.append('div')
.attr('class', 'table-wrapper');
- wrapper.append('div').attr('class', 'controls form-inline row-fluid');
+ wrapper.append('div').attr('class', 'controls');
wrapper.append('div').attr('class', 'SummaryTable');
if (this.config.validation)
this.wrap
diff --git a/src/chart/util/fillRow.js b/src/chart/util/fillRow.js
index 90ccb59..0eb0c6c 100644
--- a/src/chart/util/fillRow.js
+++ b/src/chart/util/fillRow.js
@@ -66,7 +66,7 @@ export function fillRow(currentRow, chart, d) {
.classed('total', function(d) {
return d.key == 'Total';
})
- .classed('hidden', function(d) {
+ .classed('wc-hidden', function(d) {
if (d.key == 'Total') {
return !chart.config.defaults.totalCol;
} else {
@@ -110,7 +110,7 @@ export function fillRow(currentRow, chart, d) {
.attr('fill', function(d) {
return table.colorScale(d.values['group']);
})
- .classed('hidden', function(d) {
+ .classed('wc-hidden', function(d) {
if (d.key == 'Total') {
return !chart.config.defaults.totalCol;
} else {
@@ -161,7 +161,7 @@ export function fillRow(currentRow, chart, d) {
.attr('y1', chart.config.plotSettings.h / 2)
.attr('y2', chart.config.plotSettings.h / 2)
.attr('class', 'ci')
- .classed('hidden', chart.config.groups.length > 2)
+ .classed('wc-hidden', chart.config.groups.length > 2)
.attr('stroke', '#bbb');
//Append graphical rate differences.
diff --git a/src/chart/util/setDefaults.js b/src/chart/util/setDefaults.js
index d0bb7e6..1ca6087 100644
--- a/src/chart/util/setDefaults.js
+++ b/src/chart/util/setDefaults.js
@@ -5,7 +5,7 @@ import defaultSettings from '../defaultSettings';
\------------------------------------------------------------------------------------------------*/
export function setDefaults(chart) {
function errorNote(msg) {
- chart.wrap.append('div').attr('class', 'alert').text('Fatal Error: ' + msg);
+ chart.wrap.append('div').attr('class', 'wc-alert').text('Fatal Error: ' + msg);
}
/////////////////////////////