src/cm/media/js/lib/yui/yui3.0.0/examples/event/event-ce.html
author raph
Wed, 03 Feb 2010 15:42:56 +0100
changeset 142 9b3438382e53
parent 0 40c8f766c9b8
permissions -rw-r--r--
add base64 parameter passing mode
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
<html>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
<head>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
	<title>YUI Library Examples: Event: Using Custom Events</title>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
    	<link rel="stylesheet" type="text/css" href="../../assets/yui.css" >
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
<style>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
    /*Supplemental CSS for the YUI distribution*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
    #custom-doc { width: 95%; min-width: 950px; }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
    #pagetitle {background-image: url(../../assets/bg_hd.gif);}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
/*    #pagetitle h1 {background-image: url(../../assets/title_h_bg.gif);}*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
</style>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
<link rel="stylesheet" type="text/css" href="../../assets/dpSyntaxHighlighter.css">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
<link type="text/css" rel="stylesheet" href="../../build/cssfonts/fonts-min.css" />
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
<script type="text/javascript" src="../../build/yui/yui-min.js"></script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
<style type="text/css">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
	#fire {margin:1em;}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
	#log {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
		border:1px dotted #999999; background-color:#FFFFFF;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
	}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
	#log li {padding:5px;}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
	#log li highlight {color:#993300;}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
</style>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
</head>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
<body id="yahoo-com" class=" yui-skin-sam">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
<div id="custom-doc" class="yui-t2">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
<div id="hd">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
	<div id="ygunav">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
		<p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
            <em>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
                <a href="http://developer.yahoo.com/yui/3/">YUI 3.x Home</a> <i> - </i>	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
            </em>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
		</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
		<form action="http://search.yahoo.com/search" id="sitesearchform">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
            <input name="vs" type="hidden" value="developer.yahoo.com">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
            <input name="vs" type="hidden" value="yuiblog.com">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
		    <div id="sitesearch">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
		    	<label for="searchinput">Site Search (YDN &amp; YUIBlog): </label>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
			    <input type="text" id="searchinput" name="p">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
			    <input type="submit" value="Search" id="searchsubmit" class="ygbt">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
		    </div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
		</form>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
    </div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
	<div id="ygma"><a href="../../"><img src="../../assets/logo.gif"  border="0" width="200" height="93"></a></div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
	<div id="pagetitle"><h1>YUI Library Examples: Event: Using Custom Events</h1></div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
<div id="bd">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
	<div id="yui-main">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
		<div class="yui-b">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
		  <div class="yui-ge">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
			  <div class="yui-u first example" id="main">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
	<h2>Event: Using Custom Events</h2>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
	<div id="example" class="promo">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
	<div class="example-intro">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
	<p>The Custom Event framework is one of the principle communication mechanisms
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
in YUI.  An object can be augmented with <code>EventTarget</code>, enabling it
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
to be both a host and a target for Custom Events.  Custom Events fire from
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
their host and optionally bubble up to one or more targets.  This allows you to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
make the interesting moments of your applications broadly available within a
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
module, within a set of modules, or throughout a complex interface populated
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
with rich elements.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
<p>In this example, a simple Custom Event is illustrated:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
<code>testEvent</code>.  This Custom Event is hosted on a Publisher object and
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
bubbles up to a BubbleTarget object.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
<p><img src="assets/ce-example.gif" alt="An
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
illustration of the relationship between the Custom Event, its host, and its
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
Bubble Target."></p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
<p>Custom Events, like DOM events, can be stopped
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
(<code>stopPropagation</code>) and their default behavior can be suppressed
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
(<code>preventDefault</code>).</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
	</div>	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
	<div class="module example-container ">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
			<div class="hd exampleHd">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
			<p class="newWindowButton yui-skin-sam">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
                <a href="event-ce_clean.html" target="_blank">View example in new window.</a>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
            </p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
		</div>		<div id="example-canvas" class="bd">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
	<!--BEGIN SOURCE CODE FOR EXAMPLE =============================== -->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
	<button id="fire" value="Fire">Fire publisher:testEvent</button> <br />
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
<input type="checkbox" id="stopPropagation"> <label for="stopPropagation">Stop Propagation (testEvent won't bubble to the BubbleTarget.)</label><br />
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
<input type="checkbox" id="preventDefault"> <label for="preventDefault">Prevent Default (testEvent's defaultFn won't fire.)</label>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
<ol id="log">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
	<li>Custom Event log messages will appear here.</li>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
</ol>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
<script language="javascript">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
//Create a YUI instance:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
YUI({base:"../../build/", timeout: 10000}).use("node", "event-custom-complex",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
    //Shortcut for our logging div:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
    var logger = Y.one("#log");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
    //Our BubbleTarget object is an object to which our Custom Event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
    //will be allowed to bubble.  It needs itself to be an EventTarget,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
    //so we'll use augment to make it an EventTarget:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
    var BubbleTarget = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
        Y.log("Host constructor executed.", "info", "example");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
    //Augment BubbleTarget to make it an EventTarget:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
    Y.augment(BubbleTarget, Y.EventTarget);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
    //Create an instance of BubbleTarget:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
    var bubbleTarget = new BubbleTarget();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
    //Now we'll subscribe to the "publisher:testEvent" -- note
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
    //that we can do this even before this event is published:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
    bubbleTarget.subscribe("publisher:testEvent", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
        Y.log("publisher:testEvent fired on the BubbleTarget object.", "info", "example");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
    //Now we'll create the constructor for the Publisher, which 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
    //is the direct host of our Custom Event.  It will also be an
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
    //EventTarget, so we'll extend it as well:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
    var Publisher = function(bubbleTarget) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
        //We'll specify now that Custom Events hosted by Publisher
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
        //should bubble to the bubbleTarget instance passed into the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
        //the Publisher's constructor:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
        this.addTarget(bubbleTarget);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
        //Here we publish the Custom Event.  Note that it's not
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
        //necessary to publish the event at all if you don't have
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
        //options you wish to configure -- firing the event or 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
        //subscribing to it will create it on the fly if necessary:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
        this.publish("publisher:testEvent",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
            {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
                emitFacade: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
                //the defaultFn is what you want to have happen
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
                //by default when no subscriber calls preventDefault:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
                defaultFn: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
                    Y.log("defaultFn: publisher:testEvent's defaultFn executed.", "info", "example");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
                },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
                //You can prevent the default function from firing by
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
                //calling preventDefault from a listener (if the Custom
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
                //Event's preventable option is set to true, as it is by
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
                //default).  If the default is prevented, the preventedFn
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
                //is called, allowing you to respond if necessary.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
                preventedFn: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
                    Y.log("preventedFn: A subscriber to publisher:testEvent called preventDefault().", "info", "example");			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
                },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
                //The stoppedFn is called if a subscriber calls stopPropagation or
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
                //stopImmediatePropagation:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
                stoppedFn: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
                    Y.log("stoppedFn: A subscriber to publisher:testEvent called stopPropagation().", "info", "example");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
        );
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
        Y.log("Publisher constructor executed.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
    //Augment Publisher to make it an EventTarget:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
    Y.augment(Publisher, Y.EventTarget);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
    //Create a Publisher instance:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
    var p = new Publisher(bubbleTarget);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
    //We've already subscribed to the event on the bubbleTarget, but
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
    //we can also subscribe to it here on the Publisher instance.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
    //We'll see the event fire here before it bubbles up to the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
    //bubbleTarget:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
    p.on("publisher:testEvent", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
        Y.log("publisher:testEvent subscriber fired on the publisher object.", "info", "example");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
        if(Y.one("#stopPropagation").get("checked")) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
            //we will stopPropagation on the Custom Event, preventing
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
            //it from bubbling to the bubbleTarget:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
            e.stopPropagation();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
        if(Y.one("#preventDefault").get("checked")) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
            //we will preventDefault on the Custom Event, preventing
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
            //the testEvent's defaultFn from firing:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
            e.preventDefault();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
    //We can tie our testEvent to an interface gesture -- the click of a
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
    //button, for example.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
    Y.on("click", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
        //clear out the logger:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
        logger.set("innerHTML", "");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   198
        p.fire("publisher:testEvent");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   199
    }, "#fire");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   200
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   201
    //write out log messages to the page:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   202
    Y.on("yui:log", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   203
        var s = logger.get("innerHTML");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   204
        logger.set("innerHTML", s + "<li>" + e.msg + "</li>");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   205
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   206
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   207
});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   208
</script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   209
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   210
	<!--END SOURCE CODE FOR EXAMPLE =============================== -->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   211
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   212
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   213
		</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   214
	</div>			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   215
	</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   216
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   217
	<h2>Source Code</h2>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   218
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   219
<p>The full source code for this example follows.  Read through the comments and code to get an understanding of how you can make use of Custom Events in your own application development.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   220
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   221
<div id="syntax1" class="yui-syntax-highlight"><div class="numbers"><pre class="javascript" style="font-family:monospace;"><ol><li class="li1"><div class="de1"><span class="co1">//Create a YUI instance:</span></div></li><li class="li1"><div class="de1">YUI<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="kw2">use</span><span class="br0">&#40;</span><span class="st0">'node'</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>Y<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="co1">//Shortcut for our logging div:</span></div></li><li class="li2"><div class="de2">    <span class="kw2">var</span> logger <span class="sy0">=</span> Y.<span class="me1">one</span><span class="br0">&#40;</span><span class="st0">&quot;#log&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="co1">//Our BubbleTarget object is an object to which our Custom Event</span></div></li><li class="li1"><div class="de1">    <span class="co1">//will be allowed to bubble.  It needs itself to be an EventTarget,</span></div></li><li class="li1"><div class="de1">    <span class="co1">//so we'll use augment to make it an EventTarget:</span></div></li><li class="li2"><div class="de2">    <span class="kw2">var</span> BubbleTarget <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">        Y.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;Host constructor executed.&quot;</span><span class="sy0">,</span> <span class="st0">&quot;info&quot;</span><span class="sy0">,</span> <span class="st0">&quot;example&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">    <span class="co1">//Augment BubbleTarget to make it an EventTarget:</span></div></li><li class="li1"><div class="de1">    Y.<span class="me1">augment</span><span class="br0">&#40;</span>BubbleTarget<span class="sy0">,</span> Y.<span class="me1">EventTarget</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="co1">//Create an instance of BubbleTarget:</span></div></li><li class="li1"><div class="de1">    <span class="kw2">var</span> bubbleTarget <span class="sy0">=</span> <span class="kw2">new</span> BubbleTarget<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="co1">//Now we'll subscribe to the &quot;publisher:testEvent&quot; -- note</span></div></li><li class="li2"><div class="de2">    <span class="co1">//that we can do this even before this event is published:</span></div></li><li class="li1"><div class="de1">    bubbleTarget.<span class="me1">on</span><span class="br0">&#40;</span><span class="st0">&quot;publisher:testEvent&quot;</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">        Y.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;publisher:testEvent fired on the BubbleTarget object.&quot;</span><span class="sy0">,</span> <span class="st0">&quot;info&quot;</span><span class="sy0">,</span> <span class="st0">&quot;example&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    <span class="co1">//Now we'll create the constructor for the Publisher, which </span></div></li><li class="li1"><div class="de1">    <span class="co1">//is the direct host of our Custom Event.  It will also be an</span></div></li><li class="li1"><div class="de1">    <span class="co1">//EventTarget, so we'll extend it as well:</span></div></li><li class="li1"><div class="de1">    <span class="kw2">var</span> Publisher <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span>bubbleTarget<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">        <span class="co1">//We'll specify now that Custom Events hosted by Publisher</span></div></li><li class="li1"><div class="de1">        <span class="co1">//should bubble to the bubbleTarget instance passed into the</span></div></li><li class="li1"><div class="de1">        <span class="co1">//the Publisher's constructor:</span></div></li><li class="li1"><div class="de1">        <span class="kw1">this</span>.<span class="me1">addTarget</span><span class="br0">&#40;</span>bubbleTarget<span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">        <span class="co1">//Here we publish the Custom Event.  Note that it's not</span></div></li><li class="li1"><div class="de1">        <span class="co1">//necessary to publish the event at all if you don't have</span></div></li><li class="li1"><div class="de1">        <span class="co1">//options you wish to configure -- firing the event or </span></div></li><li class="li1"><div class="de1">        <span class="co1">//subscribing to it will create it on the fly if necessary:</span></div></li><li class="li1"><div class="de1">        <span class="kw1">this</span>.<span class="me1">publish</span><span class="br0">&#40;</span><span class="st0">&quot;publisher:testEvent&quot;</span><span class="sy0">,</span></div></li><li class="li2"><div class="de2">            <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">                emitFacade<span class="sy0">:</span> <span class="kw2">true</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">                <span class="co1">//the defaultFn is what you want to have happen</span></div></li><li class="li1"><div class="de1">                <span class="co1">//by default when no subscriber calls preventDefault:</span></div></li><li class="li1"><div class="de1">                defaultFn<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li2"><div class="de2">                    Y.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;defaultFn: publisher:testEvent's defaultFn executed.&quot;</span><span class="sy0">,</span> <span class="st0">&quot;info&quot;</span><span class="sy0">,</span> <span class="st0">&quot;example&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">                <span class="br0">&#125;</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">                <span class="co1">//You can prevent the default function from firing by</span></div></li><li class="li1"><div class="de1">                <span class="co1">//calling preventDefault from a listener (if the Custom</span></div></li><li class="li1"><div class="de1">                <span class="co1">//Event's preventable option is set to true, as it is by</span></div></li><li class="li2"><div class="de2">                <span class="co1">//default).  If the default is prevented, the preventedFn</span></div></li><li class="li1"><div class="de1">                <span class="co1">//is called, allowing you to respond if necessary.</span></div></li><li class="li1"><div class="de1">                preventedFn<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">                    Y.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;preventedFn: A subscriber to publisher:testEvent called preventDefault().&quot;</span><span class="sy0">,</span> <span class="st0">&quot;info&quot;</span><span class="sy0">,</span> <span class="st0">&quot;example&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>          </div></li><li class="li1"><div class="de1">                <span class="br0">&#125;</span><span class="sy0">,</span></div></li><li class="li2"><div class="de2">                <span class="co1">//The stoppedFn is called if a subscriber calls stopPropagation or</span></div></li><li class="li1"><div class="de1">                <span class="co1">//stopImmediatePropagation:</span></div></li><li class="li1"><div class="de1">                stoppedFn<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">                    Y.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;stoppedFn: A subscriber to publisher:testEvent called stopPropagation().&quot;</span><span class="sy0">,</span> <span class="st0">&quot;info&quot;</span><span class="sy0">,</span> <span class="st0">&quot;example&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">                <span class="br0">&#125;</span></div></li><li class="li2"><div class="de2">            <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">        <span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        Y.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;Publisher constructor executed.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">    <span class="co1">//Augment Publisher to make it an EventTarget:</span></div></li><li class="li2"><div class="de2">    Y.<span class="me1">augment</span><span class="br0">&#40;</span>Publisher<span class="sy0">,</span> Y.<span class="me1">EventTarget</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="co1">//Create a Publisher instance:</span></div></li><li class="li1"><div class="de1">    <span class="kw2">var</span> p <span class="sy0">=</span> <span class="kw2">new</span> Publisher<span class="br0">&#40;</span>bubbleTarget<span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    <span class="co1">//We've already subscribed to the event on the bubbleTarget, but</span></div></li><li class="li1"><div class="de1">    <span class="co1">//we can also subscribe to it here on the Publisher instance.</span></div></li><li class="li1"><div class="de1">    <span class="co1">//We'll see the event fire here before it bubbles up to the </span></div></li><li class="li1"><div class="de1">    <span class="co1">//bubbleTarget:</span></div></li><li class="li1"><div class="de1">    p.<span class="me1">on</span><span class="br0">&#40;</span><span class="st0">&quot;publisher:testEvent&quot;</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li2"><div class="de2">        Y.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;publisher:testEvent subscriber fired on the publisher object.&quot;</span><span class="sy0">,</span> <span class="st0">&quot;info&quot;</span><span class="sy0">,</span> <span class="st0">&quot;example&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">if</span><span class="br0">&#40;</span>Y.<span class="me1">one</span><span class="br0">&#40;</span><span class="st0">&quot;#stopPropagation&quot;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;checked&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">            <span class="co1">//we will stopPropagation on the Custom Event, preventing</span></div></li><li class="li1"><div class="de1">            <span class="co1">//it from bubbling to the bubbleTarget:</span></div></li><li class="li1"><div class="de1">            e.<span class="me1">stopPropagation</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">        <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw1">if</span><span class="br0">&#40;</span>Y.<span class="me1">one</span><span class="br0">&#40;</span><span class="st0">&quot;#preventDefault&quot;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;checked&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">            <span class="co1">//we will preventDefault on the Custom Event, preventing</span></div></li><li class="li1"><div class="de1">            <span class="co1">//the testEvent's defaultFn from firing:</span></div></li><li class="li2"><div class="de2">            e.<span class="me1">preventDefault</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="co1">//We can tie our testEvent to an interface gesture -- the click of a</span></div></li><li class="li2"><div class="de2">    <span class="co1">//button, for example.</span></div></li><li class="li1"><div class="de1">    Y.<span class="me1">on</span><span class="br0">&#40;</span><span class="st0">&quot;click&quot;</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">        <span class="co1">//clear out the logger:</span></div></li><li class="li1"><div class="de1">        logger.<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&quot;innerHTML&quot;</span><span class="sy0">,</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        p.<span class="me1">fire</span><span class="br0">&#40;</span><span class="st0">&quot;publisher:testEvent&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">    <span class="br0">&#125;</span><span class="sy0">,</span> <span class="st0">&quot;#fire&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="co1">//write out log messages to the page:</span></div></li><li class="li1"><div class="de1">    Y.<span class="me1">on</span><span class="br0">&#40;</span><span class="st0">&quot;yui:log&quot;</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">        <span class="kw2">var</span> s <span class="sy0">=</span> logger.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;innerHTML&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">        logger.<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&quot;innerHTML&quot;</span><span class="sy0">,</span> s <span class="sy0">+</span> <span class="st0">&quot;&lt;li&gt;&quot;</span> <span class="sy0">+</span> e.<span class="me1">msg</span> <span class="sy0">+</span> <span class="st0">&quot;&lt;/li&gt;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li></ol></pre></div><div class="nonumbers"><pre class="javascript" style="font-family:monospace;"><span class="co1">//Create a YUI instance:</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   222
YUI<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="kw2">use</span><span class="br0">&#40;</span><span class="st0">'node'</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>Y<span class="br0">&#41;</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   223
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   224
    <span class="co1">//Shortcut for our logging div:</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   225
    <span class="kw2">var</span> logger <span class="sy0">=</span> Y.<span class="me1">one</span><span class="br0">&#40;</span><span class="st0">&quot;#log&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   226
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   227
    <span class="co1">//Our BubbleTarget object is an object to which our Custom Event</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   228
    <span class="co1">//will be allowed to bubble.  It needs itself to be an EventTarget,</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   229
    <span class="co1">//so we'll use augment to make it an EventTarget:</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   230
    <span class="kw2">var</span> BubbleTarget <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   231
        Y.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;Host constructor executed.&quot;</span><span class="sy0">,</span> <span class="st0">&quot;info&quot;</span><span class="sy0">,</span> <span class="st0">&quot;example&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   232
    <span class="br0">&#125;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   233
    <span class="co1">//Augment BubbleTarget to make it an EventTarget:</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   234
    Y.<span class="me1">augment</span><span class="br0">&#40;</span>BubbleTarget<span class="sy0">,</span> Y.<span class="me1">EventTarget</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   235
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   236
    <span class="co1">//Create an instance of BubbleTarget:</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   237
    <span class="kw2">var</span> bubbleTarget <span class="sy0">=</span> <span class="kw2">new</span> BubbleTarget<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   238
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   239
    <span class="co1">//Now we'll subscribe to the &quot;publisher:testEvent&quot; -- note</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   240
    <span class="co1">//that we can do this even before this event is published:</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   241
    bubbleTarget.<span class="me1">on</span><span class="br0">&#40;</span><span class="st0">&quot;publisher:testEvent&quot;</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   242
        Y.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;publisher:testEvent fired on the BubbleTarget object.&quot;</span><span class="sy0">,</span> <span class="st0">&quot;info&quot;</span><span class="sy0">,</span> <span class="st0">&quot;example&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   243
    <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   244
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   245
    <span class="co1">//Now we'll create the constructor for the Publisher, which </span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   246
    <span class="co1">//is the direct host of our Custom Event.  It will also be an</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   247
    <span class="co1">//EventTarget, so we'll extend it as well:</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   248
    <span class="kw2">var</span> Publisher <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span>bubbleTarget<span class="br0">&#41;</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   249
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   250
        <span class="co1">//We'll specify now that Custom Events hosted by Publisher</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   251
        <span class="co1">//should bubble to the bubbleTarget instance passed into the</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   252
        <span class="co1">//the Publisher's constructor:</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   253
        <span class="kw1">this</span>.<span class="me1">addTarget</span><span class="br0">&#40;</span>bubbleTarget<span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   254
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   255
        <span class="co1">//Here we publish the Custom Event.  Note that it's not</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   256
        <span class="co1">//necessary to publish the event at all if you don't have</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   257
        <span class="co1">//options you wish to configure -- firing the event or </span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   258
        <span class="co1">//subscribing to it will create it on the fly if necessary:</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   259
        <span class="kw1">this</span>.<span class="me1">publish</span><span class="br0">&#40;</span><span class="st0">&quot;publisher:testEvent&quot;</span><span class="sy0">,</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   260
            <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   261
                emitFacade<span class="sy0">:</span> <span class="kw2">true</span><span class="sy0">,</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   262
                <span class="co1">//the defaultFn is what you want to have happen</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   263
                <span class="co1">//by default when no subscriber calls preventDefault:</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   264
                defaultFn<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   265
                    Y.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;defaultFn: publisher:testEvent's defaultFn executed.&quot;</span><span class="sy0">,</span> <span class="st0">&quot;info&quot;</span><span class="sy0">,</span> <span class="st0">&quot;example&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   266
                <span class="br0">&#125;</span><span class="sy0">,</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   267
                <span class="co1">//You can prevent the default function from firing by</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   268
                <span class="co1">//calling preventDefault from a listener (if the Custom</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   269
                <span class="co1">//Event's preventable option is set to true, as it is by</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   270
                <span class="co1">//default).  If the default is prevented, the preventedFn</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   271
                <span class="co1">//is called, allowing you to respond if necessary.</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   272
                preventedFn<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   273
                    Y.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;preventedFn: A subscriber to publisher:testEvent called preventDefault().&quot;</span><span class="sy0">,</span> <span class="st0">&quot;info&quot;</span><span class="sy0">,</span> <span class="st0">&quot;example&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>          
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   274
                <span class="br0">&#125;</span><span class="sy0">,</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   275
                <span class="co1">//The stoppedFn is called if a subscriber calls stopPropagation or</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   276
                <span class="co1">//stopImmediatePropagation:</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   277
                stoppedFn<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   278
                    Y.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;stoppedFn: A subscriber to publisher:testEvent called stopPropagation().&quot;</span><span class="sy0">,</span> <span class="st0">&quot;info&quot;</span><span class="sy0">,</span> <span class="st0">&quot;example&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   279
                <span class="br0">&#125;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   280
            <span class="br0">&#125;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   281
        <span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   282
        Y.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;Publisher constructor executed.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   283
    <span class="br0">&#125;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   284
    <span class="co1">//Augment Publisher to make it an EventTarget:</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   285
    Y.<span class="me1">augment</span><span class="br0">&#40;</span>Publisher<span class="sy0">,</span> Y.<span class="me1">EventTarget</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   286
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   287
    <span class="co1">//Create a Publisher instance:</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   288
    <span class="kw2">var</span> p <span class="sy0">=</span> <span class="kw2">new</span> Publisher<span class="br0">&#40;</span>bubbleTarget<span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   289
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   290
    <span class="co1">//We've already subscribed to the event on the bubbleTarget, but</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   291
    <span class="co1">//we can also subscribe to it here on the Publisher instance.</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   292
    <span class="co1">//We'll see the event fire here before it bubbles up to the </span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   293
    <span class="co1">//bubbleTarget:</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   294
    p.<span class="me1">on</span><span class="br0">&#40;</span><span class="st0">&quot;publisher:testEvent&quot;</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   295
        Y.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;publisher:testEvent subscriber fired on the publisher object.&quot;</span><span class="sy0">,</span> <span class="st0">&quot;info&quot;</span><span class="sy0">,</span> <span class="st0">&quot;example&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   296
        <span class="kw1">if</span><span class="br0">&#40;</span>Y.<span class="me1">one</span><span class="br0">&#40;</span><span class="st0">&quot;#stopPropagation&quot;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;checked&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   297
            <span class="co1">//we will stopPropagation on the Custom Event, preventing</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   298
            <span class="co1">//it from bubbling to the bubbleTarget:</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   299
            e.<span class="me1">stopPropagation</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   300
        <span class="br0">&#125;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   301
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   302
        <span class="kw1">if</span><span class="br0">&#40;</span>Y.<span class="me1">one</span><span class="br0">&#40;</span><span class="st0">&quot;#preventDefault&quot;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;checked&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   303
            <span class="co1">//we will preventDefault on the Custom Event, preventing</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   304
            <span class="co1">//the testEvent's defaultFn from firing:</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   305
            e.<span class="me1">preventDefault</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   306
        <span class="br0">&#125;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   307
    <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   308
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   309
    <span class="co1">//We can tie our testEvent to an interface gesture -- the click of a</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   310
    <span class="co1">//button, for example.</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   311
    Y.<span class="me1">on</span><span class="br0">&#40;</span><span class="st0">&quot;click&quot;</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   312
        <span class="co1">//clear out the logger:</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   313
        logger.<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&quot;innerHTML&quot;</span><span class="sy0">,</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   314
        p.<span class="me1">fire</span><span class="br0">&#40;</span><span class="st0">&quot;publisher:testEvent&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   315
    <span class="br0">&#125;</span><span class="sy0">,</span> <span class="st0">&quot;#fire&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   316
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   317
    <span class="co1">//write out log messages to the page:</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   318
    Y.<span class="me1">on</span><span class="br0">&#40;</span><span class="st0">&quot;yui:log&quot;</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   319
        <span class="kw2">var</span> s <span class="sy0">=</span> logger.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;innerHTML&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   320
        logger.<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&quot;innerHTML&quot;</span><span class="sy0">,</span> s <span class="sy0">+</span> <span class="st0">&quot;&lt;li&gt;&quot;</span> <span class="sy0">+</span> e.<span class="me1">msg</span> <span class="sy0">+</span> <span class="st0">&quot;&lt;/li&gt;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   321
    <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   322
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   323
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div><textarea id="syntax1-plain">//Create a YUI instance:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   324
YUI().use('node', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   325
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   326
    //Shortcut for our logging div:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   327
    var logger = Y.one("#log");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   328
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   329
    //Our BubbleTarget object is an object to which our Custom Event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   330
    //will be allowed to bubble.  It needs itself to be an EventTarget,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   331
    //so we'll use augment to make it an EventTarget:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   332
    var BubbleTarget = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   333
        Y.log("Host constructor executed.", "info", "example");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   334
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   335
    //Augment BubbleTarget to make it an EventTarget:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   336
    Y.augment(BubbleTarget, Y.EventTarget);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   337
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   338
    //Create an instance of BubbleTarget:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   339
    var bubbleTarget = new BubbleTarget();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   340
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   341
    //Now we'll subscribe to the "publisher:testEvent" -- note
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   342
    //that we can do this even before this event is published:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   343
    bubbleTarget.on("publisher:testEvent", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   344
        Y.log("publisher:testEvent fired on the BubbleTarget object.", "info", "example");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   345
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   346
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   347
    //Now we'll create the constructor for the Publisher, which 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   348
    //is the direct host of our Custom Event.  It will also be an
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   349
    //EventTarget, so we'll extend it as well:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   350
    var Publisher = function(bubbleTarget) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   351
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   352
        //We'll specify now that Custom Events hosted by Publisher
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   353
        //should bubble to the bubbleTarget instance passed into the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   354
        //the Publisher's constructor:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   355
        this.addTarget(bubbleTarget);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   356
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   357
        //Here we publish the Custom Event.  Note that it's not
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   358
        //necessary to publish the event at all if you don't have
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   359
        //options you wish to configure -- firing the event or 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   360
        //subscribing to it will create it on the fly if necessary:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   361
        this.publish("publisher:testEvent",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   362
            {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   363
                emitFacade: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   364
                //the defaultFn is what you want to have happen
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   365
                //by default when no subscriber calls preventDefault:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   366
                defaultFn: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   367
                    Y.log("defaultFn: publisher:testEvent's defaultFn executed.", "info", "example");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   368
                },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   369
                //You can prevent the default function from firing by
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   370
                //calling preventDefault from a listener (if the Custom
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   371
                //Event's preventable option is set to true, as it is by
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   372
                //default).  If the default is prevented, the preventedFn
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   373
                //is called, allowing you to respond if necessary.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   374
                preventedFn: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   375
                    Y.log("preventedFn: A subscriber to publisher:testEvent called preventDefault().", "info", "example");          
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   376
                },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   377
                //The stoppedFn is called if a subscriber calls stopPropagation or
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   378
                //stopImmediatePropagation:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   379
                stoppedFn: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   380
                    Y.log("stoppedFn: A subscriber to publisher:testEvent called stopPropagation().", "info", "example");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   381
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   382
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   383
        );
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   384
        Y.log("Publisher constructor executed.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   385
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   386
    //Augment Publisher to make it an EventTarget:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   387
    Y.augment(Publisher, Y.EventTarget);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   388
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   389
    //Create a Publisher instance:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   390
    var p = new Publisher(bubbleTarget);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   391
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   392
    //We've already subscribed to the event on the bubbleTarget, but
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   393
    //we can also subscribe to it here on the Publisher instance.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   394
    //We'll see the event fire here before it bubbles up to the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   395
    //bubbleTarget:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   396
    p.on("publisher:testEvent", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   397
        Y.log("publisher:testEvent subscriber fired on the publisher object.", "info", "example");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   398
        if(Y.one("#stopPropagation").get("checked")) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   399
            //we will stopPropagation on the Custom Event, preventing
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   400
            //it from bubbling to the bubbleTarget:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   401
            e.stopPropagation();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   402
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   403
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   404
        if(Y.one("#preventDefault").get("checked")) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   405
            //we will preventDefault on the Custom Event, preventing
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   406
            //the testEvent's defaultFn from firing:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   407
            e.preventDefault();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   408
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   409
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   410
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   411
    //We can tie our testEvent to an interface gesture -- the click of a
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   412
    //button, for example.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   413
    Y.on("click", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   414
        //clear out the logger:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   415
        logger.set("innerHTML", "");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   416
        p.fire("publisher:testEvent");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   417
    }, "#fire");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   418
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   419
    //write out log messages to the page:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   420
    Y.on("yui:log", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   421
        var s = logger.get("innerHTML");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   422
        logger.set("innerHTML", s + "<li>" + e.msg + "</li>");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   423
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   424
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   425
});</textarea></div>				</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   426
				<div class="yui-u sidebar">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   427
					
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   428
				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   429
					<div id="examples" class="mod box4">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   430
                        <div class="hd">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   431
						<h4>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   432
    Event Examples:</h4>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   433
                        </div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   434
						<div class="bd">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   435
							<ul>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   436
								<li><a href='../event/event-simple.html'>Simple DOM Events</a></li><li><a href='../event/event-timing.html'>Using 'available', 'contentready', and 'domready'</a></li><li class='selected'><a href='../event/event-ce.html'>Using Custom Events</a></li><li><a href='../event/event-focus-blur.html'>Skinning via Progressive Enhancement using the Event Utility and the Loader</a></li><li><a href='../yui/yui-augment.html'>Compose Classes of Objects with <code>augment</code> (included with examples for The YUI Global Object)</a></li><li><a href='../node-focusmanager/node-focusmanager-3.html'>Accessible Menu Button (included with examples for Focus Manager Node Plugin)</a></li><li><a href='../node-focusmanager/node-focusmanager-2.html'>Accessible TabView (included with examples for Focus Manager Node Plugin)</a></li><li><a href='../attribute/attribute-event.html'>Attribute Change Events (included with examples for Attribute)</a></li><li><a href='../attribute/attribute-event-speeddate.html'>Attribute Event Based Speed Dating (included with examples for Attribute)</a></li><li><a href='../attribute/attribute-getset.html'>Attribute Getters, Setters and Validators (included with examples for Attribute)</a></li><li><a href='../widget/widget-extend.html'>Extending the base widget class (included with examples for Widget)</a></li><li><a href='../dd/photo-browser.html'>Photo Browser (included with examples for Drag &amp; Drop)</a></li>							</ul>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   437
						</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   438
					</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   439
					
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   440
					<div class="mod box4">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   441
                        <div class="hd">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   442
						<h4>More Event Resources:</h4>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   443
                        </div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   444
                        <div class="bd">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   445
						<ul>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   446
							<!-- <li><a href="http://developer.yahoo.com/yui/event/">User's Guide</a> (external)</li> -->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   447
<li><a href="../../api/module_event.html">API Documentation</a></li></ul>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   448
                        </div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   449
					</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   450
			  </div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   451
		</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   452
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   453
		</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   454
	</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   455
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   456
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   457
<div class="yui-b toc3" id="tocWrapper">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   458
<!-- TABLE OF CONTENTS -->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   459
<div id="toc">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   460
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   461
<ul>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   462
<li class="sect first">YUI 3 Resources</li><li class="item"><a title="YUI 3 -- Yahoo! User Interface (YUI) Library" href="http://developer.yahoo.com/yui/3/">YUI 3 Web Site</a></li><li class="item"><a title="Examples of every YUI utility and control in action" href="../../examples/">YUI 3 Examples</a></li><li class="item"><a title="Instantly searchable API documentation for the entire YUI library." href="../../api/">YUI 3 API Docs</a></li><li class="item"><a title="YUI 3 Dependency Configurator -- configure your custom YUI implementation" href="http://developer.yahoo.com/yui/3/configurator">YUI 3 Dependency Configurator</a></li><li class="item"><a title="The YUI 3 Forum on YUILibrary.com" href="http://yuilibrary.com/forum/viewforum.php?f=15">YUI 3 Forums (external)</a></li><li class="item"><a title="Found a bug or a missing feature? Let us know on YUILibrary.com." href="http://developer.yahoo.com/yui/articles/reportingbugs/">Bug Reports/Feature Requests</a></li><li class="item"><a title="YUI is free and open, offered under a BSD license." href="http://developer.yahoo.com/yui/license.html">YUI License</a></li><li class="item"><a title="Download and fork the YUI project on GitHub" href="http://github.com/yui">YUI on Github</a></li><li class="item"><a title="The Yahoo! User Interface Blog" href="http://yuiblog.com">YUI Blog (external)</a></li><li class="sect">YUI 3 Core - Examples</li><li class="item"><a title="YUI Global Object - Functional Examples" href="../../examples/yui/index.html">YUI Global Object</a></li><li class="selected "><a title="Event - Functional Examples" href="../../examples/event/index.html">Event</a></li><li class="item"><a title="Node - Functional Examples" href="../../examples/node/index.html">Node</a></li><li class="sect">YUI 3 Component Infrastructure - Examples</li><li class="item"><a title="Attribute - Functional Examples" href="../../examples/attribute/index.html">Attribute</a></li><li class="item"><a title="Plugin - Functional Examples" href="../../examples/plugin/index.html">Plugin <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="Widget - Functional Examples" href="../../examples/widget/index.html">Widget <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="sect">YUI 3 Utilities - Examples</li><li class="item"><a title="Animation - Functional Examples" href="../../examples/anim/index.html">Animation</a></li><li class="item"><a title="AsyncQueue - Functional Examples" href="../../examples/async-queue/index.html">AsyncQueue</a></li><li class="item"><a title="Browser History - Functional Examples" href="../../examples/history/index.html">Browser History</a></li><li class="item"><a title="Cache - Functional Examples" href="../../examples/cache/index.html">Cache</a></li><li class="item"><a title="Cookie - Functional Examples" href="../../examples/cookie/index.html">Cookie</a></li><li class="item"><a title="DataSchema - Functional Examples" href="../../examples/dataschema/index.html">DataSchema <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="DataSource - Functional Examples" href="../../examples/datasource/index.html">DataSource <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="DataType - Functional Examples" href="../../examples/datatype/index.html">DataType <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="Drag &amp; Drop - Functional Examples" href="../../examples/dd/index.html">Drag &amp; Drop</a></li><li class="item"><a title="Get - Functional Examples" href="../../examples/get/index.html">Get</a></li><li class="item"><a title="ImageLoader - Functional Examples" href="../../examples/imageloader/index.html">ImageLoader</a></li><li class="item"><a title="IO - Functional Examples" href="../../examples/io/index.html">IO</a></li><li class="item"><a title="JSON (JavaScript Object Notation) - Functional Examples" href="../../examples/json/index.html">JSON</a></li><li class="item"><a title="Stylesheet - Functional Examples" href="../../examples/stylesheet/index.html">Stylesheet</a></li><li class="sect">YUI 3 Widgets - Examples</li><li class="item"><a title="Overlay - Functional Examples" href="../../examples/overlay/index.html">Overlay <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="Slider - Functional Examples" href="../../examples/slider/index.html">Slider <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="sect">YUI 3 Node Plugins - Examples</li><li class="item"><a title="FocusManager Node Plugin - Functional Examples" href="../../examples/node-focusmanager/index.html">FocusManager Node Plugin <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="MenuNav Node Plugin - Functional Examples" href="../../examples/node-menunav/index.html">MenuNav Node Plugin <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="sect">YUI 3 CSS - Examples</li><li class="item"><a title="YUI CSS Reset - Functional Examples" href="../../examples/cssreset/index.html">CSS Reset</a></li><li class="item"><a title="YUI Fonts - Functional Examples" href="../../examples/cssfonts/index.html">CSS Fonts</a></li><li class="item"><a title="YUI Base - Functional Examples" href="../../examples/cssbase/index.html">CSS Base</a></li><li class="sect">YUI 3 Developer Tools - Examples</li><li class="item"><a title="Console - Functional Examples" href="../../examples/console/index.html">Console <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="Console Filters Plugin- Functional Examples" href="../../examples/console-filters/index.html">Plugin.ConsoleFilters <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="Profiler - Functional Examples" href="../../examples/profiler/index.html">Profiler</a></li><li class="item"><a title="Test - Functional Examples" href="../../examples/test/index.html">Test</a></li><li class="sect">Other Useful YUI 3 Resources</li><li class="item"><a title="Answers to Frequently Asked Questions about the YUI Library" href="http://developer.yahoo.com/yui/articles/faq/">YUI FAQ (external)</a></li><li class="item"><a title="Yahoo!'s philosophy of Graded Browser Support" href="http://developer.yahoo.com/yui/articles/gbs/">Graded Browser Support (external)</a></li><li class="item"><a title="Videos and podcasts from the YUI Team and from the Yahoo! frontend engineering community." href="http://developer.yahoo.com/yui/theater/">YUI Theater (external)</a></li></ul>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   463
</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   464
</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   465
	</div><!--closes bd-->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   466
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   467
	<div id="ft">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   468
        <p class="first">Copyright &copy; 2009 Yahoo! Inc. All rights reserved.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   469
        <p><a href="http://privacy.yahoo.com/privacy/us/devel/index.html">Privacy Policy</a> - 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   470
            <a href="http://docs.yahoo.com/info/terms/">Terms of Service</a> - 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   471
            <a href="http://docs.yahoo.com/info/copyright/copyright.html">Copyright Policy</a> - 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   472
            <a href="http://careers.yahoo.com/">Job Openings</a></p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   473
	</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   474
</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   475
<script language="javascript"> 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   476
var yuiConfig = {base:"../../build/", timeout: 10000};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   477
</script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   478
<script src="../../assets/syntax.js"></script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   479
<script src="../../assets/dpSyntaxHighlighter.js"></script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   480
<script language="javascript"> 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   481
dp.SyntaxHighlighter.HighlightAll('code'); 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   482
</script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   483
</body>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   484
</html>