src/cm/media/js/lib/yui/yui_3.10.3/docs/event/delegation.html
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 525 89ef5ed3c48b
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
<!DOCTYPE html>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
<html lang="en">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
<head>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
    <meta charset="utf-8">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
    <title>Intro to Event Delegation</title>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=PT+Sans:400,700,400italic,700italic">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
    <link rel="stylesheet" href="../../build/cssgrids/cssgrids-min.css">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
    <link rel="stylesheet" href="../assets/css/main.css">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
    <link rel="stylesheet" href="../assets/vendor/prettify/prettify-min.css">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
    <link rel="shortcut icon" type="image/png" href="../assets/favicon.png">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
    <script src="../../build/yui/yui-min.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
</head>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
<body>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
<!--
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
<a href="https://github.com/yui/yui3"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub"></a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
-->
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
<div id="doc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
    <div id="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
        <h1><img src="http://yuilibrary.com/img/yui-logo.png"></h1>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
        <a href="#toc" class="jump">Jump to Table of Contents</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
            <h1>Intro to Event Delegation</h1>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
    <div class="yui3-g">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
        <div class="yui3-u-3-4">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
            <div id="main">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
                <div class="content"><style>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
#todo-example {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
    margin-top: 2em;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
    max-width: 300px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
    *width: 300px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
    border: 2px solid #aaa;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
    padding: 10px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
#todo-example legend {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
    color: #888;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
    position: relative;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
    bottom: .4em;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
    font-size: 1.3em;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
    *position: auto;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
#todo-example ol {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
    list-style: decimal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
    padding-left: 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
    margin: 0 0 1em;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
#todo-example li {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
    clear: right;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
    margin-left: 25px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
    margin-right: 30px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
    *margin-left: 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
    padding: 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
#todo-example .delete-todo {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
    float: right;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
    position: relative;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
    right: -30px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
    background: url(../assets/event/remove.png) no-repeat right;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
    border: 0 none;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
    width: 30px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
    overflow: hidden;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
    text-indent: 30px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
    opacity: 0.5;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
    *filter: alpha(opacity=50);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
#todo-example input {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
    width: 220px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
    border: 1px solid #aaa;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
    xbackground: url(../assets/event/add.png) no-repeat right;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
    padding: 5px 0 5px 5px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
</style>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
<h2 id="understanding-the-problem">Understanding the problem</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
<p>Consider the following Todo List widget:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
<fieldset id="todo-example">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
<legend>Todo List</legend>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
<ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
    <li><button class="delete-todo" title="remove">remove</button>Read YUI documentation</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
    <li><button class="delete-todo" title="remove">remove</button>Build awesome web app</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
    <li><button class="delete-todo" title="remove">remove</button>Profit!</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
</ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
<input id="todo"> <button id="add-todo" type="button">add</button>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
</fieldset>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
<script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
YUI().use('node-event-delegate', 'event-key', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
    var todoList = Y.one('#todo-example ol'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
        newTask = Y.one('#todo');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
    todoList.delegate('click', function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
        this.ancestor('li').remove();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
    }, 'button');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
    function addTodo() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
        todoList.append(
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
            '<li><button class="delete-todo">remove</button>' +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
                newTask.get('value') +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
            '</li>');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
        newTask.set('value', '');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
    Y.one('#add-todo').on('click', addTodo);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
    newTask.on('key', addTodo, 'enter');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
<p>All tasks are given a "remove" button.  When new tasks are added, they
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
should get a remove button that removes that task.  Here's the markup for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
this:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
<pre class="code prettyprint">&lt;fieldset id=&quot;todo-example&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
&lt;legend&gt;Todo List&lt;&#x2F;legend&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
&lt;ol&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
    &lt;li&gt;&lt;button class=&quot;delete-todo&quot;&gt;remove&lt;&#x2F;button&gt;Read YUI documentation&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
    &lt;li&gt;&lt;button class=&quot;delete-todo&quot;&gt;remove&lt;&#x2F;button&gt;Build awesome web app&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
    &lt;li&gt;&lt;button class=&quot;delete-todo&quot;&gt;remove&lt;&#x2F;button&gt;Profit!&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
&lt;&#x2F;ol&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
&lt;input id=&quot;todo&quot;&gt; &lt;button id=&quot;add-todo&quot; type=&quot;button&quot;&gt;add&lt;&#x2F;button&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
&lt;&#x2F;fieldset&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
<p>In the old days, you would have four click subscriptions:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
<ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
    <li>The remove button for #1</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
    <li>The remove button for #2</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
    <li>The remove button for #3</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
    <li>The add button for creating new tasks</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
</ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
<p>When a user types in a new task and clicks the <em>add</em> button, a new
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
&lt;li&gt; and corresponding &lt;button&gt; are created, and a fifth click
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
subscription is added, one for the new button.  The callback for the remove
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
buttons could be unique for each button, or a generic function that determined
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
which item to remove based on some other info from the event or button.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
<p>When a user clicks on one of the remove buttons, the item is removed.  The
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
associated click event subscription is left in the system, taking up memory.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
So to solve this, maybe the event subscription is detached before the item is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
removed.  Now there are four initial subscriptions and additional logic to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
properly detach subscriptions before items are removed.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
<p>Over time, the number of items on the todo list grows, and so the number of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
subscriptions in the system, and thus memory consumed, grows with it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
Additionally, if at some point, the entire list needs to be cleared, that's a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
lot of subscriptions to detach before it's ok to flush the list's
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
<code>innerHTML</code>.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
<h2 id="what-is-event-delegation">What is event delegation?</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
<p>Event delegation is a way to reduce the number of subscriptions used to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
support this system.  In the example case, only two click subscriptions are
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
needed: one for the add button, and one for every remove button click.  The
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
second one is the <em>delegated subscription</em>.  Here's how to think about
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
it:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
<p>The key to event delegation is understanding that a click on a remove button
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
is also a click on</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
<ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
    <li>the list item that the button is in</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
    <li>the list itself</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
    <li>the &lt;fieldset&gt; that the list is in</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
    <li>etc up to the &lt;body&gt; and finally the <code>document</code><a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
    href="#footnote1">[1]</a></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
<p>Instead of subscribing to the button's "click" event, <em>you can subscribe
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
to the list's "click" event</em><a href="#footnote2">[2]</a>.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
<h2 id="you-clicked-somewhere-but-where">You clicked somewhere, but <em>where</em>?</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
<p>When you click anywhere on the document, the browser dispatches a click
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
event that is assigned an <code>e.target</code> property corresponding to <em>the element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
that triggered the event</em>.  For example, if you click on "Profit!", the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
event originated from the &lt;li&gt; with "Profit!" in it, so <code>e.target</code> will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
be that &lt;li&gt; element<a href="#footnote2">[3]</a>.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
<p>With these two bits of information, we can create a single click
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
subscription to respond to every button click in the Todo list.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
<pre class="code prettyprint">function handleClick(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
    &#x2F;&#x2F; look at e.target
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
Y.one(&#x27;#todo-example ol&#x27;).on(&#x27;click&#x27;, handleClick);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
<p>Now since there are no subscriptions tied directly to the individual
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
buttons, we can add new items to the list without needing to add more
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
subscriptions.  Similarly, we can remove items or even clear the list's
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
<code>innerHTML</code> without needing to detach subscriptions because there aren't any
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
subscriptions inside the list to clear.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
<h2 id="more-work-in-the-event-subscriber">More work in the event subscriber</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
<p>Since any click inside the list is now triggering the event subscriber, it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
will be executed for button clicks, but also for clicks on the task item's text
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
(e.g. "Profit!"). To make sure this click happened on a button, we need to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
inspect <code>e.target</code> to make sure it is a button.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
<pre class="code prettyprint">function handleClick(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
    if (e.target.get(&#x27;tagName&#x27;).toLowerCase() === &#x27;button&#x27;) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
        &#x2F;&#x2F; remove the item
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
<p>This can start to get tricky when you're triggering on an element that can
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
contain children.  For example, if there were no buttons, but instead you
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
wanted to remove items just by clicking on the &lt;li&gt;, you'd need to check
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
if <code>e.target</code> was an &lt;li&gt;. But if it's not, you have to look at
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
<code>e.target</code>'s <code>parentNode</code> and potentially that node's <code>parentNode</code> and so on,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
because <code>e.target</code> will always refer to the most specific element that received
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
the click.  This can amount to a lot of filtering code wrapping the item
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
removal logic, which hinders the readability of your app.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
<h2 id="let-nodedelegate-do-the-work-for-you">Let <code>node.delegate(...)</code> do the work for you</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
<p>This is where <a href="../event/#event-delegation"><code>node.delegate(...)</code></a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
comes in. <code>node.delegate(...)</code> boils down the filtering logic to a css
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
selector, passed as the third argument.  The subscribed callback will only
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
execute if the event originated from an element that matches (or is contained
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
in an element that matches) this css selector.  This allows the code to power
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
our Todo widget to look like this:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
<pre class="code prettyprint">YUI().use(&#x27;node-event-delegate&#x27;, &#x27;event-key&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
    var todoList = Y.one(&#x27;#todo-example ol&#x27;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
        newTask = Y.one(&#x27;#todo&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
    &#x2F;&#x2F; clicks inside the todo list on a &lt;button&gt; element will cause the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
    &#x2F;&#x2F; button&#x27;s containing &lt;li&gt; to be removed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
    todoList.delegate(&#x27;click&#x27;, function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
        this.ancestor(&#x27;li&#x27;).remove();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
    }, &#x27;button&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
    &#x2F;&#x2F; Adding a new task is only appending a list item
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
    function addTodo() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
        todoList.append(
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
            &#x27;&lt;li&gt;&lt;button class=&quot;delete-todo&quot;&gt;remove&lt;&#x2F;button&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
                newTask.get(&#x27;value&#x27;) +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
            &#x27;&lt;&#x2F;li&gt;&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
        newTask.set(&#x27;value&#x27;, &#x27;&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
    Y.one(&#x27;#add-todo&#x27;).on(&#x27;click&#x27;, addTodo);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
    newTask.on(&#x27;key&#x27;, addTodo, &#x27;enter&#x27;); &#x2F;&#x2F; enter also adds todo (see event-key)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
<hr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
<h3 id="footnotes">Footnotes</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
<ol id="footnotes">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
    <li id="footnote1">If there are click subscriptions at multiple points in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
    the DOM heirarchy, they will be executed in order from most specific (the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
    button) to least specific (document) unless <code>e.stopPropagation()</code> is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
    called along the line. This will prevent subscriptions from elements higher
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
    up the parent axis from executing.</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
    <li id="footnote2">We're using the "click" event here, but this all applies
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
    to other events as well.</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
    <li id="footnote3">Actually the event originated from the text node inside
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
    the &lt;li&gt;, but IE reports the origin (the <code>srcElement</code> in IE) as the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
    &lt;li&gt;, which is probably what developers want, anyway.  YUI fixes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
    <code>e.target</code> to bet the element for browsers that report it as the text
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
    node.</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
</ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
            </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
        <div class="yui3-u-1-4">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
            <div class="sidebar">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
                    <div id="toc" class="sidebox">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
                        <div class="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
                            <h2 class="no-toc">Table of Contents</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
                        <div class="bd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
                            <ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
<a href="#understanding-the-problem">Understanding the problem</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
<a href="#what-is-event-delegation">What is event delegation?</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
<a href="#you-clicked-somewhere-but-where">You clicked somewhere, but <em>where</em>?</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
<a href="#more-work-in-the-event-subscriber">More work in the event subscriber</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
<a href="#let-nodedelegate-do-the-work-for-you">Let <code>node.delegate(...)</code> do the work for you</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
<a href="#footnotes">Footnotes</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
                    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
                    <div class="sidebox">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
                        <div class="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
                            <h2 class="no-toc">Examples</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
                        <div class="bd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
                            <ul class="examples">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
                                        <li data-description="Use the Event Utility to attach simple DOM event handlers.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
                                            <a href="basic-example.html">Simple DOM Events</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
                                        <li data-description="Using the synthetic event API to create a DOM event that fires in response to arrow keys being pressed.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
                                            <a href="synth-example.html">Creating an Arrow Event for DOM Subscription</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
                                        <li data-description="Supporting cross-device swipe gestures, using the event-move gesture events">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
                                            <a href="swipe-example.html">Supporting A Swipe Left Gesture</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
                            </ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
                    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
                    <div class="sidebox">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
                        <div class="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
                            <h2 class="no-toc">Examples That Use This Component</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
                        <div class="bd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
                            <ul class="examples">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
                                        <li data-description="Creating an accessible menu button using the Focus Manager Node Plugin, Event&#x27;s delegation support and mouseenter event, along with the Overlay widget and Node&#x27;s support for the WAI-ARIA Roles and States.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
                                            <a href="../node-focusmanager/node-focusmanager-button.html">Accessible Menu Button</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
                                        <li data-description="Shows how to extend the base widget class, to create your own Widgets.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
                                            <a href="../widget/widget-extend.html">Extending the Base Widget Class</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
                                        <li data-description="Example Photo Browser application.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
                                            <a href="../dd/photo-browser.html">Photo Browser</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
                                        <li data-description="Portal style example using Drag &amp; Drop Event Bubbling and Animation.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
                                            <a href="../dd/portal-drag.html">Portal Style Example</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
                                        <li data-description="Use IO to request data over HTTP.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
                                            <a href="../io/get.html">HTTP GET to request data</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
                            </ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
                    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
            </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
<script src="../assets/vendor/prettify/prettify-min.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
<script>prettyPrint();</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
<script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
YUI.Env.Tests = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
    examples: [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
    project: '../assets',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
    assets: '../assets/event',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
    name: 'event',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
    title: 'Intro to Event Delegation',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
    newWindow: '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
    auto:  false 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
YUI.Env.Tests.examples.push('basic-example');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
YUI.Env.Tests.examples.push('synth-example');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
YUI.Env.Tests.examples.push('swipe-example');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
YUI.Env.Tests.examples.push('node-focusmanager-button');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
YUI.Env.Tests.examples.push('widget-extend');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
YUI.Env.Tests.examples.push('photo-browser');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
YUI.Env.Tests.examples.push('portal-drag');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
YUI.Env.Tests.examples.push('get');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
<script src="../assets/yui/test-runner.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
</body>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
</html>