vvvw/static/js/d3_map.js

153 lines
4.1 KiB
JavaScript
Raw Normal View History

2020-12-16 16:44:38 +01:00
var width = 700,
2021-01-08 14:15:52 +01:00
height = 350
var svg = d3.select(".map_area").append("svg")
2021-01-08 14:15:52 +01:00
.attr("width", width)
.attr("height", height)
2021-03-01 14:56:50 +01:00
.attr("viewBox", `${-width/1.7} ${-height/1.8} ${width*2.3} ${height*2.2}`);
var force = d3.layout.force()
2021-01-15 16:25:12 +01:00
.gravity(0.008)
2021-03-03 18:06:29 +01:00
.distance(190)
.charge(-55)
2021-01-08 14:15:52 +01:00
.size([width, height]);
2020-10-19 12:51:29 +02:00
2021-03-03 13:23:31 +01:00
2020-10-15 16:46:23 +02:00
d3.json("/static/js/group1.json", function(error, json) {
if (error) throw error;
force
2021-01-08 14:15:52 +01:00
.nodes(json.nodes)
.links(json.links)
.start();
var link = svg.selectAll(".link")
2021-01-08 14:15:52 +01:00
.data(json.links)
.enter().append("line")
2021-01-08 14:15:52 +01:00
.attr("class", "link");
2020-12-16 16:44:38 +01:00
var node = svg.selectAll(".node")
2021-01-08 14:15:52 +01:00
.data(json.nodes)
.enter().append("g")
.attr("class", function(d) {
return "node group" + d.group
})
.attr("id", function(d) {
return d.id
});
node.append("image")
// .attr("xlink:href", "/static/images/squig2.png")
2021-01-15 16:25:12 +01:00
.attr("xlink:href", "/static/images/circle_blank.png")
2021-01-08 14:15:52 +01:00
.attr("x", -8)
.attr("y", -8)
.attr("width", 16)
.attr("height", 16);
node.append("text")
.attr("dx", 12)
.attr("dy", ".35em")
.text(function(d) {
return d.name
});
2021-03-03 13:23:31 +01:00
2021-01-08 14:15:52 +01:00
var divVideo = d3.select("body").append("div").style("opacity", 1);
var divBio = d3.select("body").append("div").style("opacity", 1);
node.on({
"mouseover": function(d) {
d3.select(this).style("cursor", "pointer");
}
})
.on("click", function(i) {
// popup video
// this is for next the this.parent... ;var video=document.getElementById('#video" + i.id + "');video.pause();
2021-01-15 17:00:02 +01:00
console.log('vid')
2021-01-08 14:15:52 +01:00
if (i.url) {
divVideo.transition().duration(100);
2021-01-15 18:44:27 +01:00
divVideo.html("<div class='draggable' id='showvideo'><span onclick=closevideo() class='topleft'> &nbsp; &times&nbsp;</span><iframe id='video" + i.id + "' width='300' height='150' src='" + i.url + "' frameborder='0' allow='accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture' allowfullscreen></iframe></div>");
};
2021-01-08 14:15:52 +01:00
divBio.transition().duration(100);
2021-01-15 18:44:27 +01:00
divBio.html("<div class='draggable' id='showbio'><span onclick=closebio() class='topleft'> &nbsp; &times&nbsp;</span><div id='bio" + i.id + "'>" + i.bio + "</div>");
2021-01-08 14:15:52 +01:00
popup(i.id, i.time);
})
.on("dblclick", connectedNodes)
.call(force.drag);
force.on("tick", function() {
link.attr("x1", function(d) {
return d.source.x;
})
.attr("y1", function(d) {
return d.source.y;
})
.attr("x2", function(d) {
return d.target.x;
})
.attr("y2", function(d) {
return d.target.y;
});
2021-01-08 14:15:52 +01:00
node.attr("transform", function(d) {
return "translate(" + d.x + "," + d.y + ")";
});
2020-10-26 18:08:10 +01:00
2021-01-08 14:15:52 +01:00
});
2020-12-16 16:44:38 +01:00
2021-01-08 14:15:52 +01:00
// highlight NodeLists//Toggle stores whether the highlighting is on
var toggle = 0;
//Create an array logging what is connected to what
var linkedByIndex = {};
for (i = 0; i < json.nodes.length; i++) {
2020-12-16 16:44:38 +01:00
linkedByIndex[i + "," + i] = 1;
2021-01-08 14:15:52 +01:00
};
json.links.forEach(function(d) {
2020-12-16 16:44:38 +01:00
linkedByIndex[d.source.index + "," + d.target.index] = 1;
2021-01-08 14:15:52 +01:00
});
//This function looks up whether a pair are neighbours
function neighboring(a, b) {
2020-12-16 16:44:38 +01:00
return linkedByIndex[a.index + "," + b.index];
2021-01-08 14:15:52 +01:00
}
function connectedNodes() {
2020-12-16 16:44:38 +01:00
if (toggle == 0) {
2021-01-08 14:15:52 +01:00
//Reduce the opacity of all but the neighbouring nodes
d = d3.select(this).node().__data__;
node.style("opacity", function(o) {
return neighboring(d, o) | neighboring(o, d) ? 1 : 0.1;
});
link.style("opacity", function(o) {
return d.index == o.source.index | d.index == o.target.index ? 1 : 0.1;
});
//Reduce the op
toggle = 1;
2020-12-16 16:44:38 +01:00
} else {
2021-01-08 14:15:52 +01:00
//Put them back to opacity=1
node.style("opacity", 1);
link.style("opacity", 1);
toggle = 0;
2020-12-16 16:44:38 +01:00
}
2021-01-08 14:15:52 +01:00
}
//end highlight nodes
function popup(name, time) {
$("#show" + name).fadeIn()
console.log("around")
2021-03-01 14:09:14 +01:00
$("#nothesis").fadeIn()
2021-01-08 14:15:52 +01:00
$("#thesis").fadeIn()
2021-03-03 18:36:19 +01:00
$("#closeall").fadeIn()
2021-01-08 14:15:52 +01:00
$("#bio" + name).fadeIn()
var dada = document.getElementById("text" + name);
dada.className += " active";
2021-03-01 14:56:42 +01:00
dada.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest' });
2021-01-08 14:15:52 +01:00
};
2020-10-27 17:41:22 +01:00
});