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

@Import Google Charts api Styles #38

Closed
wants to merge 4 commits into from
Closed

@Import Google Charts api Styles #38

wants to merge 4 commits into from

Conversation

SmokyBob
Copy link
Contributor

required for styling of #26

Additionally updated the docs with table and gauge as possible chart type

@wesalvaro
Copy link
Member

Is this PR obsolete?

//Add the stylesheet as an @import
var cssImport = document.createElement('style');
cssImport.innerHTML = "@import '" + newNode.href + "';";
element.shadowRoot.appendChild(cssImport);
Copy link
Contributor

Choose a reason for hiding this comment

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

this should check that the stylesheet is from the correct url, when one/they are found, the MO should disconnect.

Copy link
Contributor

Choose a reason for hiding this comment

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

@philipwalton wdyt about this approach instead of your own PR that ads the styles internal to the shadow dom. What I like about this (despite being a bit hacky) is that the styles will always be up to date from the server.

Copy link
Member

@wesalvaro wesalvaro Jun 23, 2016

Choose a reason for hiding this comment

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

I like the idea of keeping them up-to-date. I almost find this to be less hacky than the other approach. However, it could use some more organization.

Copy link
Member

Choose a reason for hiding this comment

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

Doesn't this just append any dynamically added stylesheet to the element's shadow DOM? I don't think this is a viable option unless we can reliably identify gviz stylesheets only.

Also, I think gviz only adds the stylesheets once, for the first chart. This means the mutation observer for <google-charts> added after the gviz style are added to the <head> won't pick up these styles.

Copy link
Contributor

Choose a reason for hiding this comment

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

Hence my comment about better checking that the stylesheet that was added is actually from the origin you care about.

Copy link
Member

Choose a reason for hiding this comment

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

Hence my comment about better checking that the stylesheet that was added is actually from the origin you care about.

Ahh, yes, didn't see that comment...

If a known path that only applies to gviz stylesheets can work, I think the best approach would be to create a single style manager object that keeps track of what gviz styles exists in the DOM, and then the individual charts instances could query that info from the style manager on attached and subscribe to changes.

Copy link
Member

Choose a reason for hiding this comment

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

Another option would be to work the the gviz team to have them expose the stylesheet URLs associated with each individual chart type. This is probably the best long-term strategy, as it guarantees we'd always been in sync.

There could also be a load configuration option that tells gviz libraries not to load their own styles, and to let consumer take care of it. This would prevent unnecessary styles from existing on the page.

@wesalvaro
Copy link
Member

wesalvaro commented Mar 2, 2017

So, I just realized this is very similar to how I just implemented here. However, a mutation observer isn't necessary. From my investigation into the gViz library code, the loaded callback runs after the CSS styles have been added to the head. That means that on each load callback, we should be in the clear to import the styles. In my change, I currently do the import when the chart fires the ready event. This means that chart type changes are also taken into account (however, is seems the ready event is firing long after the chart has been drawn...). I'm identifying gviz CSS with a selector at that point.

@rslawik
Copy link
Contributor

rslawik commented Nov 21, 2019

It has been fixed in #223

Tested by adding type="table" in this JS bin demo.

@rslawik rslawik closed this Nov 21, 2019
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

Successfully merging this pull request may close these issues.

5 participants