customevent.html revision 0771d781138a507b3e657573703f511291640bf3
ac4e70ff8955669341f435bc0a734a17c01af124Mark Andrews<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
59528addd704f8d5757b54e540520f74e588a7c7Automatic Updater<script type="text/javascript" src="/build/yui/yui-debug.js"></script>
bb93c8542756719b53096b9939e4041d0966026fAutomatic Updater<p><input type="button" value="Run Tests" id="btnRun" disabled="true" /></p>
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater //YUI.add("selector-native", function(){});
56874aef380a64a2c183b7c282c3e7a361d67fa1Automatic Updater filter: "debug",
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews // combine: false,
96713299d08c0735c18ebe8772dd2cc1ecd4356aAutomatic Updater useConsole: true,
4b2cb1422c7c600fbc13b1cb06a8b4693bc11af8Mark Andrews onCSS: function(Y) {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews Y.log('CSS is done loading');
96713299d08c0735c18ebe8772dd2cc1ecd4356aAutomatic Updater // logInclude: ['event', 'test']
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews Selector: true,
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews attribute: true,
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews widget: true
aa9c561961e9d877946ebaa8795fa2be054ab7bfEvan Hunt attribute: 'min'
9513a2a6670951f5cf5477fcfec9f933fcaff628Automatic Updater }).use("dump", "test", "console", function(Y) {
2d2dc37599979c83495510f8af8d1756753aa2c5Automatic Updater // Y.Global.on('yui:log', function(e) {
9513a2a6670951f5cf5477fcfec9f933fcaff628Automatic Updater var button = Y.get('#btnRun');
9513a2a6670951f5cf5477fcfec9f933fcaff628Automatic Updater // Set up the page
9513a2a6670951f5cf5477fcfec9f933fcaff628Automatic Updater button.set("disabled", false);
9513a2a6670951f5cf5477fcfec9f933fcaff628Automatic Updater Y.on("click", function() {
9513a2a6670951f5cf5477fcfec9f933fcaff628Automatic Updater // var myConsole = new Y.Console().render();
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater var testEventTarget = new Y.Test.Case({
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews name: "EventTarget tests",
80faf1588895fd26490f82f95a7a1b771df1c324Automatic Updater testAugment: function() {
59528addd704f8d5757b54e540520f74e588a7c7Automatic Updater var fired = false;
db5b7e2cdf150c46e8242d3e2e3ad3f5c7300258Automatic Updater var O = function(id) {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews Y.log('O constructor executed ' + id);
4b2cb1422c7c600fbc13b1cb06a8b4693bc11af8Mark Andrews oOo: function(ok) {
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews // pass configuration info into EventTarget with the following
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews // construct
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson emitFacade: true
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson var o = new O(),
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews handle = o.on('testAugment', function(e, arg1, arg2) {
d145b64cacc8d9cda51f9924ec70cd4661c3e2cfAutomatic Updater Y.Assert.isTrue(this instanceof O);
bb93c8542756719b53096b9939e4041d0966026fAutomatic Updater Y.Assert.isTrue(e instanceof Y.Event.Facade);
2a31bd531072824ef252c18303859d6af7451b00Francis Dupont fired = true;
2a31bd531072824ef252c18303859d6af7451b00Francis Dupont o.fire('testAugment', { foo: 'afoo' }, 1, 2);
885f47576842cf3c569315b9a48bd9f0ca03f203Automatic Updater // if the first argument is not an object, the
ae7e54b14c946e0984c191554db9abb4893f9349Automatic Updater // event facade is moved in front of the args rather
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews // than overwriting existing object.
ae7e54b14c946e0984c191554db9abb4893f9349Automatic Updater o.on('testAugment', function(e, arg1, arg2) {
fe80a4909bf62b602feaf246866e9d29f7654194Automatic Updater o.fire('testAugment', 1, 2);
fe80a4909bf62b602feaf246866e9d29f7654194Automatic Updater testExtend: function() {
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson var fired = false;
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews var Base = function() {
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson Y.log('Base constructor executed');
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews arguments.callee.superclass.constructor.apply(this, arguments);
0df8ead472f207020f8da22a185fe4b945248ab8Automatic Updater base: function() {
e8c7dc2a5ce48f11c07a67c9923eeb8f419ff19fEvan Hunt Y.log('all your base...');
2bb3422dc683c013db7042f5736240de6b86f182Automatic Updater var b = new Base();
59528addd704f8d5757b54e540520f74e588a7c7Automatic Updater b.on('testExtend', function(arg1, arg2) {
0df8ead472f207020f8da22a185fe4b945248ab8Automatic Updater Y.Assert.isTrue(this instanceof Base);
9513a2a6670951f5cf5477fcfec9f933fcaff628Automatic Updater b.fire('testExtend', 1, 2);
bc0a53583d92309bebcf93c408e2f3247ebd3d3cAutomatic Updater testPrefix: function() {
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater var fired1 = false,
59528addd704f8d5757b54e540520f74e588a7c7Automatic Updater fired2 = false;
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater var O = function(id) {
59528addd704f8d5757b54e540520f74e588a7c7Automatic Updater Y.log('O constructor executed ' + id);
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater oOo: function(ok) {
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater // pass configuration info into EventTarget with the following
59528addd704f8d5757b54e540520f74e588a7c7Automatic Updater emitFacade: true,
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater prefix: 'prefix'
7262eb86f2b465822206122921e2f357218f0cfdAutomatic Updater var o = new O();
96ea71632887c58a9d00f47eb318bf76b35903c3Mark Andrews o.on('testPrefix', function(e, arg1, arg2) {
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater Y.Assert.isTrue(this instanceof O);
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater fired1 = true;
4cda4fd158d6ded5586bacea8c388445d99611eaAutomatic Updater o.on('prefix:testPrefix', function(e, arg1, arg2) {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews Y.Assert.isTrue(this instanceof O);
b0d566a2ce0f5a67f537ee7f8233f82f2584cc61Automatic Updater fired2 = true;
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater o.fire('testPrefix', { foo: 'afoo' }, 1, 2);
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews fired1 = false;
f7c88d61cc1ad2435b0b7cfaedfc9d5248c0be25Automatic Updater fired2 = false;
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater o.fire('prefix:testPrefix', { foo: 'afoo' }, 1, 2);
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater testDetachKey: function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington var fired1 = false,
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater fired2 = false;
96713299d08c0735c18ebe8772dd2cc1ecd4356aAutomatic Updater Y.on('handle|test:event', function() {
59528addd704f8d5757b54e540520f74e588a7c7Automatic Updater fired1 = true;
00be0f9f61d4c6bf197d000bfa1a6b7e70ea0866Automatic Updater // one listener
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson Y.fire('test:event');
71bd43eebd9d6e42dbcae62b730f5b6508d5acd8Automatic Updater Y.detach('handle|test:event');
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington fired1 = false;
9513a2a6670951f5cf5477fcfec9f933fcaff628Automatic Updater fired2 = false;
59528addd704f8d5757b54e540520f74e588a7c7Automatic Updater Y.on('handle|test:event', function() {
80faf1588895fd26490f82f95a7a1b771df1c324Automatic Updater fired2 = true;
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson // first lisener detached, added a new listener
e2caa7536302de34de6cc04025abcd53dc3a499aAutomatic Updater Y.fire('test:event');
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews Y.detach('handle|test:event');
59528addd704f8d5757b54e540520f74e588a7c7Automatic Updater fired1 = false;
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater fired2 = false;
4b2cb1422c7c600fbc13b1cb06a8b4693bc11af8Mark Andrews Y.after('handle|test:event', function(arg1) {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews Y.Assert.areEqual('orange', arg1);
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews fired2 = true;
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater // comma or pipe
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater Y.on('handle|test:event', function(arg1) {
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson fired1 = true;
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews // testing on and after order
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson Y.fire('test:event', 'orange');
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews fired1 = false;
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews fired2 = false;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington // spaces after the comma or lack thereof should have
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington // no effect on the addition or removal of listeners
b4cebdb6ccde66a8f3e397a1b90b0cf788519d69Automatic Updater Y.detach('handle|test:event');
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater // added both an on listener and an after listener,
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater // then detached both
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater Y.fire('test:event', 'orange');
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington testDetachAllByKey: function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington var fired1 = false,
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington fired2 = false;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.after('handle|test:event2', function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington fired2 = true;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.on('handle|test:event2', function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington fired1 = true;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.fire('test:event2');
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isFalse(fired1, 'fired1, the after listener should not have fired.');
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isFalse(fired2, 'fired2, the on listener should not have fired.');
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington testChain: function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington var fired1 = false,
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington fired2 = false,
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington fired3 = false,
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington fired4 = false,
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington fired5 = false;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington // should be executed once, after f2
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington var f1 = function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington fired1 = true;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington // should be executed once, before f1
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington var f2 = function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington fired2 = true;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington // should be executed once, different event from f1 and f2
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington var f3 = function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington fired3 = true;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington // detached before fired, should not executed
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington var f4 = function() {
a26b22914b7bf25f065afb8cdef983766dcd672bAutomatic Updater fired4 = true;
ae7e54b14c946e0984c191554db9abb4893f9349Automatic Updater // should fire once, preserving the custom prefix rather
ae7e54b14c946e0984c191554db9abb4893f9349Automatic Updater // than using the configured event target prefix
ae7e54b14c946e0984c191554db9abb4893f9349Automatic Updater var f5 = function() {
ae7e54b14c946e0984c191554db9abb4893f9349Automatic Updater fired5 = true;
ae7e54b14c946e0984c191554db9abb4893f9349Automatic Updater // configure chaining via global default or on the event target
ae7e54b14c946e0984c191554db9abb4893f9349Automatic Updater YUI({ /* chain: true */
ae7e54b14c946e0984c191554db9abb4893f9349Automatic Updater }).use('*', function(Y2) {
ae7e54b14c946e0984c191554db9abb4893f9349Automatic Updater prefix: 'foo',
d4ef65050feac78554addf6e16a06c6e2e0bd331Brian Wellington // without event target prefix manipulation (incomplete now)
d4ef65050feac78554addf6e16a06c6e2e0bd331Brian Wellington // @TODO an error here is throwing an uncaught exception rather than failing the test
d4ef65050feac78554addf6e16a06c6e2e0bd331Brian Wellington // 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');
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews // with event target prefix manipulation ('e' is the same event as 'foo:e',
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington // but 'pre:e' is a different event only accessible by using that exact name)
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrewso.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');
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews Y.Assert.isTrue(fired1); // verifies chaining, on/after order, and adding the event target prefix
6c6a121295b30772cbf3dd75a51fb9d883051a0eAutomatic Updater Y.Assert.isTrue(fired2); // verifies chaining, on/after order, and accepting the prefix in the event name
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isTrue(fired3); // verifies no interaction between events, and prefix manipulation
6c6a121295b30772cbf3dd75a51fb9d883051a0eAutomatic Updater Y.Assert.isFalse(fired4); // verifies detach works (regardless of spaces after comma)
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater Y.Assert.isTrue(fired5); // verifies custom prefix
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater testObjType: function() {
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater 'y:click': function() {f1 = true},
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater 'y:clack': function() {f2 = true}
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington testBubble: function() {
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater var count = 0,
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington emitFacade: true,
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington bubbles: true
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington a = new Y.EventTarget(config),
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington b = new Y.EventTarget(config);
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington // this should not be necessary
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington a.on('test:foo', function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington ret = b.fire('test:foo', {}, b);
a26b22914b7bf25f065afb8cdef983766dcd672bAutomatic Updater b.on('test:foo', function(e) {
a26b22914b7bf25f065afb8cdef983766dcd672bAutomatic Updater ret = b.fire('test:foo', {}, b);
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington testPreventFnOnce: function() {
7adcb4de92bf4383a4c5624c4ed256736d02bc6dMark Andrews var count = 0;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington emitFacade: true,
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington preventedFn: function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isTrue(this instanceof YUI);
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.on('y:foo1', function(e) {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.on('y:foo1', function(e) {
a26b22914b7bf25f065afb8cdef983766dcd672bAutomatic Updater testDetachHandle: function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington var count = 0, handle, handle2;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington emitFacade: true
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.on('y:foo', function(e) {
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater handle = Y.on('y:foo', function(e) {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington count += 100;
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater handle2 = Y.on('y:foo', function(e) {
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater count += 1000;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington var handle3 = Y.on('y:click', function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.on('y:foo', function(e) {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.on('y:foo', function(e) {
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater testBroadcast: function() {
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater var o = new Y.EventTarget(), s1, s2, s3, s4;
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater emitFacade: true,
b4cebdb6ccde66a8f3e397a1b90b0cf788519d69Automatic Updater Y.on('y:foo2', function() {
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater Y.log('Y foo2 executed');
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Global.on('y:foo2', function() {
532d27b39244fadfcf8d8b4593f4c65434c9c664Automatic Updater Y.log('GLOBAL foo2 executed');
d4ef65050feac78554addf6e16a06c6e2e0bd331Brian Wellington emitFacade: true,
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater Y.on('y:bar', function() {
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater Y.log('Y bar executed');
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater Y.Global.on('y:bar', function() {
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater Y.log('GLOBAL bar executed');
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater Y.Test.Runner.add(testEventTarget);
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater // filter: "debug",
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater // combine: false,
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington // useConsole: true,
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater // logExclude: {Dom: true, Selector: true, Node: true, attribute: true, base: true, loader: true, get: true, widget: true}
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater // }).use("datasource", function(Y) {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington // Y.log('loaded datasource: ' + Y.DataSource);