customevent.html revision f21a4beaef1cd810a2ca714086ee81ef7753811f
bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Bosch<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch<script type="text/javascript" src="/build/yui/yui-debug.js"></script>
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch<p><input type="button" value="Run Tests" id="btnRun" disabled="true" /></p>
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch //YUI.add("selector-native", function(){});
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch filter: "debug",
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch // combine: false,
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch useConsole: true,
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch onCSS: function(Y) {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch Y.log('CSS is done loading');
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch // logInclude: ['event', 'test']
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch logExclude: {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch Selector: true,
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch attribute: true, base: true, event: true, widget: true},
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch attribute: 'min'
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch }).use("dump", "test", "console", function(Y) {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch // Y.Global.on('yui:log', function(e) {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch var button = Y.get('#btnRun');
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch // Set up the page
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch button.set("disabled", false);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch Y.on("click", function() {
499ca6dc5d746fd7a7efc6d497deede89553669fStephan Bosch var myConsole = new Y.Console().render();
499ca6dc5d746fd7a7efc6d497deede89553669fStephan Bosch var testEventTarget = new Y.Test.Case({
499ca6dc5d746fd7a7efc6d497deede89553669fStephan Bosch name: "EventTarget tests",
499ca6dc5d746fd7a7efc6d497deede89553669fStephan Bosch testAugment: function() {
499ca6dc5d746fd7a7efc6d497deede89553669fStephan Bosch var fired = false;
499ca6dc5d746fd7a7efc6d497deede89553669fStephan Bosch var O = function(id) {
499ca6dc5d746fd7a7efc6d497deede89553669fStephan Bosch Y.log('O constructor executed ' + id);
499ca6dc5d746fd7a7efc6d497deede89553669fStephan Bosch oOo: function(ok) {
5d5ad796fc34170333bb52c05614425a0dd7e182Stephan Bosch // pass configuration info into EventTarget with the following
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch emitFacade: true
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch var o = new O(),
5d5ad796fc34170333bb52c05614425a0dd7e182Stephan Bosch handle = o.on('testAugment', function(e, arg1, arg2) {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch Y.Assert.isTrue(this instanceof O);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch fired = true;
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch o.fire('testAugment', { foo: 'afoo' }, 1, 2);
6d76b99eb61df1cbe13cf76d0aac81507cbd1d21Stephan Bosch // if the first argument is not an object, the
6d76b99eb61df1cbe13cf76d0aac81507cbd1d21Stephan Bosch // event facade is moved in front of the args rather
6d76b99eb61df1cbe13cf76d0aac81507cbd1d21Stephan Bosch // than overwriting existing object.
6d76b99eb61df1cbe13cf76d0aac81507cbd1d21Stephan Bosch o.on('testAugment', function(e, arg1, arg2) {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch o.fire('testAugment', 1, 2);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch testExtend: function() {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch var fired = false;
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch var Base = function() {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch Y.log('Base constructor executed');
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch arguments.callee.superclass.constructor.apply(this, arguments);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch base: function() {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch Y.log('all your base...');
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch var b = new Base();
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch b.on('testExtend', function(arg1, arg2) {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch Y.Assert.isTrue(this instanceof Base);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch fired = true;
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch b.fire('testExtend', 1, 2);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch testPrefix: function() {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch var fired1 = false,
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch fired2 = false;
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch var O = function(id) {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch Y.log('O constructor executed ' + id);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch oOo: function(ok) {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch // pass configuration info into EventTarget with the following
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch emitFacade: true,
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch prefix: 'prefix'
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch var o = new O();
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch o.on('testPrefix', function(e, arg1, arg2) {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch Y.Assert.isTrue(this instanceof O);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch fired1 = true;
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch o.on('prefix:testPrefix', function(e, arg1, arg2) {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch Y.Assert.isTrue(this instanceof O);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch fired2 = true;
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch o.fire('testPrefix', { foo: 'afoo' }, 1, 2);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch fired1 = false;
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch fired2 = false;
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch o.fire('prefix:testPrefix', { foo: 'afoo' }, 1, 2);
Y.Assert.isTrue(fired2);
Y.on('handle|test:event', function() {
Y.fire('test:event');
Y.Assert.isTrue(fired1);
Y.Assert.isFalse(fired2);
Y.detach('handle|test:event');
Y.on('handle|test:event', function() {
Y.fire('test:event');
Y.Assert.isFalse(fired1);
Y.Assert.isTrue(fired2);
Y.detach('handle|test:event');
Y.after('handle|test:event', function(arg1) {
Y.Assert.areEqual('orange', arg1);
Y.Assert.isTrue(fired1);
Y.on('handle|test:event', function(arg1) {
Y.Assert.areEqual('orange', arg1);
Y.Assert.isFalse(fired2);
Y.fire('test:event', 'orange');
Y.detach('handle|test:event');
Y.fire('test:event', 'orange');
Y.Assert.isFalse(fired1);
Y.Assert.isFalse(fired2);
Y.after('handle|test:event2', function() {
Y.on('handle|test:event2', function() {
Y.detach('handle|*');
Y.fire('test:event2');
Y.Assert.isFalse(fired1, 'fired1, the after listener should not have fired.');
Y.Assert.isFalse(fired2, 'fired2, the on listener should not have fired.');
Y.Assert.isTrue(fired2);
Y.Assert.isFalse(fired1);
base:'/build/'
var o = new Y2.EventTarget({
// Y2.after('p:e', f1).on('p:e', f2).on('p:e2', f3).on('detach, p:e', f4).detach('detach, p:e').fire('p:e').fire('p:e2');
o.after('e', f1).on('foo:e', f2).on('foo:e2', f3).on('detach, e', f4).detach('detach,e').fire('foo:e').fire('e2').on('pre:e', f5).fire('pre:e');
Y.Assert.isTrue(fired2); // verifies chaining, on/after order, and accepting the prefix in the event name
Y.Assert.isTrue(fired3); // verifies no interaction between events, and prefix manipulation
Y.Assert.isFalse(fired4); // verifies detach works (regardless of spaces after comma)
Y.Assert.isTrue(fired5); // verifies custom prefix
Y.on({
Y.fire('y:click');
Y.fire('y:clack');
Y.Assert.isTrue(f1);
Y.Assert.isTrue(f2);
a = new Y.EventTarget(config),
b = new Y.EventTarget(config);
b.addTarget(a);
b.publish('test:foo');
a.on('test:foo', function() {
ret = b.fire('test:foo');
Y.Assert.areEqual(1, count);
Y.Assert.isTrue(ret);
b.on('test:foo', function(e) {
ret = b.fire('test:foo');
Y.Assert.areEqual(1, count);
Y.Assert.isFalse(ret);
Y.publish('y:foo1', {
Y.Assert.isTrue(this instanceof YUI);
Y.on('y:foo1', function(e) {
Y.on('y:foo1', function(e) {
Y.fire('y:foo1');
Y.Assert.areEqual(1, count);
Y.publish('y:foo', {
Y.on('y:foo', function(e) {
handle = Y.on('y:foo', function(e) {
handle2 = Y.on('y:foo', function(e) {
Y.detach(handle);
Y.fire('y:foo');
Y.Assert.areEqual(1, count);
var handle3 = Y.on('y:click', function() {
Y.fire('y:click');
Y.fire('y:click');
Y.on('y:foo', function(e) {
Y.on('y:foo', function(e) {
Y.detachAll('y:click');
Y.fire('y:click');
Y.Assert.areEqual(0, count);
var o = new Y.EventTarget(), s1, s2, s3, s4;
o.publish('y:foo2', {
Y.on('y:foo2', function() {
Y.log('Y foo2 executed');
Y.Global.on('y:foo2', function() {
Y.log('GLOBAL foo2 executed');
o.fire('y:foo2');
Y.Assert.areEqual(1, s1);
Y.Assert.areNotEqual(1, s2);
o.publish('y:bar', {
Y.on('y:bar', function() {
Y.log('Y bar executed');
Y.Global.on('y:bar', function() {
Y.log('GLOBAL bar executed');
o.fire('y:bar');
Y.Assert.areEqual(1, s3);
Y.Assert.areEqual(1, s4);
Y.Test.Runner.add(testEventTarget);
base: "/build/",