JSFiddle - React, Tailwind, and code Playground
by Shmac
HTML
<div class="container">
<div id="GroupA" class="parentNode">
</div>
<div id="GroupB" class="parentNode">
</div>
</div>
CSS
.parentNode
{
border-radius: 100px;
border: solid black 5px;
height: 500px;
width: 200px;
position: relative;
background-color: lightblue;
}
#GroupA
{
float: left;
}
#GroupB
{
float: right;
}
.node
{
height: 20px;
width: 20px;
position: absolute;
float: none;
}
JavaScript
nodeGraph = {};
//create nodes and the beginnings of a dictionary for a directed graph
//to later be used to adjust the positions of nodes - note this is not
//the most efficient algorithm.
nodeCount = 10;
for (var i = 0; i < nodeCount; i++)
{
var div = document.createElement('div');
div.id = "node" + i;
div.className = "node";
div.setAttribute("group", (randomInt(1, 2) == 1) ? "A" : "B")
nodeGraph["node" + i] = [];
document.getElementsByClassName('container')[0].append(div);
}
//here I randomly create a relationship amongst nodes - but I limit it to 5 relationships just so its not too resource heavy.
//loop through each node
for (var i = 0; i < nodeCount; i++)
{
//generate number of relationships
randInt = randomInt(1, 5);
//generate random relationships
for (var j = 0; j < randInt; j++)
{
nodeGraph["node" + i].push("node" + randomInt(0, nodeCount - 1));
}
}
//outputs the random relationship amongst nodes
console.log(nodeGraph);
//loop through every node
groupABox = document.getElementById('GroupA');
groupABBox = groupABox.getBoundingClientRect();
groupBBox = document.getElementById('GroupB');
groupBBBox = groupBBox.getBoundingClientRect();
for (var i = 0; i < nodeCount; i++)
{
currentNode = document.getElementById("node" + i);
group = currentNode.getAttribute('group');
if (group == 'A')
{
relationships = nodeGraph['node' + i];
for (var j = 0; j < relationships.length; j++)
{
comparedNode = document.getElementById(relationships[j]);
if (comparedNode.getAttribute('group') == 'A')
{
}
else
{
}
}
}
}
function randomInt(min, max)
{
return Math.floor(Math.random() * (max - min + 1) + min);
}