Files
Cloud-book/node_modules/dagre-d3-renderer/lib/create-clusters.js
2025-08-27 17:10:05 +08:00

46 lines
1.2 KiB
JavaScript

import d3 from 'd3'
import util from './util'
import addLabel from './label/add-label'
function createClusters (selection, g) {
const clusters = g.nodes().filter(function (v) { return util.isSubgraph(g, v) })
const svgClusters = selection.selectAll('g.cluster')
.data(clusters, function (v) { return v })
svgClusters.selectAll('*').remove()
svgClusters.enter()
.append('g')
.attr('class', 'cluster')
.attr('id', function (v) {
const node = g.node(v)
return node.id
})
.style('opacity', 0)
util.applyTransition(svgClusters, g)
.style('opacity', 1)
svgClusters.each(function (v) {
const node = g.node(v)
const thisGroup = d3.select(this)
d3.select(this).append('rect')
const labelGroup = thisGroup.append('g').attr('class', 'label')
addLabel(labelGroup, node, node.clusterLabelPos)
})
svgClusters.selectAll('rect').each(function (c) {
const node = g.node(c)
const domCluster = d3.select(this)
util.applyStyle(domCluster, node.style)
})
util.applyTransition(svgClusters.exit(), g)
.style('opacity', 0)
.remove()
return svgClusters
}
export default createClusters