cytoscape.js-expand-collapse icon indicating copy to clipboard operation
cytoscape.js-expand-collapse copied to clipboard

Collapse edges between collapsed nodes

Open superbobry opened this issue 8 years ago • 11 comments

Currently the edges between collapsed nodes are left "as-is", i.e. if two nodes were collapsed into a supernode, the supernode has two incoming (or outgoing) edges. I wonder if it is possible to collapse the edges if the other side of each edge points to another supernode?

image

superbobry avatar Aug 18 '16 13:08 superbobry

When compound nodes are collapsed, we create one meta edge per inter-graph edge coming out of / going into the collapsed compound. In case there are multiple such edges, we end up with multiple meta edges (multiple meta edges with the same source and target). We could implement an option named collapseMetaEdges to not generate more than one meta edge when true. Notice that this applies to situations where only one end is a meta node.

ugurdogrusoz avatar Aug 18 '16 14:08 ugurdogrusoz

Thank you for a quick reply! I like the idea of having an extra option and I'm fine with it applying in the case where there is a single meta node.

superbobry avatar Aug 18 '16 14:08 superbobry

As a workaround you can play around with meta edge styling. E.g

    {
      'selector': 'edge.meta',
      'style': {
        'curve-style': 'unbundled-bezier',
        'control-point-distances': '0 0 0',
      },
    },

This way, at least visually edges will be collapsed into one.

aindlq avatar Aug 18 '16 15:08 aindlq

Thanks, @aindlq, I'll give that a try!

On a slightly unrelated note: the fact that edges are replaced by meta edges seems to somehow break the qtip plugin. I.e. the following does NOT result in tooltips for meta edges:

cy.edges().qtip({
    content: function() { return "foobar"; },
    position: {my: "top center", at: "bottom center"},
    style: {classes: "qtip-bootstrap"},
    show: {event: "mouseover"},
    hide: {event: "mouseout"}
});

Is this a known issue?

superbobry avatar Aug 18 '16 17:08 superbobry

Are you doing this when you already have "meta" edges in cy.edges() or in the beginning when all nodes are expanded? If later is the case, you need to make sure that you initialize qtip on these new meta edges as well.

aindlq avatar Aug 18 '16 19:08 aindlq

If later is the case, you need to make sure that you initialize qtip on these new meta edges as well.

This was indeed the case. Thank you!

superbobry avatar Aug 19 '16 12:08 superbobry

We could implement an option named collapseMetaEdges to not generate more than one meta edge when true.

@ugurdogrusoz may I ask if support for this option has progressed at all?

pmackay avatar Feb 17 '18 17:02 pmackay

Unfortunately we don't have resources for this at the moment.

ugurdogrusoz avatar Feb 19 '18 07:02 ugurdogrusoz

How to initialize qtip on new meta-edges after collapse or expand? can you provide the code

paanday avatar Apr 11 '18 12:04 paanday

@aindlq

As a workaround you can play around with meta edge styling. E.g

    {
      'selector': 'edge.meta',
      'style': {
        'curve-style': 'unbundled-bezier',
        'control-point-distances': '0 0 0',
      },
    },

This way, at least visually edges will be collapsed into one.

Why only set curve-style to unbundled-bezier work ? I set it to bezier and this workaround not works. But I think unbundled-bezier looks ugly.

Does666 avatar Aug 26 '19 10:08 Does666

Is there any progress on this?

ephraimrothschild avatar Mar 16 '23 18:03 ephraimrothschild