| <!DOCTYPE html> |
| <meta charset=utf-8> |
| <title>The details element</title> |
| <link rel="author" title="Denis Ah-Kang" href="mailto:denis@w3.org"> |
| <link rel=help href="https://html.spec.whatwg.org/multipage/#the-details-element"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <div id="log"></div> |
| <details id=details1> |
| <summary>Lorem ipsum</summary> |
| <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> |
| </details> |
| <details id=details2 open> |
| <summary>Lorem ipsum</summary> |
| <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> |
| </details> |
| <details id=details3 style="display:none;"> |
| <summary>Lorem ipsum</summary> |
| <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> |
| </details> |
| <details id=details4> |
| </details> |
| <details id=details6> |
| <summary>Lorem ipsum</summary> |
| <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> |
| </details> |
| <script> |
| var t1 = async_test("Adding open to 'details' should fire a toggle event at the 'details' element"), |
| t2 = async_test("Removing open from 'details' should fire a toggle event at the 'details' element"), |
| t3 = async_test("Adding open to 'details' (display:none) should fire a toggle event at the 'details' element"), |
| t4 = async_test("Adding open from 'details' (no children) should fire a toggle event at the 'details' element"), |
| t6 = async_test("Calling open twice on 'details' fires only one toggle event"), |
| details1 = document.getElementById('details1'), |
| details2 = document.getElementById('details2'), |
| details3 = document.getElementById('details3'), |
| details4 = document.getElementById('details4'), |
| details6 = document.getElementById('details6'), |
| loop=false; |
| |
| function testEvent(evt) { |
| assert_true(evt.isTrusted, "event is trusted"); |
| assert_false(evt.bubbles, "event doesn't bubble"); |
| assert_false(evt.cancelable, "event is not cancelable"); |
| assert_equals(Object.getPrototypeOf(evt), Event.prototype, "Prototype of toggle event is Event.prototype"); |
| } |
| |
| details1.ontoggle = t1.step_func_done(function(evt) { |
| assert_true(details1.open); |
| testEvent(evt) |
| }); |
| details1.open = true; // opens details1 |
| |
| details2.ontoggle = t2.step_func_done(function(evt) { |
| assert_false(details2.open); |
| testEvent(evt); |
| }); |
| details2.open = false; // closes details2 |
| |
| details3.ontoggle = t3.step_func_done(function(evt) { |
| assert_true(details3.open); |
| testEvent(evt); |
| }); |
| details3.open = true; // opens details3 |
| |
| details4.ontoggle = t4.step_func_done(function(evt) { |
| assert_true(details4.open); |
| testEvent(evt); |
| }); |
| details4.open = true; // opens details4 |
| |
| async_test(function(t) { |
| var details5 = document.createElement("details"); |
| details5.ontoggle = t.step_func_done(function(evt) { |
| assert_true(details5.open); |
| testEvent(evt); |
| }) |
| details5.open = true; |
| }, "Adding open to 'details' (not in the document) should fire a toggle event at the 'details' element"); |
| |
| details6.open = true; |
| details6.open = false; |
| details6.ontoggle = t6.step_func(function() { |
| if (loop) { |
| assert_unreached("toggle event fired twice"); |
| } else { |
| loop = true; |
| } |
| }); |
| setTimeout(t6.step_func(function() { |
| assert_true(loop); |
| t6.done(); |
| }), 0); |
| </script> |