chart = {
const svg = d3.create("svg").attr("viewBox", [0, 0, width, height]);
svg
.append('rect')
.attr('width', width)
.attr('height', height)
.attr('fill', '#FFF8E7');
let zupanije = svg
.selectAll('path')
.data(geojson.features)
.enter()
.append("path")
.attr("fill", "lightsteelblue")
.attr("stroke", "steelblue")
.attr("stroke-width", 1.4)
.attr("stroke-linejoin", "round")
.attr("d", d => {
return path(d);
});
let title = svg
.append('text')
.attr('x', centroid[0])
.attr('y', centroid[1])
.attr('text-anchor', 'middle')
.style('opacity', 0)
.text('Total border length:');
let subtitle = svg
.append('text')
.attr('x', centroid[0])
.attr('y', centroid[1] + 30)
.attr('text-anchor', 'middle')
.style('opacity', 0)
.text(`${d3.format(',')(totalLenth)} km`);
let credit = svg
.append('text')
.attr('x', width - 20)
.attr('y', height - 20)
.attr('fill', '#546767')
.attr('text-anchor', 'end')
.attr('font-size', 12)
.style('opacity', 1)
.text(`@velimirgasp`);
let majorTitle = svg
.append('text')
.attr('x', 20)
.attr('y', 50)
.attr('fill', '#546767')
.attr('text-anchor', 'start')
.attr('font-size', 24)
.style('opacity', 1)
.text(`🇦🇹 Austrian Borders 🇦🇹`);
let transitions = [];
transitions.push(
svg
.selectAll('path')
.transition()
.delay(duration)
.duration(duration)
.attrTween('d', function(d, i) {
return flubber.toCircle(path(d), centroid[0], centroid[1], radius, {
maxSegmentLength: 0.2
});
})
.transition()
.duration(duration)
.attr('stroke-width', 40)
.transition()
.duration(duration)
.attr('fill', '#FFF8E7')
.end()
);
title
.transition()
.duration(duration)
.delay(2 * duration)
.style('opacity', 1);
subtitle
.transition()
.duration(duration)
.delay(3 * duration)
.style('opacity', 1);
Promise.all(transitions).then(() => {
let pieChart = svg
.selectAll(".arc")
.data(arcs)
.join("path")
.attr("fill", d => color(d.data.name))
.attr("class", "arc")
.style('opacity', 0)
.attr("transform", d => `translate(${centroid[0]},${centroid[1]})`)
.attr("d", arc);
pieChart
.append("title")
.text(d => `${d.data.name}: ${d.data.value.toLocaleString()}`);
pieChart
.transition()
.duration(duration)
.style('opacity', 1)
.end('sad je');
let texts = svg
.append("g")
.attr("font-family", "sans-serif")
.attr("font-size", 16)
.attr("text-anchor", "middle")
.selectAll("text")
.data(arcs)
.join("text")
.style('opacity', 0)
.attr(
"transform",
d =>
`translate(${arc.centroid(d)[0] + centroid[0]}, ${arc.centroid(d)[1] +
centroid[1]})`
)
.call(text =>
text
.append("tspan")
.attr("y", "-0.4em")
.attr("font-weight", "bold")
.text(d => d.data.name)
)
.call(text =>
text
.append("tspan")
.attr("x", 0)
.attr("y", "0.7em")
.attr("fill-opacity", 0.7)
.text(d => `${d3.format(".0%")(d.data.value / totalLenth)}`)
)
.transition()
.duration(duration)
.style('opacity', 1);
});
return svg.node();
}