<html>
<!--
Copyright 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>