Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

'edge-text-rotation': 'autorotate' breaks colors #7

Closed
KonradHoeffner opened this issue Feb 18, 2021 · 7 comments
Closed

'edge-text-rotation': 'autorotate' breaks colors #7

KonradHoeffner opened this issue Feb 18, 2021 · 7 comments

Comments

@KonradHoeffner
Copy link

KonradHoeffner commented Feb 18, 2021

As soon as I display any labels using 'edge-text-rotation': 'autorotate', the SVG loses all colors and just becomes black and white. See the attached image of a correctly displayed and an incorrectly displayed image. As soon as I remove the edge text rotation, it works again.

svg-autorotate-bug

Selector

  {
      'selector': 'edge',
      'css':
      {
        'z-compound-depth': 'bottom',
        'width': 2.0,
        'edge-text-rotation': 'autorotate',
        'label': function(edge)
        {
          return "bla";
        },
}
@rob-gordon
Copy link

I forked this repo in hopes of fixing this but realized this uses https://github.com/gliffy/canvas2svg under the hood and I wasn't really ready to dig into that.

I wrote a temporary fix for my case which uses DOMParser to edit the generated svg and patch the missing fill colors. Maybe it will work for your use case? You may have to adjust the fill color accordingly.

const svgStr = cy.current.svg({ full: true, scale: 2 });
const domparser = new DOMParser();
let svgEl = domparser.parseFromString(svgStr, "image/svg+xml");
let squares = [...svgEl.children[0].querySelectorAll("path")].filter(
  (x) =>
    !x.getAttribute("fill") &&
    x.getAttribute("paint-order") === "fill stroke markers"
);
squares = [...squares, ...svgEl.children[0].querySelectorAll("rect")];
squares.forEach((el) => el.setAttribute("fill", "#ffffff")); // <- set appropriate fill color here
const correctedSvgStr = svgEl.documentElement.outerHTML;

@kinimesi
Copy link
Owner

kinimesi commented Apr 3, 2021

It looks like once the rotation of text is set, all parameters of existing nodes are reset. This is the commit that causes this issue: gliffy/canvas2svg@c7df7fa I revered it in my fork: kinimesi/canvas2svg@68b8ef8 It looks like it works, but I'm not exactly sure if it breaks something else. I pushed the fixed version to unstable branch. Could you please test it and let me know if it works?

@karasma3
Copy link

Hello @kinimesi .
I tried your fork and it looks like it is #working!
Other entities of the graph are not affected by this forked repo.

It looks like not only text-rotation: autorotate, but whole text-rotation attribute is not working.
Node and links to be shown:
svgBefore
Master branch:
svgAfter
and the result with the fork:
svgFork

Can you propose the pull request to the canvas2svg? Or perhaps make cytoscape-svg dependant on your forked fix?

Best regards,
Maroš

@kinimesi
Copy link
Owner

kinimesi commented Dec 5, 2021

Hi @karasma3, I'm confused by this: It looks like not only text-rotation: autorotate, but whole text-rotation attribute is not working. Does the fix solve all of these issues?

@KonradHoeffner
Copy link
Author

Is there an update on this?

@kinimesi
Copy link
Owner

Hi, could you please try v0.4.0 and let me if it solves your problem?

@KonradHoeffner
Copy link
Author

Yes, it works, thanks a lot!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants