| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 | <html><!--Copyright 2010 The Closure Library Authors. All Rights Reserved.Use of this source code is governed by the Apache License, Version 2.0.See the COPYING file for details.--><head>  <title>Stop Event Propagation</title>  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />  <script type="text/javascript" src="../base.js"></script>  <script type="text/javascript">    goog.require('goog.events');    goog.require('goog.events.EventType');  </script>  <style type="text/css">    html, body {    }    #tree ul {      font: normal 12px arial;      list-style: none;      margin: 0px;      padding:0px;    }    #tree ul ul {      padding-left: 36px;    }    html>body #tree span {      position: relative;      top: -2px;    }    #tree div:hover {      background-color: #EEE;    }    #tree {      width: 300px;      height: 800px;      border: 2px solid #EEE;      float: left;    }    #log {      width: 400px;      height: 800px;      border: 2px solid #EEE;      border-left: 0px;      margin-top: 0px;      background-color: #FAFAFA;    }  </style>  <script type="text/javascript">  var depth = 3;  var bredth = 2;  function writeTree(pos, preid) {    if (!pos) pos = 0;    document.write('<ul id="ol' + (preid || '') + '">');    for (var i = 1; i <= bredth; i++) {      document.write('<li id="li-' + (preid || '') + i + '">');      document.write('<div>');      document.write('<input type="checkbox" id="chk1-' +                     (preid || '') + i + '" />');      document.write('<input type="checkbox" id="chk2-' +                     (preid || '') + i + '" />');      document.write('<span>');      document.write((preid || '') + i);      document.write('</span></div>');      if (pos < depth) writeTree(pos+1, (preid || '') + i + '-');      document.write('</li>');    }    document.write('</ul>');  }  // Dirty little buffered log so that logging doesn't affect times.  var start = (new Date).getTime();  var buffer = '';  var timer = null;  function log(str) {    var time = ((new Date) - start) / 1000;    buffer = '[' + time + '] ' + str + '\n' + buffer;    clearTimeout(timer);    timer = setTimeout(sendBuffer, 250);  }  function sendBuffer() {    document.getElementById('log').value = buffer +      document.getElementById('log').value;    buffer = '';  }  function doLoad() {    if (arguments.callee.loaded) return;    arguments.callee.loaded = true;    document.getElementById('log').value = '';    log('LOADED');    log('Adding handlers');    var lis = document.getElementById('tree').getElementsByTagName('li');    for (var i = 0; i < lis.length; i++) {      goog.events.listen(lis[i], goog.events.EventType.MOUSEDOWN,                           handleCapture, true);      goog.events.listen(lis[i], goog.events.EventType.MOUSEDOWN,                           handleBubble, false);    }    log('Finished adding handlers');    goog.events.listen(document.getElementById('log'),          goog.events.EventType.DBLCLICK, function() { this.value = ''; });  }  function handleCapture(e) {    if (e.target.tagName != 'INPUT') {      var id = e.currentTarget.id.replace(/li\-/, '');      if (document.getElementById('chk1-' + id).checked) {        log('Capture - ' + id + ' [Cancelled]');        e.stop();      } else {        log('Capture - ' + id);      }    }  }  function handleBubble(e) {    if (e.target.tagName != 'INPUT') {      var id = e.currentTarget.id.replace(/li\-/, '');      if (document.getElementById('chk2-' + id).checked) {        log('Bubble - ' + id + ' [Cancelled]');        e.stop();      } else {        log('Bubble - ' + id);      }    }  }  goog.events.listen(window, goog.events.EventType.LOAD, doLoad);  </script></head><body id="documentbody">  <h1>Stop Event</h1>  <p><strong>Test the cancelling of capture and bubbling events.</strong> Click  one of the nodes to see the event trace, then use the check boxes to cancel  the capture or bubble at a given branch. (Double click the text area to clear  it)</p>  <div id="tree">  <script type="text/javascript">writeTree();</script>  </div>  <textarea id="log"></textarea></body></html>
 |