The super simple shim for `classList` of HTML and SVG, that transparently intercepts difference between modern browsers and semi-modern browsers.
npm install m-class-list   
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".
Load mClassList into your web page.
``html`
Replace element.classList with mClassList(element). element
The can be a HTML element or SVG element.
For example, replace this code:
`js`
if (element.classList.contains('foo')) {
element.classList.add('bar', 'baz');
}
with:
`js`
if (mClassList(element).contains('foo')) {
mClassList(element).add('bar', 'baz');
}
Following methods and properties are supported. For details of each one, see HTML5 document such as MDN.
`js`
number = mClassList(element).length
`js`
token = mClassList(element).item(index)
`js`
classList = mClassList(element).add(token1[, token2, token3...])
(See mClassList.methodChain for the return value.)
`js`
classList = mClassList(element).remove(token1[, token2, token3...])
(See mClassList.methodChain for the return value.)
`js`
boolean = mClassList(element).contains(token)
`js`
boolean = mClassList(element).toggle(token[, force])
`js`
classList = mClassList(element).replace(token, newToken)
(See mClassList.methodChain for the return value.)
By default, mClassList(element) returns a native classList if element has it. mClassList.ignoreNative = true
You can set 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.
By default, following methods return the classList instance itself.
Therefore you can use "Method chaining".
For example:
`js`
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`.