mapaRvacke = {
const svg = d3.create("svg").attr("viewBox", [0, 0, width, height]);
var isTooltipHidden = true;
const paths = svg
.selectAll("path")
.data(
hrvatska.features.filter(
(d) => d.properties.zupanija == "Istarska županija"
)
)
.enter()
.append("path")
.attr("fill", (d, i) => {
var glasovi =
sumiranoGrupirano[d.properties.naziv]["Marino Baldini".toUpperCase()] +
sumiranoGrupirano[d.properties.naziv]["Monika Udovičić".toUpperCase()] +
sumiranoGrupirano[d.properties.naziv]["Valter Flego".toUpperCase()];
return d3.interpolateGreens(
sumiranoGrupirano[d.properties.naziv]["Valter Flego".toUpperCase()] /
glasovi
);
})
.style("cursor", "pointer")
.attr("stroke", "white")
.attr("stroke-width", 1.5)
.attr("id", (d, i) => `opcina${i}`)
.attr("stroke-linejoin", "round")
.attr("d", path)
.on("mouseout", handleMouseOut)
.on("mousemove", handleMouseMove)
.on("mouseover", handleMouseOver);
const citiesGroup = svg
.selectAll(".cities")
.data(mjesta)
.enter()
.append("g")
.attr(
"transform",
(d) =>
`translate(${projection(d.coordinates)[0]},${
projection(d.coordinates)[1]
})`
);
citiesGroup.append("circle").attr("r", 4).attr("fill", "white");
citiesGroup.append("circle").attr("r", 2);
citiesGroup
.append("text")
.attr("class", "text-shadow")
.attr("dx", 5)
.style("stroke", "white")
.style("stroke-width", 2.5)
.style("opacity", 0.9)
.style("pointer-events", "none")
.text((d) => d.name);
citiesGroup
.append("text")
.attr("dx", 5)
.attr("class", "text-black")
.style("pointer-events", "none")
.text((d) => d.name);
function handleMouseOver(event, d) {
d3.select(this).attr("stroke", "black").raise();
var centroid = path.centroid(d);
isTooltipHidden = !isTooltipHidden;
loadTooltipContent(d);
let topOrBottom = "top";
if (event.y > height / 2) topOrBottom = "bottom";
tooltip
.style("top", `${event.y}px`)
.style("left", `${event.x}px`)
.style("visibility", isTooltipHidden ? "hidden" : "visible");
citiesGroup.raise();
}
function handleMouseMove(event, d) {
tooltip.style("top", `${event.y + 50}px`).style("left", `${event.x}px`);
}
function handleMouseOut(event, d) {
d3.select(this).attr("stroke", "white").lower();
isTooltipHidden = true;
tooltip.style("visibility", isTooltipHidden ? "hidden" : "visible");
}
function loadTooltipContent(d) {
var name = d.properties.naziv
.toLowerCase()
.split(" ")
.map((word) => {
return word[0].toUpperCase() + word.substring(1);
})
.join(" ");
var glasovi =
sumiranoGrupirano[d.properties.naziv]["Marino Baldini".toUpperCase()] +
sumiranoGrupirano[d.properties.naziv]["Monika Udovičić".toUpperCase()] +
sumiranoGrupirano[d.properties.naziv]["Valter Flego".toUpperCase()];
var htmlContent = "<div>";
htmlContent += `<h4>${name}<\/h4>`;
htmlContent += `<h6 style='color:grey;padding-bottom:20px'>${d.properties.zupanija}<\/h6>`;
htmlContent += `<table style='border-collapse:collapse; color: grey; font-size:12px;'>
<tr style="border-bottom: 1px solid lightgrey;">
<th>Kandidat</th>
<th >Stranka</th>
<th style='text-align:right'>Ukupno</th>
<th style='text-align:right'>Postotak</th>
<th style='text-align:right'></th>
</tr> `;
htmlContent += `<tr>
<td class="color-box"><span class="ids"></span>Valter Flego</td>
<td>IDS</td>
<td align="right">${countFormat(
sumiranoGrupirano[d.properties.naziv]["Valter Flego".toUpperCase()]
)}</td>
<td align="right" style="font-weight: bold;">${percentFormat(
(sumiranoGrupirano[d.properties.naziv]["Valter Flego".toUpperCase()] /
glasovi) *
100
)}</td>
<td>%<td/>
<tr/>`;
htmlContent += `<tr>
<td class="color-box"><span class="sdp"></span>Marino Baldini</td>
<td>SDP</td>
<td align="right">${countFormat(
sumiranoGrupirano[d.properties.naziv]["Marino Baldini".toUpperCase()]
)}</td>
<td align="right" style="font-weight: bold;">${percentFormat(
(sumiranoGrupirano[d.properties.naziv]["Marino Baldini".toUpperCase()] /
glasovi) *
100
)}</td>
<td><td/>
</tr>`;
htmlContent += `<tr>
<td class="color-box"><span class="hdz"></span>Monika Udovičić</td>
<td>HDZ</td>
<td align="right">${countFormat(
sumiranoGrupirano[d.properties.naziv]["Monika Udovičić".toUpperCase()]
)}</td>
<td align="right" style="font-weight: bold;">${percentFormat(
(sumiranoGrupirano[d.properties.naziv]["Monika Udovičić".toUpperCase()] /
glasovi) *
100
)}</td>
<td><td/>
</tr>`;
htmlContent += "</table>";
htmlContent += '<p style="font-size:10px">100% prebrojanih glasova.</p>';
htmlContent += "</div>";
tooltip.html(htmlContent);
}
var tooltip = d3
.select("body")
.append("div")
.attr("class", "tooltip")
.style("position", "absolute")
.style("display", "block")
.style("pointer-events", "none")
.style("padding", "10px")
.style("z-index", "10")
.style("width", "400px")
.style("background-color", "rgba(255, 255, 255, 0.95)")
.style("border-radius", "3px")
.style("box-shadow", "2px 2px 6px rgba(0,0,0,.5)")
.style("visibility", "hidden")
.text("");
return svg.node();
}