diff --git a/cjs/dom/token-list.js b/cjs/dom/token-list.js index 25f70f1d..cc4cfe67 100644 --- a/cjs/dom/token-list.js +++ b/cjs/dom/token-list.js @@ -73,7 +73,7 @@ class DOMTokenList extends Set { this.delete(token); update(this); } - else if (force || arguments.length === 1) { + else if (force || force === undefined) { super.add(token); update(this); return true; diff --git a/esm/dom/token-list.js b/esm/dom/token-list.js index 27c19ff7..8efc4a32 100644 --- a/esm/dom/token-list.js +++ b/esm/dom/token-list.js @@ -72,7 +72,7 @@ export class DOMTokenList extends Set { this.delete(token); update(this); } - else if (force || arguments.length === 1) { + else if (force || force === undefined) { super.add(token); update(this); return true; diff --git a/test/html/element.js b/test/html/element.js index 3c3fedd8..59ae94ac 100644 --- a/test/html/element.js +++ b/test/html/element.js @@ -75,6 +75,11 @@ node.classList.toggle('test', true); assert(node.classList.contains('test'), true, 'test class still in'); node.classList.toggle('test', false); node.classList.toggle('test', true); +// issue #277: explicit undefined force must behave like an omitted argument +assert(node.classList.toggle('test', undefined), false, 'toggle(test, undefined) when present removes and returns false'); +assert(node.classList.contains('test'), false, 'no test class after toggle(test, undefined)'); +assert(node.classList.toggle('test', undefined), true, 'toggle(test, undefined) when absent adds and returns true'); +assert(node.classList.contains('test'), true, 'test class added by toggle(test, undefined)'); node.classList.remove('test'); assert(node.classList.contains('test'), false, 'no test class one more time'); assert(node.classList.replace('b', 'c'), true, 'replace happened');