diff --git a/templates/assets/css/net.css b/templates/assets/css/net.css index 34a2b02..b09e0fe 100644 --- a/templates/assets/css/net.css +++ b/templates/assets/css/net.css @@ -22,14 +22,9 @@ svg { @media(min-width: 768px) { - body { - max-height: 90vh; - min-width: 100vw; - } - svg { - height: 50 !important; - width: 200; - } + #mobile_network { + display: none; + } } diff --git a/templates/assets/js/net.js b/templates/assets/js/net.js index bbdb17f..b41dd87 100644 --- a/templates/assets/js/net.js +++ b/templates/assets/js/net.js @@ -2,10 +2,10 @@ let graph = { nodes : [ {id : "hemp", index: 0, x: 719.1790913580512, y: 326.11409230900296, vy: 0.0009665554475078223, vx: 0.00044710537175425926}, {id : "permapp", index: 1, x: 473.51321690437135, y: 317.1181430586339, vy: 0.0005811239352358496, vx: 0.0005105059544352408 }, - {id : "spider", index: 2, x: 495.66982580572676, y: 18.53, vy: 0.0007713356454593206, vx: 0.0007887999665437037 }, + {id : "offgrid", index: 2, x: 495.66982580572676, y: 18.53, vy: 0.0007713356454593206, vx: 0.0007887999665437037 }, {id : "cyberpreneur", index: 3, x: 457.9995206323447, y: 277.13445200140694, vy: 0.0004637678594351416, vx: 0.0007441570379881761 }, {id : "kaoscube", index: 4, x: 428.05791236956037, y: 237.65121337678465, vy: 0.00037483669542696317, vx: 0.00039028860355878376 }, - {id : "offgrid", index: 5, x: 461.65464520161396, y: 189.18158017082138, vy: -0.00023265081878199873, vx: 0.00006278089396472572 } + {id : "spider", index: 5, x: 461.65464520161396, y: 189.18158017082138, vy: -0.00023265081878199873, vx: 0.00006278089396472572 } ], @@ -24,8 +24,11 @@ let graph = { } +// mobile network + let width = 100; let height = 200; +let radius = 15; const svg = d3.select("#mobile_network").append("svg").attr("viewBox", "0, 0, 100, 200").attr("preserveAspectRatio", "xMidYMid meet"), link = svg @@ -70,9 +73,9 @@ defs.append("svg:pattern") .attr("id", "imgHemp") .append("svg:image") .attr("xlink:href", "/assets/img/hemp.webp") -.attr("width", 35) -.attr("height", 35) -.attr("x", -5 ) +.attr("width", 45) +.attr("height", 45) +.attr("x", -7 ) .attr("y", 0); defs.append("svg:pattern") @@ -92,10 +95,10 @@ defs.append("svg:pattern") .attr("id", "imgSpider") .append("svg:image") .attr("xlink:href", "/assets/img/spider_out.webp") -.attr("width", 34) -.attr("height", 34) +.attr("width", 45) +.attr("height", 45) .attr("x", -4 ) -.attr("y", -4); +.attr("y", -7); defs.append("svg:pattern") .attr("width", "100%") @@ -103,10 +106,10 @@ defs.append("svg:pattern") .attr("id", "imgCyber") .append("svg:image") .attr("xlink:href", "/assets/img/3d_greenhouse.webp") -.attr("width", 40) -.attr("height", 40) +.attr("width", 50) +.attr("height", 50) .attr("x", -5 ) -.attr("y", -8); +.attr("y", -10); defs.append("svg:pattern") @@ -115,8 +118,8 @@ defs.append("svg:pattern") .attr("id", "imgKaos") .append("svg:image") .attr("xlink:href", "/assets/img/cube_space.webp") -.attr("width", 35) -.attr("height", 35) +.attr("width", 40) +.attr("height", 40) .attr("x", -6 ) .attr("y", -6); @@ -126,20 +129,20 @@ defs.append("svg:pattern") .attr("id", "imgOff") .append("svg:image") .attr("xlink:href", "/assets/img/boat_construction.webp") -.attr("width", 35) -.attr("height", 35) -.attr("x", -6 ) +.attr("width", 40) +.attr("height", 40) +.attr("x", -5 ) .attr("y", -6); const simulation = d3 .forceSimulation() .nodes(graph.nodes) - .force("charge", d3.forceManyBody().strength(-60)) - .force("center", d3.forceCenter(width / 2.1, height / 2.1)) - .force("link", d3.forceLink(graph.links).distance(50)) + .force("charge", d3.forceManyBody().strength(-300)) + .force("center", d3.forceCenter(width / 2.5, height / 2.25)) + .force("link", d3.forceLink(graph.links).distance(30)) .force("collide", d3.forceCollide(22)) - .force("x", d3.forceX(-40)) + .force("x", d3.forceX(-30)) .on("tick", tick); @@ -158,8 +161,8 @@ defs.append("svg:pattern") .attr("x2", d => d.target.x) .attr("y2", d => d.target.y); node - .attr("cx", d => d.x) - .attr("cy", d => d.y); + .attr("cx", d => d.x = Math.max(radius, Math.min(width - radius, d.x))) + .attr("cy", d => d.y = Math.max(radius, Math.min(height - radius, d.y))); } // make this work on touch as well @@ -167,6 +170,7 @@ defs.append("svg:pattern") function click(event, d) { delete d.fx; delete d.fy; + // remove fixed position on click d3.select(this).classed("fixed", false); simulation.alpha(1).restart(); @@ -179,8 +183,13 @@ defs.append("svg:pattern") } function dragged(event, d) { + + console.log("dragged",d.id); + // set x position of dragged node d.fx = clamp(event.x, 0, width); + // set x position of dragged node d.fy = clamp(event.y, 0, height); + // sets duration of animation before restart simulation.alpha(1).restart(); } @@ -188,10 +197,7 @@ function clamp(x, lo, hi) { return x < lo ? lo : x > hi ? hi : x; } -const Nodes = graph.nodes; -const nodeIx = d => d.img -const N = d3.map(Nodes, nodeIx); -const Images = d3.map( Nodes, ( _,i ) => ({ img: N[i] }) ); +// desktop network