diff --git a/index.html b/index.html
index 01d511c..873b970 100644
--- a/index.html
+++ b/index.html
@@ -19,10 +19,10 @@
display: flex;
align-items: flex-start;
justify-content: space-evenly;
+ gap: 2em 2em;
}
svg {
- border: 1px solid;
padding: 2em;
visibility: hidden;
opacity: 0;
@@ -57,7 +57,7 @@
.translationText, .romanizationText {
visibility: hidden;
font-family: "Noto Sans";
- font-size:1.25em;
+ font-size:1.2em;
}
.romanizationText {
@@ -67,7 +67,7 @@
.languageText {
pointer-events: none;
font-weight: bold;
- font-size: 1.15em;
+ font-size: 1em;
font-family: sans-serif;
visibility: hidden;
}
@@ -114,12 +114,14 @@
}
/* Position map load spinner in the middle of the SVG */
- .svgContainer {
+ #svgContainer {
position: relative;
display: inline-block;
+ flex-grow: 1;
+ max-width: 100%;
}
- .svgContainer .mapLoadSpinner {
+ #svgContainer .mapLoadSpinner {
position: absolute;
top: 40%;
left: 40%;
@@ -178,8 +180,19 @@
}
@media only screen and (max-width: 768px) {
main {
- flex-direction: column;
+ flex-direction: column;
+ align-items: stretch;
}
+ .district {
+ stroke-width: 0.1;
+ }
+ .translationText, .romanizationText {
+ font-size: 0.7em;
+ }
+ .languageText {
+ font-size: 0.6em;
+ }
+
}
@@ -200,8 +213,7 @@
-
-
+
diff --git a/index.js b/index.js
index ba15c97..15f7af4 100644
--- a/index.js
+++ b/index.js
@@ -1,5 +1,3 @@
-const svg = d3.select("svg")
-
const defaultColor = "#555555"
const languages = {
@@ -129,6 +127,33 @@ const district2lang = { // Should override state colors
"Bahraich": languages["awadhi"],
}
+function responsivefy(svg) {
+ // get container + svg aspect ratio
+ var container = d3.select(svg.node().parentNode),
+ width = parseInt(svg.style("width")),
+ height = parseInt(svg.style("height")),
+ aspect = width / height;
+
+ // add viewBox and preserveAspectRatio properties,
+ // and call resize so that svg resizes on inital page load
+ svg.attr("viewBox", "0 0 " + width + " " + height)
+ .attr("perserveAspectRatio", "xMinYMid")
+ .call(resize);
+
+ // to register multiple listeners for same event type,
+ // you need to add namespace, i.e., 'click.foo'
+ // necessary if you call invoke this function for multiple svgs
+ // api docs: https://github.com/mbostock/d3/wiki/Selections#on
+ d3.select(window).on("resize." + container.attr("id"), resize);
+
+ // get width of container and resize svg to fit it
+ function resize() {
+ var targetWidth = Math.floor(container.node().getBoundingClientRect().width);
+ svg.attr("width", targetWidth);
+ svg.attr("height", Math.round(targetWidth / aspect));
+ }
+}
+
// Functions for calculating and dealing with language boundaries
function reverseCoordArrays(coords) {
if (!Array.isArray(coords)) {
@@ -185,12 +210,40 @@ function stateOrDistrictOrLanguage(d) {
}
}
+
+// const mapWidth = document.getElementById("indiaMap").getAttribute("width")
+// const mapHeight = document.getElementById("indiaMap").getAttribute("height")
+const mapWidth = /*window.innerWidth - */document.querySelector("#svgContainer").offsetWidth * 0.85;
+// const mapHeight = document.querySelector("#svgContainer").offsetHeight;
+const mapHeight = (window.innerHeight - document.querySelector("#svgContainer").getBoundingClientRect().top);
+
+const svg = d3.select("#svgContainer")
+ .append('svg')
+ .attr('width', mapWidth.toString())
+ .attr('height', (mapHeight).toString())
+// .attr('viewbox', '0 0 ' + mapWidth.toString() + ' ' + mapHeight.toString())
+// .attr('preserveAspectRatio', "xMidYMin")
+ .attr('id', 'indiaMap')
+ // .call(responsivefy);
+
function drawMap(world) {
- const mapWidth = document.getElementById("indiaMap").getAttribute("width")
- const mapHeight = document.getElementById("indiaMap").getAttribute("height")
const projection = d3.geoMercator().fitSize([mapWidth, mapHeight], world)
const path = d3.geoPath().projection(projection);
+ requestAnimationFrame(() => {
+ const newSvg = d3.select('svg');
+ const bbox = newSvg.node().getBBox();
+ const originalWidth = +newSvg.attr("width");
+ newSvg
+// .attr("viewBox", `${bbox.x} ${bbox.y} ${bbox.width} ${bbox.height}`)
+ .attr("viewBox", `0 ${bbox.y} ${originalWidth} ${bbox.height}`)
+// .attr("width", mapHeight.toString())
+ .attr("height", bbox.height)
+ // .style("display", "block")
+ // .style("max-height", "100%"); // optional: keep it scalable in a flexbox
+ });
+
+
const states = svg.selectAll("g")
.data(world.features)
.enter()