tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

view-timeline-source.tentative.html (2228B)


      1 <!DOCTYPE html>
      2 <html id="top">
      3 <meta charset="utf-8">
      4 <title>View timeline source</title>
      5 <link rel="help" href="https://drafts.csswg.org/scroll-animations-1/#viewtimeline-interface">
      6 <script src="/resources/testharness.js"></script>
      7 <script src="/resources/testharnessreport.js"></script>
      8 <script src="/web-animations/testcommon.js"></script>
      9 <style>
     10 #outer {
     11  height: 400px;
     12  width: 400px;
     13  overflow: clip;
     14 }
     15 
     16 #inner {
     17  height: 300px;
     18  width: 300px;
     19  overflow: clip;
     20 }
     21 
     22 #outer.scroller,
     23 #inner.scroller {
     24  overflow: scroll;
     25 }
     26 
     27 #spacer {
     28  height: 1000px;
     29 }
     30 
     31 #target {
     32  background: green;
     33  height: 40px;
     34  width: 40px;
     35 }
     36 </style>
     37 <body>
     38  <div id="outer" class="scroller">
     39    <div id="inner" class="scroller">
     40      <div id="target"></div>
     41      <div id="spacer"></div>
     42    </div>
     43  </div>
     44 </body>
     45 <script>
     46 'use strict';
     47 
     48 function resetScrollers() {
     49  inner.classList.add('scroller');
     50  outer.classList.add('scroller');
     51 }
     52 
     53 function assert_source_id(viewTimeline, expected) {
     54  const source = viewTimeline.source;
     55  assert_true(!!source, 'No source');
     56  assert_equals(source.id, expected);
     57 }
     58 
     59 promise_test(async t => {
     60  t.add_cleanup(resetScrollers);
     61  const viewTimeline = new ViewTimeline({ subject: target });
     62  assert_equals(viewTimeline.subject, target);
     63  assert_source_id(viewTimeline, 'inner');
     64 
     65  inner.classList.remove('scroller');
     66  assert_source_id(viewTimeline, 'outer');
     67 
     68  outer.classList.remove('scroller');
     69  assert_source_id(viewTimeline, 'top');
     70 }, 'Default source for a View timeline is the nearest scroll ' +
     71   'ancestor to the subject');
     72 
     73 promise_test(async t => {
     74  t.add_cleanup(resetScrollers);
     75  const viewTimeline =
     76      new ViewTimeline({ source: outer, subject: target });
     77  assert_equals(viewTimeline.subject, target);
     78  assert_source_id(viewTimeline, 'inner');
     79 }, 'View timeline ignores explicitly set source');
     80 
     81 promise_test(async t => {
     82  t.add_cleanup(resetScrollers);
     83  const viewTimeline =
     84      new ViewTimeline({ subject: target });
     85  assert_equals(viewTimeline.subject, target);
     86  assert_source_id(viewTimeline, 'inner');
     87 
     88  target.style = "display: none";
     89  assert_equals(viewTimeline.source, null);
     90 
     91 }, 'View timeline source is null when display:none');
     92 
     93 </script>
     94 </html>