customevent.html revision a52b18b7d9a83c1bf7e94949c160ec4b679ae713
fb84f9014321c5f33c4682de5661b579fcde318fAndreas Gustafsson<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews<html>
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews<head>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<title>YUI Event Tests</title>
fb84f9014321c5f33c4682de5661b579fcde318fAndreas Gustafsson<script type="text/javascript" src="/build/yui/yui-debug.js"></script>
fb84f9014321c5f33c4682de5661b579fcde318fAndreas Gustafsson</head>
fb84f9014321c5f33c4682de5661b579fcde318fAndreas Gustafsson
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<body class="yui-skin-sam">
af5073d03288a53b646ec3b807ac25ced64d7879Mark Andrews<h1>Event Tests</h1>
af5073d03288a53b646ec3b807ac25ced64d7879Mark Andrews<p><input type="button" value="Run Tests" id="btnRun" disabled="true" /></p>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
af5073d03288a53b646ec3b807ac25ced64d7879Mark Andrews
af5073d03288a53b646ec3b807ac25ced64d7879Mark Andrews<script type="text/javascript">
af5073d03288a53b646ec3b807ac25ced64d7879Mark Andrews
af5073d03288a53b646ec3b807ac25ced64d7879Mark Andrews(function() {
fb84f9014321c5f33c4682de5661b579fcde318fAndreas Gustafsson //YUI.add("selector-native", function(){});
00124ad0406365d39f4b2d1011ef6a76706e9df0Mark Andrews YUI({
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein base: "/build/",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein filter: "debug",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein combine: false,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein useConsole: true,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // logInclude: ['event', 'test']
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein logExclude: {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Dom: true,
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews Selector: true,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Node: true,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein yui: true,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein get: true,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein attribute: true, base: true, event: true, widget: true},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein filters: {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein base: 'raw',
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein dom: null,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein attribute: 'min'
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }).use("dump", "test", "console", function(Y) {
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var button = Y.get('#btnRun');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // Set up the page
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein button.set("disabled", false);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.on("click", function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Test.Runner.run();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }, button);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var myConsole = new Y.Console().render();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var testEventTarget = new Y.Test.Case({
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein name: "Event.Target tests",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein testAugment: function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var fired = false;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var O = function(id) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein this.id = id;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.log('O constructor executed ' + id);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein O.prototype = {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein oOo: function(ok) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.log('oOo');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // pass configuration info into Event.Target with the following
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // construct
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.augment(O, Y.Event.Target, null, null, {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein emitFacade: true
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var o = new O(),
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein handle = o.on('testAugment', function(e, arg1, arg2) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(this instanceof O);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(e instanceof Y.Event.Facade);
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews Y.Assert.isTrue(e.foo === 'afoo');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(e.details[1] === 1);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(arg1 === 1);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(arg2 === 2);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired = true;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
61e1dc26d62c2a0059e3ca7efe2ad0f4a5b8df92Mark Andrews o.fire('testAugment', { foo: 'afoo' }, 1, 2);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(fired);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein handle.detach();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // if the first argument is not an object, the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // event facade is moved in front of the args rather
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // than overwriting existing object.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein o.on('testAugment', function(e, arg1, arg2) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.areEqual(1, arg1);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.areEqual(2, arg2);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein o.fire('testAugment', 1, 2);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein testExtend: function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var fired = false;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var Base = function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.log('Base constructor executed');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein arguments.callee.superclass.constructor.apply(this, arguments);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.extend(Base, Y.Event.Target, {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein base: function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.log('all your base...');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var b = new Base();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein b.on('testExtend', function(arg1, arg2) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(this instanceof Base);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(arg1 === 1);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(arg2 === 2);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired = true;
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein b.fire('testExtend', 1, 2);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(fired);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein testPrefix: function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var fired1 = false,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired2 = false;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var O = function(id) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein this.id = id;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.log('O constructor executed ' + id);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein O.prototype = {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein oOo: function(ok) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.log('oOo');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // pass configuration info into Event.Target with the following
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // construct
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.augment(O, Y.Event.Target, null, null, {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein emitFacade: true,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein prefix: 'prefix'
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var o = new O();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein o.on('testPrefix', function(e, arg1, arg2) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(this instanceof O);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired1 = true;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein o.on('prefix:testPrefix', function(e, arg1, arg2) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(this instanceof O);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired2 = true;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein o.fire('testPrefix', { foo: 'afoo' }, 1, 2);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(fired1);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // Y.Assert.isTrue(fired2);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired1 = false;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired2 = false;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein o.fire('prefix:testPrefix', { foo: 'afoo' }, 1, 2);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(fired1);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(fired2);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein testDetachKey: function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var fired1 = false,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired2 = false;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.on('handle, test:event', function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired1 = true;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // one listener
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.fire('test:event');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(fired1);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isFalse(fired2);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.detach('handle, test:event');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired1 = false;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired2 = false;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.on('handle, test:event', function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired2 = true;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // first lisener detached, added a new listener
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.fire('test:event');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isFalse(fired1);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(fired2);
61e1dc26d62c2a0059e3ca7efe2ad0f4a5b8df92Mark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.detach('handle,test:event');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired1 = false;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired2 = false;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.after('handle, test:event', function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(fired1);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired2 = true;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // comma or pipe
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.on('handle|test:event', function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isFalse(fired2);
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews fired1 = true;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // testing on and after order
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.fire('test:event');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired1 = false;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired2 = false;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // spaces after the comma or lack thereof should have
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // no effect on the addition or removal of listeners
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.detach('handle,test:event');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // added both an on listener and an after listener,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // then detached both
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.fire('test:event');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isFalse(fired1);
fb84f9014321c5f33c4682de5661b579fcde318fAndreas Gustafsson Y.Assert.isFalse(fired2);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein testChain: function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var fired1 = false,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired2 = false,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired3 = false,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired4 = false,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired5 = false;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // should be executed once, after f2
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var f1 = function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(fired2);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired1 = true;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein };
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // should be executed once, before f1
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var f2 = function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isFalse(fired1);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired2 = true;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein };
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // should be executed once, different event from f1 and f2
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var f3 = function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired3 = true;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein };
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // detached before fired, should not executed
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var f4 = function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired4 = true;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein };
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // should fire once, preserving the custom prefix rather
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // than using the configured event target prefix
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var f5 = function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fired5 = true;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein };
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // configure chaining via global default or on the event target
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein YUI({ /* chain: true */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein base:'/build/'
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }).use('*', function(Y2) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var o = new Y2.EventTarget({
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein prefix: 'foo',
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein chain : true
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // without event target prefix manipulation (incomplete now)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // @TODO an error here is throwing an uncaught exception rather than failing the test
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // 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');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // with event target prefix manipulation ('e' is the same event as 'foo:e',
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // but 'pre:e' is a different event only accessible by using that exact name)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeino.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');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(fired1); // verifies chaining, on/after order, and adding the event target prefix
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(fired2); // verifies chaining, on/after order, and accepting the prefix in the event name
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(fired3); // verifies no interaction between events, and prefix manipulation
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isFalse(fired4); // verifies detach works (regardless of spaces after comma)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(fired5); // verifies custom prefix
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein testObjType: function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var f1, f2;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.on({
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein 'y:click': function() {f1 = true},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein 'y:clack': function() {f2 = true}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.fire('y:click');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.fire('y:clack');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(f1);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(f2);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein testPreventFnOnce: function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var count = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.publish('y:foo1', {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein emitFacade: true,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein preventedFn: function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein count++;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.isTrue(this instanceof YUI);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.on('y:foo1', function(e) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein e.preventDefault();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.on('y:foo1', function(e) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein e.preventDefault();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.fire('y:foo1');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.areEqual(1, count);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein testDetachHandle: function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var count = 0, handle, handle2;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.publish('y:foo', {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein emitFacade: true,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.on('y:foo', function(e) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein count++;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein handle2.detach();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein handle = Y.on('y:foo', function(e) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein count += 100;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein handle2 = Y.on('y:foo', function(e) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein count += 1000;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.detach(handle);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.fire('y:foo');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.areEqual(1, count);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein count = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var handle3 = Y.on('y:click', function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein count++;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein handle3.detach();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.fire('y:click');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.fire('y:click');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein count = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.on('y:foo', function(e) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein count++;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.on('y:foo', function(e) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein count++;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.detachAll('y:click');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.fire('y:click');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.areEqual(0, count);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein testBroadcast: function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var o = new Y.EventTarget(), s1, s2, s3, s4;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein o.publish('y:foo2', {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein emitFacade: true,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein broadcast: 1
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.on('y:foo2', function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.log('Y foo2 executed');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein s1 = 1;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Global.on('y:foo2', function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.log('GLOBAL foo2 executed');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein s2 = 1;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein o.fire('y:foo2');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.areEqual(1, s1);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.areNotEqual(1, s2);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein s1 = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein s2 = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
fb84f9014321c5f33c4682de5661b579fcde318fAndreas Gustafsson o.publish('y:bar', {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein emitFacade: true,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein broadcast: 2
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.on('y:bar', function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.log('Y bar executed');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein s3 = 1;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Global.on('y:bar', function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.log('GLOBAL bar executed');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein s4 = 1;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein o.fire('y:bar');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.areEqual(1, s3);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Assert.areEqual(1, s4);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Test.Runner.add(testEventTarget);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.Test.Runner.run();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein YUI({
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein base: "/build/",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein filter: "debug",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein combine: false,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein useConsole: true,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // logInclude: ['event', 'test']
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein logExclude: {Dom: true, Selector: true, Node: true, attribute: true, base: true, event: true, widget: true}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }).use("datasource", function(Y) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Y.log('loaded datasource: ' + Y.DataSource);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein})();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein</script>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein</body>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein</html>
00124ad0406365d39f4b2d1011ef6a76706e9df0Mark Andrews