src/cm/media/js/lib/yui/yui3.0.0/examples/event/event-ce_clean.html
author ymh <ymh.work@gmail.com>
Fri, 14 Mar 2014 13:16:10 +0100
changeset 611 fa66f4bb1563
parent 0 40c8f766c9b8
permissions -rw-r--r--
add some more custom config and put every thing in comment in the custom.yaml template
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
<meta http-equiv="content-type" content="text/html; charset=utf-8">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
<title>Using Custom Events</title>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
<style type="text/css">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
/*margin and padding on body element
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
  can introduce errors in determining
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
  element position and are not recommended;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
  we turn them off as a foundation for YUI
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
  CSS treatments. */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
body {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
	margin:0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
	padding:0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
</style>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
<link type="text/css" rel="stylesheet" href="../../build/cssfonts/fonts-min.css" />
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
<script type="text/javascript" src="../../build/yui/yui-min.js"></script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
<!--begin custom header content for this example-->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
<style type="text/css">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
	#fire {margin:1em;}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
	#log {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
		border:1px dotted #999999; background-color:#FFFFFF;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
	}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
	#log li {padding:5px;}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
	#log li highlight {color:#993300;}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
</style>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
<!--end custom header content for this example-->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
</head>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
<body class=" yui-skin-sam">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
<h1>Using Custom Events</h1>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
<div class="exampleIntro">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
	<p>The Custom Event framework is one of the principle communication mechanisms
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
in YUI.  An object can be augmented with <code>EventTarget</code>, enabling it
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
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
    45
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
    46
make the interesting moments of your applications broadly available within a
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
module, within a set of modules, or throughout a complex interface populated
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
with rich elements.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
<p>In this example, a simple Custom Event is illustrated:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
<code>testEvent</code>.  This Custom Event is hosted on a Publisher object and
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
bubbles up to a BubbleTarget object.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
<p><img src="assets/ce-example.gif" alt="An
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
illustration of the relationship between the Custom Event, its host, and its
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
Bubble Target."></p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
<p>Custom Events, like DOM events, can be stopped
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
(<code>stopPropagation</code>) and their default behavior can be suppressed
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
(<code>preventDefault</code>).</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
<!--BEGIN SOURCE CODE FOR EXAMPLE =============================== -->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
<button id="fire" value="Fire">Fire publisher:testEvent</button> <br />
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
<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
    68
<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
    69
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
<ol id="log">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
	<li>Custom Event log messages will appear here.</li>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
</ol>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
<script language="javascript">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
//Create a YUI instance:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
YUI({base:"../../build/", timeout: 10000}).use("node", "event-custom-complex",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
    //Shortcut for our logging div:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
    var logger = Y.one("#log");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
    //Our BubbleTarget object is an object to which our Custom Event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
    //will be allowed to bubble.  It needs itself to be an EventTarget,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
    //so we'll use augment to make it an EventTarget:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
    var BubbleTarget = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
        Y.log("Host constructor executed.", "info", "example");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
    //Augment BubbleTarget to make it an EventTarget:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
    Y.augment(BubbleTarget, Y.EventTarget);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
    //Create an instance of BubbleTarget:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
    var bubbleTarget = new BubbleTarget();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
    //Now we'll subscribe to the "publisher:testEvent" -- note
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
    //that we can do this even before this event is published:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
    bubbleTarget.subscribe("publisher:testEvent", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
        Y.log("publisher:testEvent fired on the BubbleTarget object.", "info", "example");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
    //Now we'll create the constructor for the Publisher, which 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
    //is the direct host of our Custom Event.  It will also be an
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
    //EventTarget, so we'll extend it as well:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
    var Publisher = function(bubbleTarget) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
        //We'll specify now that Custom Events hosted by Publisher
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
        //should bubble to the bubbleTarget instance passed into the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
        //the Publisher's constructor:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
        this.addTarget(bubbleTarget);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
        //Here we publish the Custom Event.  Note that it's not
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
        //necessary to publish the event at all if you don't have
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
        //options you wish to configure -- firing the event or 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
        //subscribing to it will create it on the fly if necessary:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
        this.publish("publisher:testEvent",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
            {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
                emitFacade: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
                //the defaultFn is what you want to have happen
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
                //by default when no subscriber calls preventDefault:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
                defaultFn: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
                    Y.log("defaultFn: publisher:testEvent's defaultFn executed.", "info", "example");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
                },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
                //You can prevent the default function from firing by
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
                //calling preventDefault from a listener (if the Custom
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
                //Event's preventable option is set to true, as it is by
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
                //default).  If the default is prevented, the preventedFn
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
                //is called, allowing you to respond if necessary.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
                preventedFn: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
                    Y.log("preventedFn: A subscriber to publisher:testEvent called preventDefault().", "info", "example");			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
                },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
                //The stoppedFn is called if a subscriber calls stopPropagation or
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
                //stopImmediatePropagation:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
                stoppedFn: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
                    Y.log("stoppedFn: A subscriber to publisher:testEvent called stopPropagation().", "info", "example");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
        );
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
        Y.log("Publisher constructor executed.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
    //Augment Publisher to make it an EventTarget:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
    Y.augment(Publisher, Y.EventTarget);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
    //Create a Publisher instance:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
    var p = new Publisher(bubbleTarget);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
    //We've already subscribed to the event on the bubbleTarget, but
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
    //we can also subscribe to it here on the Publisher instance.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
    //We'll see the event fire here before it bubbles up to the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
    //bubbleTarget:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
    p.on("publisher:testEvent", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
        Y.log("publisher:testEvent subscriber fired on the publisher object.", "info", "example");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
        if(Y.one("#stopPropagation").get("checked")) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
            //we will stopPropagation on the Custom Event, preventing
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
            //it from bubbling to the bubbleTarget:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
            e.stopPropagation();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
        if(Y.one("#preventDefault").get("checked")) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
            //we will preventDefault on the Custom Event, preventing
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
            //the testEvent's defaultFn from firing:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
            e.preventDefault();
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
    //We can tie our testEvent to an interface gesture -- the click of a
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
    //button, for example.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
    Y.on("click", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
        //clear out the logger:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
        logger.set("innerHTML", "");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
        p.fire("publisher:testEvent");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
    }, "#fire");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
    //write out log messages to the page:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
    Y.on("yui:log", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
        var s = logger.get("innerHTML");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
        logger.set("innerHTML", s + "<li>" + e.msg + "</li>");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
</script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
<!--END SOURCE CODE FOR EXAMPLE =============================== -->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
</body>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
</html>