in default/home/static/chart.js [169:356]
function barChart(a) {
'marginLeft' in a ? '' : a.marginLeft = 40;
'marginRight' in a ? '' : a.marginRight = 20;
'marginTop' in a ? '' : a.marginTop = 20;
'marginBottom' in a ? '' : a.marginBottom = 20;
width = 710 - a.marginLeft - a.marginRight,
height = 500 - a.marginTop - a.marginBottom;
if (!('x' in a)) {
a.x = d3.scale.ordinal()
.rangeRoundBands([0, width], .1);
}
if (!('y' in a)) {
a.y = d3.scale.linear()
.rangeRound([height, 0]);
}
if ('color' in a && 'domain' in a.color && 'range' in a.color && a.color.domain.length > 0) {
a.color = d3.scale.ordinal()
.domain(a.color.domain)
.range(a.color.range);
} else {
a.color = d3.scale.category20();
}
if (!('xAxis' in a)) {
a.xAxis = d3.svg.axis()
.scale(a.x)
.orient("bottom");
}
if (!('yAxis' in a)) {
a.yAxis = d3.svg.axis()
.scale(a.y)
.orient("left")
.tickFormat(d3.format(".2s"));
}
d3.json(a.href, function (error, data) {
if (error) {
showError(a, error);
return;
}
svg = d3.select(a.div).append("svg")
.attr("id", a.ID)
//.attr("height", "90%")
.attr("viewBox", "0 0 710 500")
//.attr("preserveAspectRatio","xMidYMid meet")
.attr("class", "chart")
.append("g")
.attr("transform", "translate(" + a.marginLeft + "," + a.marginTop + ")");
var total = 0;
data.forEach(function (d) {
var c = d.t;
total += c;
var keys = [a.key];
if (d.items) {
keys = Object.keys(d.items);
delete keys.t;
var y = 0;
var skey = Object.keys(d.items[0])[0];
d.items.sort(function (a, b) { return a[skey] > b[skey] });
for (item of d.items) {
item.y = y;
y = y + item.t;
}
}
});
a.x.domain(data.map(function (d) {
return d._id;
}));
a.y.domain([0, d3.max(data, function (d) {
return d.t;
})]);
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(a.xAxis);
svg.append("g")
.attr("class", "y axis")
.call(a.yAxis);
svg.append("g")
.attr("class", "grid")
.call(a.yAxis
.tickSize(-width, 0, 0)
.tickFormat(""));
svg.append("a").attr("xlink:href", a.list).append("text").text(function (d) { return total }).attr("y", 50).attr("x", 30).attr("class", "sum");
/* total counts above bar charts */
svg.selectAll("total")
.data(data)
.enter().append("a")
.attr("target", "_blank")
.attr("xlink:href", (d) => a.list + '&' + a.key[0] + '=' + (d._id ? d._id : 'null')).append("text")
.text(function (d) {
return d.t;
})
.attr("y", function (d) {
return (a.y(d.t) - 2)
})
.attr("x", function (d) {
return a.x(d._id);
})
.attr("class", "total")
;
/* x axis bars */
var bars = svg.selectAll(".state")
.data(data)
.enter().append("g")
.attr("class", "g")
.attr("transform", function (d) {
return "translate(" + a.x(d._id) + ",0)";
});
var ykey;
if (data[0] && data[0].items && data[0].items[0] && Object.keys(data[0].items[0])[0]) {
ykey = Object.keys(data[0].items[0])[0];
}
/* stacked bar charts */
bars.selectAll("rect")
.data(function (d) {
if (Array.isArray(d.items)) {
var mm = d.items.map(function (x) { x._id = d._id; return x });
return mm;
} else {
d.y = 0;
return [d];
}
})
.enter().append("a")
.attr("target", "_blank")
.attr("xlink:href", function (i) {
return a.list + "&" + a.key[0] + "=" + (i._id ? i._id : 'null') + (ykey ? "&" + ykey + '=' + i[ykey] : '')
})
.append("rect")
.attr("width", a.x.rangeBand())
.attr("y", function (i) {
return a.y(i.y + i.t);
//a.y(i.y);
})
.attr("height", function (i) {
return a.y(i.y) - a.y(i.y + i.t);
})
//.attr("class", function(d) { return d.name;})
.style("fill", function (i) { return a.color(i[ykey]); })
.append("svg:title")
.text(function (i) { return i[ykey] + ' = ' + i.t });
/* bar label */
bars.selectAll("text").data(function (d) {
if (Array.isArray(d.items)) {
var mm = d.items.map(function (x) { x._id = d._id; return x });
return mm;
} else {
d.y = 0;
return [d];
}
}).enter().append("a")
.attr("target", "_blank")
.attr("xlink:href", function (i) {
return a.list + "&" + a.key[0] + "=" + (i._id ? i._id : 'null') + (ykey ? "&" + ykey + '=' + i[ykey] : '')
})
.append("text").text(function (i) {
if (a.y(i.y) - a.y(i.y + i.t) > 10) {
return i.t + ' ' + (ykey ? i[ykey] : '');
}
return '';
})
.attr("y", function (i) {
return a.y(i.y) - 2;
//a.y(i.y)+a.y(i.t)+10;
})
.attr("x", 2);
});
};