Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion cjs/dom/token-list.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,16 @@ class DOMTokenList extends Set {
* @param {boolean?} force
*/
toggle(token, force) {
// Web IDL optional boolean: omitted or undefined → plain toggle
if (arguments.length < 2 || force === undefined)
force = !this.has(token);
if (this.has(token)) {
if (force)
return true;
this.delete(token);
update(this);
}
else if (force || arguments.length === 1) {
else if (force) {
super.add(token);
update(this);
return true;
Expand Down
5 changes: 4 additions & 1 deletion esm/dom/token-list.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,16 @@ export class DOMTokenList extends Set {
* @param {boolean?} force
*/
toggle(token, force) {
// Web IDL optional boolean: omitted or undefined → plain toggle
if (arguments.length < 2 || force === undefined)
force = !this.has(token);
if (this.has(token)) {
if (force)
return true;
this.delete(token);
update(this);
}
else if (force || arguments.length === 1) {
else if (force) {
super.add(token);
update(this);
return true;
Expand Down
11 changes: 11 additions & 0 deletions test/html/element.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,17 @@ assert(node.classList.value, 'a c', 'correct .value again');
assert(node.classList.replace('b', 'c'), false, 'replace did not happen');
assert(node.classList.supports('whatever'), true, 'whatever');

// #277: toggle(token, undefined) must match omitted force (plain toggle)
const tokenList = document.createElement('div');
assert(tokenList.classList.toggle('foo', undefined), true, 'undefined force adds missing token');
assert(tokenList.className, 'foo', 'undefined force added class');
assert(tokenList.classList.toggle('foo', undefined), false, 'undefined force removes present token');
assert(tokenList.className, '', 'undefined force removed class');
tokenList.classList.toggle('bar', true);
assert(tokenList.classList.contains('bar'), true, 'force true adds');
tokenList.classList.toggle('bar', false);
assert(tokenList.classList.contains('bar'), false, 'force false removes');

assert(node.onclick, null, 'Level 0 events');

let args = null;
Expand Down