| <!DOCTYPE html> |
| <title>CSSOM View - scrollLeft/scrollTop considers writing-mode and css direction</title> |
| <meta charset="utf-8"> |
| <link rel="author" title="Cathie Chen" href="mailto:cathiechen@igalia.com"> |
| <link rel="help" href="https://drafts.csswg.org/cssom-view/#scrolling-area-origin"> |
| <link rel="help" href="https://drafts.csswg.org/cssom-view/#scroll-an-element"> |
| <meta name="assert" content="This test verifies the assigned and extreme values of the scroll positions of an element."> |
| |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| |
| <head> |
| <style> |
| .scroller { |
| overflow: scroll; |
| width: 150px; |
| height: 100px; |
| } |
| .content { |
| width: 300px; |
| height: 400px; |
| } |
| .horizontal-tb { |
| writing-mode: horizontal-tb; |
| } |
| .vertical-lr { |
| writing-mode: vertical-lr; |
| } |
| .vertical-rl { |
| writing-mode: vertical-rl; |
| } |
| .rtl { |
| direction: rtl; |
| } |
| </style> |
| </head> |
| |
| <body> |
| <h1>scrollLeft/scrollTop</h1> |
| <h2>writing-mode: horizontal-tb;</h2> |
| <div id="target_scroller" class="scroller horizontal-tb ltr"> |
| <div id="target_content" class="content"></div> |
| </div> |
| <div class="scroller horizontal-tb rtl"> |
| <div class="content"></div> |
| </div> |
| <h2>writing-mode: vertical-lr;</h2> |
| <div class="scroller vertical-lr ltr"> |
| <div class="content"></div> |
| </div> |
| <div class="scroller vertical-lr rtl"> |
| <div class="content"></div> |
| </div> |
| <h2>writing-mode: vertical-rl;</h2> |
| <div class="scroller vertical-rl ltr"> |
| <div class="content"></div> |
| </div> |
| <div class="scroller vertical-rl rtl"> |
| <div class="content"></div> |
| </div> |
| |
| <script> |
| var scroller = document.querySelector("#target_scroller"); |
| var content = document.querySelector("#target_content"); |
| var scrollbar_width = scroller.offsetWidth - scroller.clientWidth; |
| var scroller_width = scroller.offsetWidth; |
| var scroller_height = scroller.offsetHeight; |
| var content_width = content.offsetWidth; |
| var content_height = content.offsetHeight; |
| |
| expectedScrollTop = content_height - scroller_height + scrollbar_width; |
| expectedScrollLeft = content_width - scroller_width + scrollbar_width; |
| |
| const epsilon = 0.5; |
| test(() => { |
| var scroller = document.querySelector(".horizontal-tb.ltr"); |
| assert_approx_equals(scroller.scrollLeft, 0, epsilon, "initial scrollLeft"); |
| assert_approx_equals(scroller.scrollTop, 0, epsilon, "initial scrollTop"); |
| scroller.scrollLeft = 2*content_width; |
| scroller.scrollTop = 2*content_height; |
| assert_approx_equals(scroller.scrollLeft, expectedScrollLeft, epsilon, "ending scrollLeft"); |
| assert_approx_equals(scroller.scrollTop, expectedScrollTop, epsilon, "ending scrollTop"); |
| }, `writing-mode:horizontal-tb; direction:ltr`); |
| |
| test(() => { |
| var scroller = document.querySelector(".horizontal-tb.rtl"); |
| assert_approx_equals(scroller.scrollLeft, 0, epsilon, "initial scrollLeft"); |
| assert_approx_equals(scroller.scrollTop, 0, epsilon, "initial scrollTop"); |
| scroller.scrollLeft = -2*content_width; |
| scroller.scrollTop = 2*content_height; |
| assert_approx_equals(scroller.scrollLeft, -expectedScrollLeft, epsilon, "ending scrollLeft"); |
| assert_approx_equals(scroller.scrollTop, expectedScrollTop, epsilon, "ending scrollTop"); |
| }, `writing-mode:horizontal-tb; direction:rtl`); |
| |
| test(() => { |
| var scroller = document.querySelector(".vertical-lr.ltr"); |
| assert_approx_equals(scroller.scrollLeft, 0, epsilon, "initial scrollLeft"); |
| assert_approx_equals(scroller.scrollTop, 0, epsilon, "initial scrollTop"); |
| scroller.scrollLeft = 2*content_width; |
| scroller.scrollTop = 2*content_height; |
| assert_approx_equals(scroller.scrollLeft, expectedScrollLeft, epsilon, "ending scrollLeft"); |
| assert_approx_equals(scroller.scrollTop, expectedScrollTop, epsilon, "ending scrollTop"); |
| }, `writing-mode:vertical-lr; direction:ltr`); |
| |
| test(() => { |
| var scroller = document.querySelector(".vertical-lr.rtl"); |
| assert_approx_equals(scroller.scrollLeft, 0, epsilon, "initial scrollLeft"); |
| assert_approx_equals(scroller.scrollTop, 0, epsilon, "initial scrollTop"); |
| scroller.scrollLeft = 2*content_width; |
| scroller.scrollTop = -2*content_height; |
| assert_approx_equals(scroller.scrollLeft, expectedScrollLeft, epsilon, "ending scrollLeft"); |
| assert_approx_equals(scroller.scrollTop, -expectedScrollTop, epsilon, "ending scrollTop"); |
| }, `writing-mode:vertical-lr; direction:rtl`); |
| |
| test(() => { |
| var scroller = document.querySelector(".vertical-rl.ltr"); |
| assert_approx_equals(scroller.scrollLeft, 0, epsilon, "initial scrollLeft"); |
| assert_approx_equals(scroller.scrollTop, 0, epsilon, "initial scrollTop"); |
| scroller.scrollLeft = -2*content_width; |
| scroller.scrollTop = 2*content_height; |
| assert_approx_equals(scroller.scrollLeft, -expectedScrollLeft, epsilon, "ending scrollLeft"); |
| assert_approx_equals(scroller.scrollTop, expectedScrollTop, epsilon, "ending scrollTop"); |
| }, `writing-mode:vertical-rl; direction:ltr`); |
| |
| test(() => { |
| var scroller = document.querySelector(".vertical-rl.rtl"); |
| assert_approx_equals(scroller.scrollLeft, 0, epsilon, "initial scrollLeft"); |
| assert_approx_equals(scroller.scrollTop, 0, epsilon, "initial scrollTop"); |
| scroller.scrollLeft = -2*content_width; |
| scroller.scrollTop = -2*content_height; |
| assert_approx_equals(scroller.scrollLeft, -expectedScrollLeft, epsilon, "ending scrollLeft"); |
| assert_approx_equals(scroller.scrollTop, -expectedScrollTop, epsilon, "ending scrollTop"); |
| }, `writing-mode:vertical-rl; direction:rtl`); |
| </script> |
| </body> |
| </html> |