0

I render a small graph using cytoscape.js 2.2.4 and the arbor layout.

When I do the layout a second time with one or more nodes selected, the selected ones are fixed and do not move.

You can see what I mean in the Arbor section of the cytoscape.js docs:

  • click 'Run code' to apply the arbor layout to the example graph once
  • select a node and click 'Run code' again, the selected node is fixed and does not move

I checked with cy.nodes(":locked") for locked nodes but the selection is not locked. Arbor.js has a 'fixed' property for nodes, but I can't see where cytoscape.js sets this property.

Is it possible to have the seleted node move when applying the arbor layout? Can I pass the fixed: false node property to arbor.js?

I use this to add something to the graph when clicking a node. I add some more nodes/edges and start the layout again. If the clicked node is fixed, the layout is messed up.


Update 1

I figured out that it isn't effected by the locked state of the node but rather grabbable. When I run cy.nodes().ungrabify() just before the layout, the clicked node is not fixed.

When I do cy.nodes().grabify() in the stop callback of the layout or with a long setTimeout() after the layout, the nodes become grabbable again.

But when I then click another node and start the layout again, the node stays grabbed (as in console.log(cy.nodes(":grabbed"))) even though cy.nodes().ungrabify() is called.

This looks like the grabbable/ungrabbable properties are overridden somewhere. Cytoscape.js itself uses ungrabify() and grabify() within the arbor layout function, but this doesn't have an effect.

How can I ungrabify() and grabify() the nodes?

Martin Preusse
  • 9,151
  • 12
  • 48
  • 80

1 Answers1

0

You've encountered a renderer bug: https://github.com/cytoscape/cytoscape.js/issues/528

Should just make it into 2.2.5.

maxkfranz
  • 11,896
  • 1
  • 27
  • 36