parent
102c0677ed
commit
73f8966ea1
1 changed files with 21 additions and 13 deletions
|
@ -6,6 +6,7 @@
|
||||||
import type { TasksFile, TaskDescriptor } from "./task-loader";
|
import type { TasksFile, TaskDescriptor } from "./task-loader";
|
||||||
import { createNodesAndEdges } from "./graph-types";
|
import { createNodesAndEdges } from "./graph-types";
|
||||||
import { taskForce } from "./task-force";
|
import { taskForce } from "./task-force";
|
||||||
|
import { zoom } from "d3";
|
||||||
|
|
||||||
export let tasks: TasksFile;
|
export let tasks: TasksFile;
|
||||||
let hoveredTask: null | string = null;
|
let hoveredTask: null | string = null;
|
||||||
|
@ -73,17 +74,22 @@
|
||||||
nodes = nodes;
|
nodes = nodes;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
const zoomer = d3.zoom().scaleExtent([0.1, 2])
|
||||||
|
|
||||||
|
$: {
|
||||||
|
// zoomer.extent([[-clientWidth / 2,-clientHeight / 2],[clientWidth,clientHeight]])
|
||||||
|
}
|
||||||
|
|
||||||
// start simulation and center view on create
|
// start simulation and center view on create
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
// set center of the SVG at (0,0)
|
// set center of the SVG at (0,0)
|
||||||
let svg = d3.select(svgElement)
|
let svg = d3.select(svgElement).select("g")
|
||||||
|
|
||||||
// setup zoom
|
// setup zoom
|
||||||
function zoomed(e) {
|
function zoomed(e) {
|
||||||
svg.attr("transform", e.transform);
|
svg.attr("transform", e.transform);
|
||||||
}
|
}
|
||||||
let zoomer = d3.zoom().scaleExtent([0.1, 2]).on("zoom", zoomed);
|
zoomer.on("zoom", zoomed);
|
||||||
d3.select(container).call(zoomer);
|
d3.select(container).call(zoomer);
|
||||||
|
|
||||||
runSimulation();
|
runSimulation();
|
||||||
|
@ -112,18 +118,20 @@
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<div bind:this={container} bind:clientHeight bind:clientWidth>
|
<div bind:this={container} bind:clientHeight bind:clientWidth>
|
||||||
<svg bind:this={svgElement} viewBox="{-clientWidth / 2},{-clientHeight / 2},{clientWidth},{clientHeight}">
|
<svg bind:this={svgElement} viewBox="{0},{0},{clientWidth},{clientHeight}" on:click={e => console.log(d3.pointer(e))}>
|
||||||
<g>
|
<g>
|
||||||
{#each edges as edge}
|
<g transform="translate({clientWidth/2}, {clientHeight/2})">
|
||||||
<GraphEdge {edge} />
|
{#each edges as edge}
|
||||||
{/each}
|
<GraphEdge {edge} />
|
||||||
{#each nodes as task}
|
{/each}
|
||||||
<GraphNode
|
{#each nodes as task}
|
||||||
{task}
|
<GraphNode
|
||||||
on:taskClick
|
{task}
|
||||||
on:click={nodeClick(task.task)}
|
on:taskClick
|
||||||
on:hoveringChange={nodeHover(task.task)} />
|
on:click={nodeClick(task.task)}
|
||||||
{/each}
|
on:hoveringChange={nodeHover(task.task)} />
|
||||||
|
{/each}
|
||||||
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
|
|
Reference in a new issue