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

fix(icon): handle icons as <symbol> nodes #4699

Merged
merged 2 commits into from
May 23, 2017

Conversation

crisbeto
Copy link
Member

Fixes icons not being rendered if they're defined as a <symbol> inside the source file.

Fixes #4680.

Fixes icons not being rendered if they're defined as a `<symbol>` inside the source file.

Fixes angular#4680.
@googlebot googlebot added the cla: yes PR author has agreed to Google's Contributor License Agreement label May 20, 2017
@crisbeto crisbeto force-pushed the 4680/symbol-icons branch from 23ce96a to 798336f Compare May 20, 2017 21:20
@crisbeto crisbeto force-pushed the 4680/symbol-icons branch from 798336f to 511591e Compare May 20, 2017 21:21
return this._setSvgAttributes(iconNode.cloneNode(true) as SVGElement);
}

// If the node is a <symbol>, it won't be rendered so we have to convert it into <svg>. Note
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure we want this behavior. If an SVG has a <symbol> element, we should interpret it as not rendering out on purpose, where the <use> element should be used to render something. We shouldn't be making assumptions about why someone is using <symbol> in their SVG.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We're not doing this for all symbol elements, but rather for the one that the user is referring to via an id. I think it's safe to assume that if there's a <symbol id="something"> and the user is referring to it via iconSet:something, it would be expected that the symbol would be rendered.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's fair, I suppose. Are you able to reference <symbol> elements in <use> elements in a completely different <svg> parent? I'm wondering if it would make sense to just use <use> for this, though it might be overkill.

Copy link
Member Author

@crisbeto crisbeto May 23, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I initially went for the use element, but the problem is that, if your page has a base tag (which all Angular apps have), Firefox requires you to include the current URL before the hash. E.g. if I was using an icon on /about, the use element would be <use href="/about#icon-id"/>. The href also has to be maintained on route changes.

Copy link
Member

@jelbourn jelbourn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@jelbourn jelbourn added pr: lgtm action: merge The PR is ready for merge by the caretaker and removed pr: needs review labels May 23, 2017
@tinayuangao tinayuangao merged commit 3212411 into angular:master May 23, 2017
@angular-automatic-lock-bot
Copy link

This issue has been automatically locked due to inactivity.
Please file a new issue if you are encountering a similar or related problem.

Read more about our automatic conversation locking policy.

This action has been performed automatically by a bot.

@angular-automatic-lock-bot angular-automatic-lock-bot bot locked and limited conversation to collaborators Sep 6, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
action: merge The PR is ready for merge by the caretaker cla: yes PR author has agreed to Google's Contributor License Agreement
Projects
None yet
Development

Successfully merging this pull request may close these issues.

md-icon used with addSvgIconSetInNamespace and <symbol> are invisible
4 participants