diff --git a/data/graphConfig.yaml b/data/graphConfig.yaml
index 4104e428a7d29..3f8d3fb6b1e84 100644
--- a/data/graphConfig.yaml
+++ b/data/graphConfig.yaml
@@ -1,5 +1,6 @@
enableLegend: false
enableDrag: true
enableZoom: true
+depth: -1 # set to -1 to show full graph
paths:
- /moc: "#4388cc"
\ No newline at end of file
diff --git a/layouts/_default/section.html b/layouts/_default/section.html
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/layouts/partials/graph.html b/layouts/partials/graph.html
index 7dcd5365dd0c1..e8cd9665a31fb 100644
--- a/layouts/partials/graph.html
+++ b/layouts/partials/graph.html
@@ -16,12 +16,35 @@
Interactive Graph
const content = {{$.Site.Data.contentIndex}}
const curPage = {{ strings.TrimRight "/" .Page.RelPermalink }}
const pathColors = {{$.Site.Data.graphConfig.paths}}
+ let depth = {{$.Site.Data.graphConfig.depth}}
const parseIdsFromLinks = (links) => [...(new Set(links.flatMap(link => ([link.source, link.target]))))]
+ const neighbours = new Set()
+ const wl = [curPage || "/", "__SENTINEL"]
+ if (depth >= 0) {
+ while (depth >= 0 && wl.length > 0) {
+ // compute neighbours
+ const cur = wl.shift()
+ console.log(depth, cur, wl)
+ if (cur === "__SENTINEL") {
+ depth--
+ wl.push("__SENTINEL")
+ } else {
+ neighbours.add(cur)
+ const outgoing = index.links[cur] || []
+ const incoming = index.backlinks[cur] || []
+ console.log(incoming)
+ wl.push(...outgoing.map(l => l.target), ...incoming.map(l => l.source))
+ }
+ }
+ } else {
+ parseIdsFromLinks(links).forEach(id => neighbours.add(id))
+ }
+
const data = {
- nodes: parseIdsFromLinks(links).map(id => ({id})),
- links,
+ nodes: [...neighbours].map(id => ({id})),
+ links: links.filter(l => neighbours.has(l.source) && neighbours.has(l.target)),
}
const color = (d) => {
@@ -70,10 +93,8 @@ Interactive Graph
const width = document.getElementById("graph-container").offsetWidth
const simulation = d3.forceSimulation(data.nodes)
- .force("charge", d3.forceManyBody().strength(-20))
- .force("link", d3.forceLink(data.links)
- .id(d => d.id)
- )
+ .force("charge", d3.forceManyBody().strength(-30))
+ .force("link", d3.forceLink(data.links).id(d => d.id))
.force("center", d3.forceCenter());
const svg = d3.select('#graph-container')