Changeset 131408 in webkit


Ignore:
Timestamp:
Oct 15, 2012 8:57:02 PM (12 years ago)
Author:
commit-queue@webkit.org
Message:

Add force parameter to DOMTokenList.toggle
https://bugs.webkit.org/show_bug.cgi?id=99375

Patch by Pablo Flouret <pablof@motorola.com> on 2012-10-15
Reviewed by Darin Adler.

Source/WebCore:

See http://dom.spec.whatwg.org/#dom-domtokenlist-toggle and
https://www.w3.org/Bugs/Public/show_bug.cgi?id=18463

Essentially, the optional boolean force parameter, if present, makes
toggle always add or remove a class.

No new tests, modified fast/dom/HTMLElement/script-tests/class-list.js

  • html/DOMTokenList.cpp:

(WebCore::DOMTokenList::toggle):
(WebCore):

  • html/DOMTokenList.h:

(DOMTokenList):

  • html/DOMTokenList.idl:

New toggle() overload that takes a force parameter and calls
addInternal() or removeInternal() based on it.

LayoutTests:

  • fast/dom/HTMLElement/class-list-expected.txt:
  • fast/dom/HTMLElement/class-list-quirks-expected.txt:
  • fast/dom/HTMLElement/script-tests/class-list.js:

(shouldThrowDOMException):

Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r131407 r131408  
     12012-10-15  Pablo Flouret  <pablof@motorola.com>
     2
     3        Add force parameter to DOMTokenList.toggle
     4        https://bugs.webkit.org/show_bug.cgi?id=99375
     5
     6        Reviewed by Darin Adler.
     7
     8        * fast/dom/HTMLElement/class-list-expected.txt:
     9        * fast/dom/HTMLElement/class-list-quirks-expected.txt:
     10        * fast/dom/HTMLElement/script-tests/class-list.js:
     11        (shouldThrowDOMException):
     12
    1132012-10-15  Shinya Kawanaka  <shinyak@chromium.org>
    214
  • trunk/LayoutTests/fast/dom/HTMLElement/class-list-expected.txt

    r129779 r131408  
    1919PASS element.className is "y"
    2020Ensure that we can handle empty class name correctly
     21PASS element.classList.toggle('x') is true
    2122PASS element.className is "x"
     23PASS element.classList.toggle('x') is false
    2224PASS element.className is ""
    2325PASS element.classList.contains('x') is false
    2426PASS element.classList[1] is undefined.
     27Test toggle with force argument
     28PASS element.classList.toggle('x', true) is true
     29PASS element.className is "x"
     30PASS element.classList.toggle('x', true) is true
     31PASS element.className is "x"
     32PASS element.classList.toggle('x', false) is false
     33PASS element.className is ""
     34PASS element.classList.toggle('x', false) is false
     35PASS element.className is ""
     36PASS element.classList.toggle('', true) threw expected DOMException with code 12
     37PASS element.classList.toggle('x y', false) threw expected DOMException with code 5
    2538Testing add in presence of trailing white spaces.
    2639PASS element.className is "x y"
  • trunk/LayoutTests/fast/dom/HTMLElement/class-list-quirks-expected.txt

    r129779 r131408  
    1919PASS element.className is "y"
    2020Ensure that we can handle empty class name correctly
     21PASS element.classList.toggle('x') is true
    2122PASS element.className is "x"
     23PASS element.classList.toggle('x') is false
    2224PASS element.className is ""
    2325PASS element.classList.contains('x') is false
    2426PASS element.classList[1] is undefined.
     27Test toggle with force argument
     28PASS element.classList.toggle('x', true) is true
     29PASS element.className is "x"
     30PASS element.classList.toggle('x', true) is true
     31PASS element.className is "x"
     32PASS element.classList.toggle('x', false) is false
     33PASS element.className is ""
     34PASS element.classList.toggle('x', false) is false
     35PASS element.className is ""
     36PASS element.classList.toggle('', true) threw expected DOMException with code 12
     37PASS element.classList.toggle('x y', false) threw expected DOMException with code 5
    2538Testing add in presence of trailing white spaces.
    2639PASS element.className is "x y"
  • trunk/LayoutTests/fast/dom/HTMLElement/script-tests/class-list.js

    r129779 r131408  
    8181debug('Ensure that we can handle empty class name correctly');
    8282element = document.createElement('span');
    83 element.classList.toggle('x');
    84 shouldBeEqualToString('element.className', 'x');
    85 element.classList.toggle('x');
     83shouldBeTrue("element.classList.toggle('x')");
     84shouldBeEqualToString('element.className', 'x');
     85shouldBeFalse("element.classList.toggle('x')");
    8686shouldBeEqualToString('element.className', '');
    8787
     
    9191element.classList.remove('x');
    9292element.classList.add('x')
     93
     94
     95debug('Test toggle with force argument')
     96
     97createElement('');
     98shouldBeTrue("element.classList.toggle('x', true)");
     99shouldBeEqualToString('element.className', 'x');
     100shouldBeTrue("element.classList.toggle('x', true)");
     101shouldBeEqualToString('element.className', 'x');
     102shouldBeFalse("element.classList.toggle('x', false)");
     103shouldBeEqualToString('element.className', '');
     104shouldBeFalse("element.classList.toggle('x', false)");
     105shouldBeEqualToString('element.className', '');
     106
     107shouldThrowDOMException(function() {
     108    element.classList.toggle('', true);
     109}, DOMException.SYNTAX_ERR);
     110
     111shouldThrowDOMException(function() {
     112    element.classList.toggle('x y', false);
     113}, DOMException.INVALID_CHARACTER_ERR);
    93114
    94115
  • trunk/Source/WebCore/ChangeLog

    r131406 r131408  
     12012-10-15  Pablo Flouret  <pablof@motorola.com>
     2
     3        Add force parameter to DOMTokenList.toggle
     4        https://bugs.webkit.org/show_bug.cgi?id=99375
     5
     6        Reviewed by Darin Adler.
     7
     8        See http://dom.spec.whatwg.org/#dom-domtokenlist-toggle and
     9        https://www.w3.org/Bugs/Public/show_bug.cgi?id=18463
     10
     11        Essentially, the optional boolean force parameter, if present, makes
     12        toggle always add or remove a class.
     13
     14        No new tests, modified fast/dom/HTMLElement/script-tests/class-list.js
     15
     16        * html/DOMTokenList.cpp:
     17        (WebCore::DOMTokenList::toggle):
     18        (WebCore):
     19        * html/DOMTokenList.h:
     20        (DOMTokenList):
     21        * html/DOMTokenList.idl:
     22            New toggle() overload that takes a force parameter and calls
     23            addInternal() or removeInternal() based on it.
     24
    1252012-10-15  Dan Bernstein  <mitz@apple.com>
    226
  • trunk/Source/WebCore/html/DOMTokenList.cpp

    r129779 r131408  
    129129}
    130130
     131bool DOMTokenList::toggle(const AtomicString& token, bool force, ExceptionCode& ec)
     132{
     133    if (!validateToken(token, ec))
     134        return false;
     135
     136    if (force)
     137        addInternal(token);
     138    else
     139        removeInternal(token);
     140
     141    return force;
     142}
     143
    131144void DOMTokenList::addInternal(const AtomicString& token)
    132145{
  • trunk/Source/WebCore/html/DOMTokenList.h

    r129779 r131408  
    5353    void remove(const AtomicString&, ExceptionCode&);
    5454    bool toggle(const AtomicString&, ExceptionCode&);
     55    bool toggle(const AtomicString&, bool force, ExceptionCode&);
    5556
    5657    AtomicString toString() const { return value(); }
  • trunk/Source/WebCore/html/DOMTokenList.idl

    r131172 r131408  
    3232    void add(in DOMString... tokens) raises(DOMException);
    3333    void remove(in DOMString... tokens) raises(DOMException);
    34     boolean toggle(in DOMString token) raises(DOMException);
     34    boolean toggle(in DOMString token, in [Optional] boolean force) raises(DOMException);
    3535
    3636#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
Note: See TracChangeset for help on using the changeset viewer.