dom.html revision f841387cb4997959ecf710977b259b86f959ba48
dafcb997e390efa4423883dafd100c975c4095d6Mark Andrews <p id="clicker1" class="clickers"><a id='clicka'>click1</a></p>
dafcb997e390efa4423883dafd100c975c4095d6Mark Andrews <!-- YUI3 Core //-->
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence <script type="text/javascript" src="/build/yui/yui-debug.js"></script>
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence <!-- Initialization process //-->
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein filter: (window.location.search.match(/[?&]filter=([^&]+)/) || [])[1] || 'min',
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein allowRollup: false,
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence lazyEventFacade: true,
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence logExclude: {
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence yui:true, get: true, 'selector-native': true, loader: true,
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence Dom: true, Selector: true, Node: true, attribute: true, base: true, widget: true}
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence }).use('console', 'test', 'node', 'event-simulate', function (Y) {
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence // creating the console...
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence (new Y.Console()).render();
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence // starting the testing process
0c73b546ecfa49b9d1c8fdb9a48d4cd62176124aDavid Lawrence // add the test cases and suites
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence name: "DOM Event Tests",
0c73b546ecfa49b9d1c8fdb9a48d4cd62176124aDavid Lawrence test_on_with_string: function() {
0c73b546ecfa49b9d1c8fdb9a48d4cd62176124aDavid Lawrence var clicked = false,
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence node = Y.one('#clickcontainer'),
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence el = document.getElementById('clickcontainer');
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence // el.attachEvent('click', function() {
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence // console.log("IE click");
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein // el.addEventListener('click', function() {
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence // console.log("DOM2 click");
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence // }, false);
0e1bef59f060f6442a93cb662b0313e8908500e1Bob Halley // el.onclick = function() {
03e200df5dc283f24a6a349f0b31d3eab26da893Mark Andrews // console.log('DOM0 click');
0e1bef59f060f6442a93cb662b0313e8908500e1Bob Halley Y.on('click', function(e, extra1, extra2) {
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence clicked = true;
03e200df5dc283f24a6a349f0b31d3eab26da893Mark Andrews context = this;
03e200df5dc283f24a6a349f0b31d3eab26da893Mark Andrews ex1 = extra1;
03e200df5dc283f24a6a349f0b31d3eab26da893Mark Andrews ex2 = extra2;
03e200df5dc283f24a6a349f0b31d3eab26da893Mark Andrews }, '#clickcontainer', obj, 2, 3);
03e200df5dc283f24a6a349f0b31d3eab26da893Mark Andrews Y.Assert.isTrue(clicked, "click handler via Y.on didn't work when passed a string.");
03e200df5dc283f24a6a349f0b31d3eab26da893Mark Andrews Y.Assert.areEqual(1, context.a, "context didn't work");
03e200df5dc283f24a6a349f0b31d3eab26da893Mark Andrews Y.Assert.areEqual(2, ex1, "extra arg1 didn't work");
03e200df5dc283f24a6a349f0b31d3eab26da893Mark Andrews Y.Assert.areEqual(3, ex2, "extra arg2 didn't work");
03e200df5dc283f24a6a349f0b31d3eab26da893Mark Andrews test_on_with_node: function() {
0874abad14e3e9ecfc3dc1a1a2b9969f2f027724Mark Andrews var clicked = false,
0c73b546ecfa49b9d1c8fdb9a48d4cd62176124aDavid Lawrence node = Y.one('#clickcontainer');
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence Y.on('click', function(e, extra1, extra2) {
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence clicked = true;
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence context = this;
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence ex1 = extra1;
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein ex2 = extra2;
f8f8a5b3a33f581c6e209c7ded8168e7acc73dfbAutomatic Updater }, node, obj, 2, 3);
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein Y.Event.simulate(document.getElementById('clickcontainer'), 'click');
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence Y.Assert.isTrue(clicked, "click handler via Y.on didn't work when passed a node.");
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence Y.Assert.areEqual(1, context.a, "context didn't work");
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence Y.Assert.areEqual(2, ex1, "extra arg1 didn't work");
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence Y.Assert.areEqual(3, ex2, "extra arg2 didn't work");
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence test_node_on: function() {
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence var clicked = false,
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence node = Y.one('#clickcontainer');
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence node.on('click', function(e, extra1, extra2) {
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence clicked = true;
0307846c714477583e4e377a915829e5afe2ef38David Lawrence context = this;
0307846c714477583e4e377a915829e5afe2ef38David Lawrence ex1 = extra1;
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence ex2 = extra2;
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence }, obj, 2, 3);
1c333c1415bd537463983f046100d170228590ddDavid Lawrence Y.Event.simulate(document.getElementById('clickcontainer'), 'click');
1c333c1415bd537463983f046100d170228590ddDavid Lawrence Y.Assert.isTrue(clicked, "click handler didn't work");
1c333c1415bd537463983f046100d170228590ddDavid Lawrence Y.Assert.areEqual(1, context.a, "context didn't work");
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence Y.Assert.areEqual(2, ex1, "extra arg1 didn't work");
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence Y.Assert.areEqual(3, ex2, "extra arg2 didn't work");
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein test_node_detachall: function() {
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence var clicked = false, overed = false,
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence node = Y.one('#clickcontainer');
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence node.on('click', function(e, extra1, extra2) {
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence clicked = true;
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence node.on('mouseover', function(e, extra1, extra2) {
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence overed = true;
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence Y.Event.simulate(document.getElementById('clickcontainer'), 'click');
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence Y.Assert.isFalse(clicked, "click handler was not removed");
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence Y.Assert.isFalse(overed, "mouseover handler was not removed");
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence test_nodelist_on: function() {
0e1bef59f060f6442a93cb662b0313e8908500e1Bob Halley var clicked = 0,
0e1bef59f060f6442a93cb662b0313e8908500e1Bob Halley nodelist = Y.all('.clickers');
0c73b546ecfa49b9d1c8fdb9a48d4cd62176124aDavid Lawrence nodelist.on('click', function(e, extra1, extra2) {
0e1bef59f060f6442a93cb662b0313e8908500e1Bob Halley context = this;
0e1bef59f060f6442a93cb662b0313e8908500e1Bob Halley ex1 = extra1;
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence ex2 = extra2;
fd50497bbea156911c10ab2cc5a932c30eb709a5Mark Andrews }, obj, 2, 3);
fd50497bbea156911c10ab2cc5a932c30eb709a5Mark Andrews Y.Event.simulate(document.getElementById('clicker1'), 'click');
fd50497bbea156911c10ab2cc5a932c30eb709a5Mark Andrews Y.Assert.areEqual(1, clicked, "click handler didn't work");
9935447b51456f598b45246d0114b8006049244dMark Andrews Y.Assert.areEqual(1, context.a, "context didn't work");
e502b133d630bda0ee64c1e2ce6729d96750d8abMark Andrews Y.Assert.areEqual(2, ex1, "extra arg1 didn't work"); // bug #2528155
fd50497bbea156911c10ab2cc5a932c30eb709a5Mark Andrews Y.Assert.areEqual(3, ex2, "extra arg2 didn't work"); // bug #2528155
fd50497bbea156911c10ab2cc5a932c30eb709a5Mark Andrews Y.Event.simulate(document.getElementById('clicker2'), 'click');
9935447b51456f598b45246d0114b8006049244dMark Andrews Y.Assert.areEqual(2, clicked, "click handler didn't work");
9935447b51456f598b45246d0114b8006049244dMark Andrews Y.Assert.areEqual(1, context.a, "context didn't work");
fd50497bbea156911c10ab2cc5a932c30eb709a5Mark Andrews Y.Assert.areEqual(2, ex1, "extra arg1 didn't work"); // bug #2528155
fd50497bbea156911c10ab2cc5a932c30eb709a5Mark Andrews Y.Assert.areEqual(3, ex2, "extra arg2 didn't work"); // bug #2528155
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence test_y_on_with_nodelist: function() {
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence var clicked = 0,
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein nodelist = Y.all('.clickers');
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence Y.on('click', function(e, extra1, extra2) {
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence context = this;
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence ex1 = extra1;
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence ex2 = extra2;
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence }, nodelist, obj, 2, 3);
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence Y.Event.simulate(document.getElementById('clicker1'), 'click');
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence Y.Assert.areEqual(1, clicked, "click handler didn't work");
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence Y.Assert.areEqual(1, context.a, "context didn't work");
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence Y.Assert.areEqual(2, ex1, "extra arg1 didn't work");
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence Y.Assert.areEqual(3, ex2, "extra arg2 didn't work");
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence Y.Event.simulate(document.getElementById('clicker2'), 'click');
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence Y.Assert.areEqual(2, clicked, "click handler didn't work");
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence Y.Assert.areEqual(1, context.a, "context didn't work");
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence Y.Assert.areEqual(2, ex1, "extra arg1 didn't work");
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence Y.Assert.areEqual(3, ex2, "extra arg2 didn't work");
450e48205fa8d7069efebd8426c5f7378fd3a907David Lawrence test_y_detach_with_nodelist: function() {
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence var clicked = 0,
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence nodelist = Y.all('.clickers'),
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence fn = function(e, extra1, extra2) {
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence context = this;
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence ex1 = extra1;
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence ex2 = extra2;
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence Y.on('click', fn, nodelist, obj, 2, 3);
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence Y.Event.simulate(document.getElementById('clicker1'), 'click');
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence Y.Assert.areEqual(1, clicked, "click handler didn't work");
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence Y.Assert.areEqual(1, context.a, "context didn't work");
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence Y.Assert.areEqual(2, ex1, "extra arg1 didn't work");
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence Y.Assert.areEqual(3, ex2, "extra arg2 didn't work");
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence Y.detach('click', fn, nodelist);
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence Y.Event.simulate(document.getElementById('clicker2'), 'click');
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence Y.Assert.areEqual(1, clicked, "click handler wasn't removed");
Y.on('click', fn, arrayofselectors, obj, 2, 3);
Y.Assert.areEqual(1, clicked, "click handler didn't work");
Y.Assert.areEqual(2, ex1, "extra arg1 didn't work");
Y.Assert.areEqual(3, ex2, "extra arg2 didn't work");
Y.detach('click', fn, arrayofselectors);
Y.Assert.areEqual(1, clicked, "click handler wasn't removed");
Y.on('click', function(e, extra1, extra2) {
Y.Assert.areEqual(1, clicked, "click handler didn't work");
Y.Assert.areEqual(2, ex1, "extra arg1 didn't work");
Y.Assert.areEqual(3, ex2, "extra arg2 didn't work");
Y.Assert.areEqual(2, clicked, "click handler didn't work");
Y.Assert.areEqual(2, ex1, "extra arg1 didn't work");
Y.Assert.areEqual(3, ex2, "extra arg2 didn't work");
Y.on('click', function(e, extra1, extra2) {
}, document.getElementsByTagName('p'), obj, 2, 3);
Y.Assert.areEqual(1, clicked, "click handler didn't work");
Y.Assert.areEqual(2, ex1, "extra arg1 didn't work");
Y.Assert.areEqual(3, ex2, "extra arg2 didn't work");
Y.Assert.areEqual(2, clicked, "click handler didn't work");
Y.Assert.areEqual(2, ex1, "extra arg1 didn't work");
Y.Assert.areEqual(3, ex2, "extra arg2 didn't work");
Y.on('click', function(e, extra1, extra2) {
els = document.getElementsByTagName('p');
Y.on('click', fn, '#clicker1', obj, 2, 3);
Y.detach('click', fn, '#clicker1', obj, 2, 3);
Y.Assert.areEqual(1, clicked, "detach by signature was a failure");
Y.on('click', fn, '#clicker1');
Y.detach('click', fn, '#clicker1');
Y.Assert.areEqual(1, clicked, "detach by signature was a failure");
var node = Y.one("#clicker1");
node.on('click', fn);
node.detach('click', fn);
Y.Assert.areEqual(1, clicked, "detach by signature was a failure");
// Y.on('windowresize', fn);
// Y.detach('windowresize', fn);
// Y.Event.simulate(window, 'resize');
// Y.Assert.areEqual(1, clicked, "detach by signature was a failure");
els = document.getElementsByTagName('p');
var handle = Y.on('click', fn, '.clickers', obj, 2, 3);
// Y.log(handle);
Y.Assert.areEqual(0, clicked, "single detach handle for multiple listeners doesn't work.");
handle = Y.on('available', function() {
div = document.createElement("div");
div.id = 'notthereyet';
this.wait(function() {
Y.Assert.areEqual(0, avail, "onavailable wasn't canceled.");
handle = Y.on('click', function() {
div = document.createElement("div");
div.id = 'notthereyet';
this.wait(function() {
Y.Assert.areEqual(0, avail, "lazy detacher didn't work.");
Y.on('click', function(e) {
Y.on('click', function(e) {
Y.on('click', function(e) {
Y.on('click', function(e) {
Y.Assert.areEqual(1, a);
Y.Assert.areEqual(1, b);
Y.Assert.areEqual(0, c);
Y.Assert.areEqual(1, d);
Y.Event.purgeElement('#clickcontainer', true, 'click');
Y.Assert.areEqual(1, a);
Y.Assert.areEqual(1, b);
Y.Assert.areEqual(0, c);
Y.Assert.areEqual(1, d);
var list = Y.all('.clickers');
list.on('category|click', function(e) {
// Y.all('.foo').detach('category|click');
list.detach('category|click');
Y.Assert.areEqual(2, count);
Y.Assert.areEqual(2, count);
var node = Y.one('#clicker1'),
typePrefix = 'event:' + Y.stamp(el),
// cribbed from the event-base-ie.js conditional loading
imp = Y.config.doc.implementation,
testIE = !imp || !imp.hasFeature('Events', '2.0'),
// custom simulation because Y.Event.simulate attempts to
wrapper = Y.Env.evt.dom_wrappers[key];
config.type = type;
config.target = el;
handle = node.on(['mouseup', 'click'], function (e) {
fired[e.type] = true;
handle = node.on(['mouseup', 'click'], function (e) {
fired[e.type] = true;