with a lot of caveats, abstracted out the cytoscape rendering as (almost) a separate widget