tor-browser

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

035.html (2700B)


      1 <!doctype html>
      2 <html>
      3  <head>
      4    <title>Drag and drop passing over body with cancelling dragenter</title>
      5    <style type="text/css">
      6 div:first-child {
      7  height: 100px;
      8  width: 100px;
      9  background: orange;
     10  display: inline-block;
     11 }
     12 div:first-child + div {
     13  height: 100px;
     14  width: 100px;
     15  margin-left: 200px;
     16  background: blue;
     17  display: inline-block;
     18 }
     19    </style>
     20    <script type="text/javascript">
     21 //this test enforces the following spec statement:
     22 //"if this immediate user selection is not the same as the current target element"
     23 window.onload = function () {
     24  var drag = document.getElementsByTagName('div')[0], sequence = [];
     25  drag.ondragstart = function (e) {
     26    e.dataTransfer.setData('text','hello');
     27    e.dataTransfer.effectAllowed = 'copy';
     28  };
     29  drag.ondragenter = function (e) {
     30    sequence[sequence.length] = 'drag.dragenter';
     31  };
     32  drag.ondragover = function (e) {
     33    if( sequence[sequence.length-1] != 'drag.dragover' ) {
     34      sequence[sequence.length] = 'drag.dragover';
     35    }
     36  };
     37  var drop = document.getElementsByTagName('div')[1];
     38  drop.ondragenter = function (e) {
     39    e.preventDefault();
     40    sequence[sequence.length] = 'drop.dragenter';
     41  };
     42  drop.ondragover = function (e) {
     43    e.preventDefault();
     44    if( sequence[sequence.length-1] != 'drop.dragover' ) {
     45      sequence[sequence.length] = 'drop.dragover';
     46    }
     47  };
     48  drop.ondrop = function (e) {
     49    e.preventDefault();
     50    sequence[sequence.length] = 'drop.ondrop';
     51  };
     52  document.body.ondragenter = function (e) {
     53    sequence[sequence.length] = ( e.target == this ) ? 'body.dragenter' : 'bubble.dragenter';
     54    if( e.target != this ) { return; }
     55    e.preventDefault(); //don't cancel when it bubbles from the child elements
     56  };
     57  document.body.ondragover = function (e) {
     58    if( e.target != this ) { return; }
     59    if( sequence[sequence.length-1] != 'body.dragover' ) {
     60      sequence[sequence.length] = 'body.dragover';
     61    }
     62  };
     63  drag.ondragend = function (e) {
     64    sequence = sequence.join('=&gt;')
     65    var desiredsequence = (['drag.dragenter','bubble.dragenter','body.dragenter','body.dragover','drop.dragenter','bubble.dragenter','drop.dragover','drop.ondrop']).join('=&gt;')
     66    if( sequence == desiredsequence ) {
     67      document.getElementsByTagName('div')[2].innerHTML = 'PASS';
     68    } else {
     69      document.getElementsByTagName('div')[2].innerHTML = 'FAIL, got:<br>'+sequence+'<br>instead of:<br>'+desiredsequence;
     70    }
     71  };
     72 };
     73    </script>
     74  </head>
     75  <body>
     76 
     77    <div draggable="true"></div><div></div>
     78    <div>&nbsp;</div>
     79    <p>Drag the orange square onto the blue square and release it.</p>
     80    <noscript><p>Enable JavaScript and reload</p></noscript>
     81 
     82  </body>
     83 </html>