npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

cloudydom

v1.0.7

Published

cloudydom is a ShadowDOM polyfill

Downloads

168

Readme

cloudydom

cloudydom is a shim for ShadowDOM. It is a fork of webcomponents/shadydom, with some bug fixes not present in that project.

Install

Yarn:

yarn add cloudydom

Why fork

shadydom is maintained by the Polymer team. They've done fantastic work creating a workable polyfill. However some problems have persisted:

  • Although it is regularly committed to, only issues discovered by Polymer are addressed.
  • Pull requests made by non-Polymer devs are ignored.
  • Issues filed by non-Polymer devs are usually not commented on, even to say "sorry, we do not have time for this right now."
  • There hasn't yet been any releases, so using the polyfill through a package manager is difficult.
  • Test infrastructure exists but without instructions on how to run the tests it's difficult (impossible?) to add new tests.

cloudydom seeks only to address these community issues. Our plan is to:

  • Do regular releases as issues are fixed. cloudydom is 1.0 on npm and bower right now.
  • If you submit a good PR that gets merged, you'll be added a contributor and have push access like anyone else.
  • Answer issues in some way. No one is obligated to fix issues, of course, but we'll at least let you know that a PR is welcome!
  • Fix the test infrastructure and set up CI so that the project can be maintained with confidence.
  • Regularly pull from webcomponents/shadydom#master so that any bug fixes that happen there are fixed in cloudydom as well.

Usage

Usage of the shim is transparent when attachShadow is unavailable. Elements are patched as needed to report ShadowDOM correct DOM information. Only DOM tree accessors and mutation api is maintained. Some DOM api (for example MutationObservers) is not shimmed.

To force cloudydom to be used even when native ShadowDOM is available, set the ShadyDOM = {force: true} in a script prior to loading the polyfill.

Example

<div id="host"></div>
<script>
  host.attachShadow({mode: 'open'});
  host.shadowRoot.appendChild(document.createElement('a'));
</script>

Building and Testing

For building and testing, first run

npm install
bower install

To build, make sure gulp is installed and gulp.

To test, run npm test

Limitations

cloudydom distribution is asynchronous for performance reasons. This means that the composed DOM will be available 1 microtask after the DOM mutation occurs. For testing, ShadyDOM.flush may be called to force synchronous composition.

ShadowDOM compatible styling is not provided with the ShadyDOM shim. To shim ShadowDOM styling, use the shadycss shim.