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

m-class-list

v1.1.10

Published

The super simple shim for `classList` of HTML and SVG, that transparently intercepts difference between modern browsers and semi-modern browsers.

Downloads

1,761

Readme

mClassList

npm GitHub issues dependencies license

The super simple shim for classList of HTML and SVG, that transparently intercepts difference between modern browsers and semi-modern browsers.

There are many shims and polyfills for classList, and also, almost modern browsers already support classList.
Why is a new shim needed now?

  • Some browsers don't support yet classList of SVG element even if those support that of HTML element.
  • Some browsers don't support multiple arguments for methods of DOMTokenList (i.e. classList).
  • Since modern browsers support many other APIs, a heavy library that supports legacy browsers perfectly is unneeded.
  • That is, only a little bit of intercepting is needed, more simple and small shim is needed.

So, features of mClassList are:

  • Provide classList if specified element does not have it.
  • Support SVG element also.
  • Support and respect the standard API specification that contains supporting multiple arguments for methods.
  • Simpler and smaller by using other APIs that are supported by modern browsers.
  • Don't change any prototype. (Polyfills and the evolution of the Web)
  • Additionally support, "Method chaining".

Usage

Load mClassList into your web page.

<script src="m-class-list.min.js"></script>

Replace element.classList with mClassList(element).
The element can be a HTML element or SVG element.

For example, replace this code:

if (element.classList.contains('foo')) {
  element.classList.add('bar', 'baz');
}

with:

if (mClassList(element).contains('foo')) {
  mClassList(element).add('bar', 'baz');
}

Supported APIs

Following methods and properties are supported. For details of each one, see HTML5 document such as MDN.

length

number = mClassList(element).length

item

token = mClassList(element).item(index)

add

classList = mClassList(element).add(token1[, token2, token3...])

(See mClassList.methodChain for the return value.)

remove

classList = mClassList(element).remove(token1[, token2, token3...])

(See mClassList.methodChain for the return value.)

contains

boolean = mClassList(element).contains(token)

toggle

boolean = mClassList(element).toggle(token[, force])

replace

classList = mClassList(element).replace(token, newToken)

(See mClassList.methodChain for the return value.)

mClassList.ignoreNative

By default, mClassList(element) returns a native classList if element has it.
You can set mClassList.ignoreNative = true to use shim always. For example, this is used for browsers that don't support multiple arguments for methods even though the element has classList.

mClassList.methodChain

By default, following methods return the classList instance itself.

Therefore you can use "Method chaining".
For example:

mClassList(element)
  .add('foo', 'bar')
  .remove('baz');

Note that this behavior differs from the standard API specification.
If you want the standard behavior, set mClassList.methodChain = false to make the methods return a void.