[whatwg/dom] DOMTokenList.add/remove normalize dupes/whitespace even if they're no-ops, but .toggle doesn't (#443)

Accidentally filed as w3c/dom#118.

> Per the current spec, this outputs "a b c c d d":
> 
> ```html
> data:text/html,<!doctype html>
> <script>
> var res = "";
> var span = document.createElement("span");
> span.setAttribute("class", "a a");
> span.classList.add("a");
> res += span.getAttribute("class");
> span.setAttribute("class", "b b");
> span.classList.remove("a");
> res += " " + span.getAttribute("class");
> span.setAttribute("class", "c c");
> span.classList.toggle("c", true);
> res += " " + span.getAttribute("class");
> span.setAttribute("class", "d d");
> span.classList.toggle("a", false);
> res += " " + span.getAttribute("class");
> document.documentElement.textContent = res;
> </script>
> ```
> 
> This is not consistent.  If we want add/remove to normalize even if they're no-ops, so should toggle.  This is especially true because force-toggle is otherwise precisely identical AFAICT, and the slight difference is confusing.
> 
> replace also doesn't normalize if the token doesn't exist, but that doesn't bother me as much since it doesn't otherwise behave identically to add/remove.

> I hit this because it complicates testing -- if force-toggle worked the same as add/remove, we could reuse add/remove tests for force-toggle for free.

I do have tests, which I'm [submitting upstream](https://bugzilla.mozilla.org/show_bug.cgi?id=1354066).

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/dom/issues/443

Received on Tuesday, 18 April 2017 18:22:19 UTC