src/cm/media/js/lib/yui/yui3.0.0/examples/attribute/attribute-event-speeddate.html
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 0 40c8f766c9b8
permissions -rw-r--r--
add link to "privacy policy" in the header test
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: Attribute: Attribute Event Based Speed Dating</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
    #speeddate h1 {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
        font-size: 108%;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
        color:#000;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
        margin-bottom:2em;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
    #john {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
        margin-bottom:10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
    .interests.disabled, .reconsider.disabled {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
        color:#888;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
    #john .interest {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
        margin-left:5px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
    .sd-nametag {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
        border:1px solid #000;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
        text-align:center;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
        width:25em;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
        margin:20px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
        background-color:#00f;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
        border-radius: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
        -webkit-border-radius: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
        -moz-border-radius: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
        box-shadow: 3px 3px 3px #888;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
        -moz-box-shadow: 3px 3px 3px #888;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
        -webkit-box-shadow: 3px 3px 3px #888;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
    .sd-nametag .sd-hd, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
    .sd-nametag .sd-ft {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
        padding:5px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
        text-align:center;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
        font-size:108%;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
        font-weight:900;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
        color:#fff;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
    .sd-nametag .sd-hd {    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
        border-top-right-radius: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
        border-top-left-radius: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
        -moz-border-radius-topright: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
        -moz-border-radius-topleft: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
        -webkit-border-top-right-radius: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
        -webkit-border-top-left-radius: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
    .sd-nametag .sd-ft {    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
        border-bottom-right-radius: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
        border-bottom-left-radius: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
        -moz-border-radius-bottomright: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
        -moz-border-radius-bottomleft: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
        -webkit-border-bottom-right-radius: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
        -webkit-border-bottom-left-radius: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
    .sd-nametag .sd-bd {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
        background-color:#fff;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
        padding:0.5em;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
    .sd-nametag .sd-bd .sd-name, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
    .sd-nametag .sd-bd .sd-personality, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
    .sd-nametag .sd-bd .sd-interests {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
        font-size:108%;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
        font-weight:900;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
        font-family:monospace;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
        text-decoration:underline;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
        color:#00a;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
</style>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
</head>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
<body id="yahoo-com" class=" yui-skin-sam">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
<div id="custom-doc" class="yui-t2">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
<div id="hd">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
	<div id="ygunav">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
		<p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
            <em>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
                <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
   105
            </em>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
		</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
		<form action="http://search.yahoo.com/search" id="sitesearchform">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
            <input name="vs" type="hidden" value="developer.yahoo.com">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
            <input name="vs" type="hidden" value="yuiblog.com">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
		    <div id="sitesearch">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
		    	<label for="searchinput">Site Search (YDN &amp; YUIBlog): </label>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
			    <input type="text" id="searchinput" name="p">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
			    <input type="submit" value="Search" id="searchsubmit" class="ygbt">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
		    </div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
		</form>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
    </div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
	<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
   118
	<div id="pagetitle"><h1>YUI Library Examples: Attribute: Attribute Event Based Speed Dating</h1></div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
<div id="bd">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
	<div id="yui-main">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
		<div class="yui-b">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
		  <div class="yui-ge">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
			  <div class="yui-u first example" id="main">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
	<h2>Attribute: Attribute Event Based Speed Dating</h2>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
	<div id="example" class="promo">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
	<div class="example-intro">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
	<p>Attribute change events are one of the key benefits of using attributes to maintain state for your objects, instead of regular object properties.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
<p>This example refactors the basic <a href="attribute-basic-speeddate.html">"Attribute Based Speed Dating" example</a> to shows how you can listen for attribute change events to tie together your object's internal logic (such as updating the visual presentation of the object), and also to communicate with other objects.</p> 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
	</div>	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
	<div class="module example-container ">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
			<div class="hd exampleHd">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
			<p class="newWindowButton yui-skin-sam">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
                <a href="attribute-event-speeddate_clean.html" target="_blank">View example in new window.</a>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
            </p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
		</div>		<div id="example-canvas" class="bd">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
	<!--BEGIN SOURCE CODE FOR EXAMPLE =============================== -->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
	<div id="speeddate">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
    <h1>Communicating With Attribute Events On Speed Dates</h1>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
    <div id="john">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
        <button type="button" class="hi">Hi, I'm John</button>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
        <span class="interests disabled">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
            I enjoy: 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
            <label><input type="checkbox" class="interest" value="Sunsets" disabled="disabled"> Sunsets</label>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
            <label><input type="checkbox" class="interest" value="Reading Specifications" disabled="disabled"> Reading Specifications</label> 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
            <label><input type="checkbox" class="interest" value="Saving Whales" disabled="disabled"> Saving Whales</label>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
            <label><input type="checkbox" class="interest" value="Knitting" disabled="disabled"> Knitting</label>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
        </span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
        <div class="shirt"></div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
    </div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
    <div id="jane">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
        <button type="button" class="hi" disabled="disabled">Hey, I'm Jane</button>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
        <button type="button" class="movingOn" disabled="disabled">I'm Moving On...</button> <span class="reconsider disabled">(unless he likes whales, and avoids knitting <em class="message"></em>)</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
        <div class="shirt"></div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
    </div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
<script type="text/javascript">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
// Get a new instance of YUI and 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
// load it with the required set of modules
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
YUI({base:"../../build/", timeout: 10000}).use("collection", "event-delegate", "node", "attribute", "substitute", function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
    // Setup custom class which we want to add managed attribute support to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
    function SpeedDater(cfg) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
        // When constructed, setup the initial attributes for the instance, by calling the addAttrs method.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
        var attrs = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
            name : {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
                writeOnce:true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
            personality : {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
                value:50
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
            available : {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
                value:true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
            }, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
            interests : {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
                value : []
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   198
        };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   199
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   200
        this.addAttrs(attrs, cfg);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   201
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   202
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   203
    // The HTML template representing the SpeedDater name tag.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   204
    SpeedDater.NAMETAG = '<div class="sd-nametag"> \
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   205
                            <div class="sd-hd">Hello!</div> \
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   206
                            <div class="sd-bd"> \
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   207
                                <p>I\'m <span class="sd-name">{name}</span> and my PersonalityQuotientIndex is <span class="sd-personality">{personality}</span></p> \
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   208
                                <p>I enjoy <span class="sd-interests">{interests}</span>.</p> \
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   209
                            </div> \
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   210
                            <div class="sd-ft sd-availability">{available}</div> \
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   211
                         </div>';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   212
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   213
    // Method used to render the visual representation of a SpeedDater object's state (in this case as a name tag)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   214
    SpeedDater.prototype.applyNameTag = function(where) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   215
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   216
        var tokens = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   217
            name: this.get("name"),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   218
            available: (this.get("available")) ? "" : "Sorry, moving on",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   219
            personality: this.get("personality"),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   220
            interests: (this.get("interests").length == 0) ? "absolutely nothing" : this.get("interests").join(", ")
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   221
        };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   222
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   223
        this.nameTag = Y.Node.create(Y.substitute(SpeedDater.NAMETAG, tokens));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   224
        Y.one(where).appendChild(this.nameTag);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   225
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   226
        this.listenForChanges();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   227
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   228
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   229
    // Method used to attach attribute change event listeners, so that the SpeedDater instance 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   230
    // will react to changes in attribute state, and update what's rendered on the page
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   231
    SpeedDater.prototype.listenForChanges = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   232
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   233
        // Sync up the UI for "available", after the value of the "available" attribute has changed:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   234
        this.after("availableChange", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   235
            var taken = (e.newVal) ? "" : "Oh, is that the time?";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   236
            this.nameTag.query(".sd-availability").set("innerHTML", taken);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   237
        });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   238
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   239
        // Sync up the UI for "name", after the value of the "name" attribute has changed:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   240
        this.after("nameChange", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   241
            var name = e.newVal;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   242
            this.nameTag.query(".sd-name").set("innerHTML", name);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   243
        });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   244
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   245
        // Sync up the UI for "personality", after the value of the "personality" attribute has changed:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   246
        this.after("personalityChange", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   247
            var personality = e.newVal;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   248
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   249
            var personalityEl = this.nameTag.query(".sd-personality");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   250
            personalityEl.set("innerHTML", personality);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   251
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   252
            if (personality > 90) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   253
                personalityEl.addClass("sd-max");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   254
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   255
        });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   256
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   257
        // Sync up the UI for "interests", after the value of the "interests" attribute has changed:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   258
        this.after("interestsChange", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   259
            var interests = (e.newVal.length == 0) ? "absolutely nothing" : this.get("interests").join(", ");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   260
            this.nameTag.query(".sd-interests").set("innerHTML", interests);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   261
        });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   262
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   263
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   264
    // Augment custom class with Attribute
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   265
    Y.augment(SpeedDater, Y.Attribute);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   266
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   267
    var john, jane;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   268
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   269
    Y.on("click", function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   270
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   271
        if (!john) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   272
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   273
            john = new SpeedDater({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   274
                name: "John",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   275
                personality: 78
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   276
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   277
            john.applyNameTag("#john .shirt");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   278
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   279
            Y.one("#jane .hi").set("disabled", false); 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   280
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   281
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   282
    }, "#john .hi");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   283
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   284
    Y.on("click", function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   285
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   286
        if (!jane) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   287
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   288
            jane = new SpeedDater({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   289
                name: "Jane",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   290
                personality: 82,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   291
                interests: ["Popcorn", "Saving Whales"]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   292
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   293
            jane.applyNameTag("#jane .shirt");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   294
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   295
            // Update Jane's interests state, after John's interests state changes...
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   296
            john.after("interestsChange", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   297
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   298
                var janesInterests = jane.get("interests"),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   299
                    johnsInterests = e.newVal,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   300
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   301
                    readingSpecs = "Reading Specifications";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   302
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   303
                // If it turns out that John enjoys reading specs, then Jane can admit it too...
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   304
                if (Y.Array.indexOf(johnsInterests, readingSpecs) !== -1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   305
                    if(Y.Array.indexOf(janesInterests, readingSpecs) == -1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   306
                        janesInterests.push(readingSpecs);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   307
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   308
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   309
                    janesInterests = Y.Array.reject(janesInterests, function(item){return (item == readingSpecs);});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   310
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   311
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   312
                jane.set("interests", janesInterests);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   313
                jane.set("available", true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   314
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   315
                setMessage("");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   316
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   317
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   318
            // We can also listen before an attribute changes its value, and decide if we want to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   319
            // allow the state change to occur or not. Invoking e.preventDefault() stops the state from
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   320
            // being updated. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   321
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   322
            // In this case, Jane can change her mind about making herself unavailable, if John likes 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   323
            // saving whales, as long as he doesn't dig knitting too.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   324
 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   325
            jane.on("availableChange", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   326
                var johnsInterests = john.get("interests");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   327
                var janeAvailable = e.newVal;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   328
                if (janeAvailable === false && Y.Array.indexOf(johnsInterests, "Saving Whales") !== -1 &&  Y.Array.indexOf(johnsInterests, "Knitting") == -1 ) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   329
                    // Reconsider..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   330
                    e.preventDefault();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   331
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   332
                    setMessage("... which he does");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   333
                };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   334
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   335
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   336
            enableExampleUI();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   337
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   338
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   339
    }, "#jane .hi");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   340
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   341
    Y.on("click", function() { 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   342
        jane.set("available", false); 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   343
    }, "#jane .movingOn");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   344
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   345
    // A delegate DOM event listener which will update John's interests, based on the checkbox state, whenever
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   346
    // a checkbox is clicked.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   347
    Y.on("delegate", function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   348
        var interests = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   349
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   350
        Y.Node.all("#john input[type=checkbox].interest").each(function(checkbox) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   351
            if (checkbox.get("checked")) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   352
                interests.push(checkbox.get("value"));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   353
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   354
        });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   355
        john.set("interests", interests);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   356
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   357
    }, "#john", "click", "input[type=checkbox].interest");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   358
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   359
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   360
    // Example helpers...
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   361
    function enableExampleUI() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   362
        Y.all("#jane button").set("disabled", false);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   363
        Y.all("#john button").set("disabled", false);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   364
        Y.all("#john input").set("disabled", false);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   365
        Y.one("#john .interests").removeClass("disabled");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   366
        Y.one("#jane .reconsider").removeClass("disabled");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   367
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   368
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   369
    function setMessage(msg) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   370
        Y.one("#jane .message").set("innerHTML", msg);      
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   371
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   372
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   373
 });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   374
</script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   375
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   376
	<!--END SOURCE CODE FOR EXAMPLE =============================== -->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   377
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   378
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   379
		</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   380
	</div>			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   381
	</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   382
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   383
	<h3>Listening For Attribute Change Events</h3>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   384
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   385
<p>In this example, we'll look at how you can setup listeners for attribute change events, and work with the event payload which the listeners receive, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   386
using the <code>SpeedDater</code> class, introduced in the <a href="attribute-basic-speeddate.html">"Attribute Based Speed Dating" example</a>.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   387
 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   388
<p>We'll create two SpeedDater instances, <code>jane</code> and <code>john</code>, and use the attribute events they generate both internally (within the class code), to wire up UI refreshes, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   389
and externally, to have <code>jane</code> react to changes in the <code>john</code>'s state.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   390
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   391
<h4>Setting Up The SpeedDater Class With Attribute</h4>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   392
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   393
<p>We start by setting up the same basic class we created for the <a href="attribute-basic-speeddate.html">"Attribute Based Speed Dating" example</a>, with an additional attribute, <code>interests</code>, using the code below:</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   394
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   395
<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">// Setup custom class which we want to add managed attribute support to</span></div></li><li class="li1"><div class="de1"><span class="kw2">function</span> SpeedDater<span class="br0">&#40;</span>cfg<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">    <span class="co1">// When constructed, setup the initial attributes for the instance, </span></div></li><li class="li1"><div class="de1">    <span class="co1">// by calling the addAttrs method.</span></div></li><li class="li2"><div class="de2">    <span class="kw2">var</span> attrs <span class="sy0">=</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">        <span class="kw3">name</span> <span class="sy0">:</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">            writeOnce<span class="sy0">:</span><span class="kw2">true</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">&nbsp;</div></li><li class="li2"><div class="de2">        personality <span class="sy0">:</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">            value<span class="sy0">:</span><span class="nu0">50</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">&nbsp;</div></li><li class="li1"><div class="de1">        available <span class="sy0">:</span> <span class="br0">&#123;</span></div></li><li class="li2"><div class="de2">            value<span class="sy0">:</span><span class="kw2">true</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">&nbsp;</div></li><li class="li1"><div class="de1">        interests <span class="sy0">:</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">            value <span class="sy0">:</span> <span class="br0">&#91;</span><span class="br0">&#93;</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">&#125;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw1">this</span>.<span class="me1">addAttrs</span><span class="br0">&#40;</span>attrs<span class="sy0">,</span> cfg<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">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1">// Augment custom class with Attribute</span></div></li><li class="li1"><div class="de1">Y.<span class="me1">augment</span><span class="br0">&#40;</span>SpeedDater<span class="sy0">,</span> Y.<span class="me1">Attribute</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">// Setup custom class which we want to add managed attribute support to</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   396
<span class="kw2">function</span> SpeedDater<span class="br0">&#40;</span>cfg<span class="br0">&#41;</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   397
    <span class="co1">// When constructed, setup the initial attributes for the instance, </span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   398
    <span class="co1">// by calling the addAttrs method.</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   399
    <span class="kw2">var</span> attrs <span class="sy0">=</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   400
        <span class="kw3">name</span> <span class="sy0">:</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   401
            writeOnce<span class="sy0">:</span><span class="kw2">true</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   402
        <span class="br0">&#125;</span><span class="sy0">,</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   403
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   404
        personality <span class="sy0">:</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   405
            value<span class="sy0">:</span><span class="nu0">50</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   406
        <span class="br0">&#125;</span><span class="sy0">,</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   407
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   408
        available <span class="sy0">:</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   409
            value<span class="sy0">:</span><span class="kw2">true</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   410
        <span class="br0">&#125;</span><span class="sy0">,</span> 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   411
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   412
        interests <span class="sy0">:</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   413
            value <span class="sy0">:</span> <span class="br0">&#91;</span><span class="br0">&#93;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   414
        <span class="br0">&#125;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   415
    <span class="br0">&#125;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   416
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   417
    <span class="kw1">this</span>.<span class="me1">addAttrs</span><span class="br0">&#40;</span>attrs<span class="sy0">,</span> cfg<span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   418
<span class="br0">&#125;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   419
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   420
<span class="co1">// Augment custom class with Attribute</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   421
Y.<span class="me1">augment</span><span class="br0">&#40;</span>SpeedDater<span class="sy0">,</span> Y.<span class="me1">Attribute</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div><textarea id="syntax1-plain">// Setup custom class which we want to add managed attribute support to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   422
function SpeedDater(cfg) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   423
    // When constructed, setup the initial attributes for the instance, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   424
    // by calling the addAttrs method.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   425
    var attrs = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   426
        name : {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   427
            writeOnce:true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   428
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   429
 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   430
        personality : {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   431
            value:50
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   432
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   433
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   434
        available : {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   435
            value:true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   436
        }, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   437
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   438
        interests : {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   439
            value : []
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   440
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   441
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   442
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   443
    this.addAttrs(attrs, cfg);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   444
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   445
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   446
// Augment custom class with Attribute
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   447
Y.augment(SpeedDater, Y.Attribute);</textarea></div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   448
<p>We then create two instances of SpeedDaters, <code>jane</code> and <code>john</code>:</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   449
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   450
<div id="syntax2" 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 john instance...</span></div></li><li class="li1"><div class="de1">john <span class="sy0">=</span> <span class="kw2">new</span> SpeedDater<span class="br0">&#40;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">    <span class="kw3">name</span><span class="sy0">:</span> <span class="st0">&quot;John&quot;</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">    personality<span class="sy0">:</span> <span class="nu0">78</span></div></li><li class="li2"><div class="de2"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1"><span class="co1">// ... and render to the page</span></div></li><li class="li1"><div class="de1">john.<span class="me1">applyNameTag</span><span class="br0">&#40;</span><span class="st0">&quot;#john .shirt&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">// Create a jane instance...</span></div></li><li class="li2"><div class="de2">jane <span class="sy0">=</span> <span class="kw2">new</span> SpeedDater<span class="br0">&#40;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">    <span class="kw3">name</span><span class="sy0">:</span> <span class="st0">&quot;Jane&quot;</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">    personality<span class="sy0">:</span> <span class="nu0">82</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">    interests<span class="sy0">:</span> <span class="br0">&#91;</span><span class="st0">&quot;Popcorn&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Saving Whales&quot;</span><span class="br0">&#93;</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="li2"><div class="de2">jane.<span class="me1">applyNameTag</span><span class="br0">&#40;</span><span class="st0">&quot;#jane .shirt&quot;</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 john instance...</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   451
john <span class="sy0">=</span> <span class="kw2">new</span> SpeedDater<span class="br0">&#40;</span><span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   452
    <span class="kw3">name</span><span class="sy0">:</span> <span class="st0">&quot;John&quot;</span><span class="sy0">,</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   453
    personality<span class="sy0">:</span> <span class="nu0">78</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   454
<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
   455
<span class="co1">// ... and render to the page</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   456
john.<span class="me1">applyNameTag</span><span class="br0">&#40;</span><span class="st0">&quot;#john .shirt&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   457
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   458
<span class="co1">// Create a jane instance...</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   459
jane <span class="sy0">=</span> <span class="kw2">new</span> SpeedDater<span class="br0">&#40;</span><span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   460
    <span class="kw3">name</span><span class="sy0">:</span> <span class="st0">&quot;Jane&quot;</span><span class="sy0">,</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   461
    personality<span class="sy0">:</span> <span class="nu0">82</span><span class="sy0">,</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   462
    interests<span class="sy0">:</span> <span class="br0">&#91;</span><span class="st0">&quot;Popcorn&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Saving Whales&quot;</span><span class="br0">&#93;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   463
<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
   464
jane.<span class="me1">applyNameTag</span><span class="br0">&#40;</span><span class="st0">&quot;#jane .shirt&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div><textarea id="syntax2-plain">// Create a john instance...
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   465
john = new SpeedDater({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   466
    name: "John",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   467
    personality: 78
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   468
});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   469
// ... and render to the page
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   470
john.applyNameTag("#john .shirt");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   471
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   472
// Create a jane instance...
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   473
jane = new SpeedDater({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   474
    name: "Jane",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   475
    personality: 82,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   476
    interests: ["Popcorn", "Saving Whales"]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   477
});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   478
jane.applyNameTag("#jane .shirt");</textarea></div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   479
<h4>Registering Event Listeners</h4>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   480
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   481
<p>For this event based example, we no longer have an <code>updateNameTag()</code> method which the user is responsible for calling when they want to refresh the name tag rendered on the page, as we did in the basic example. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   482
Instead the <code>SpeedDater</code> class sets up some internal attribute change event listeners in its <code>listenForChanges()</code> method, which will refresh the UI for a particular attribute, each time its value is modified:</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   483
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   484
<div id="syntax3" class="yui-syntax-highlight"><div class="numbers"><pre class="javascript" style="font-family:monospace;"><ol><li class="li1"><div class="de1"><span class="co1">// Method used to attach attribute change event listeners, so that </span></div></li><li class="li1"><div class="de1"><span class="co1">// the SpeedDater instance will react to changes in attribute state, </span></div></li><li class="li1"><div class="de1"><span class="co1">// and update what's rendered on the page</span></div></li><li class="li1"><div class="de1">SpeedDater.<span class="me1">prototype</span>.<span class="me1">listenForChanges</span> <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">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="co1">// Sync up the UI for &quot;available&quot;, after the value of the &quot;available&quot; </span></div></li><li class="li1"><div class="de1">    <span class="co1">// attribute has changed:</span></div></li><li class="li1"><div class="de1">    <span class="kw1">this</span>.<span class="me1">after</span><span class="br0">&#40;</span><span class="st0">&quot;availableChange&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> taken <span class="sy0">=</span> <span class="br0">&#40;</span>e.<span class="me1">newVal</span><span class="br0">&#41;</span> <span class="sy0">?</span> <span class="st0">&quot;&quot;</span> <span class="sy0">:</span> <span class="st0">&quot;Oh, is that the time?&quot;</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">        <span class="kw1">this</span>.<span class="me1">nameTag</span>.<span class="me1">query</span><span class="br0">&#40;</span><span class="st0">&quot;.sd-availability&quot;</span><span class="br0">&#41;</span>.<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&quot;innerHTML&quot;</span><span class="sy0">,</span> taken<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="co1">// Sync up the UI for &quot;name&quot;, after the value of the &quot;name&quot; </span></div></li><li class="li1"><div class="de1">    <span class="co1">// attribute has changed:</span></div></li><li class="li2"><div class="de2">    <span class="kw1">this</span>.<span class="me1">after</span><span class="br0">&#40;</span><span class="st0">&quot;nameChange&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> <span class="kw3">name</span> <span class="sy0">=</span> e.<span class="me1">newVal</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">this</span>.<span class="me1">nameTag</span>.<span class="me1">query</span><span class="br0">&#40;</span><span class="st0">&quot;.sd-name&quot;</span><span class="br0">&#41;</span>.<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&quot;innerHTML&quot;</span><span class="sy0">,</span> <span class="kw3">name</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">// Sync up the UI for &quot;personality&quot;, after the value of the &quot;personality&quot; </span></div></li><li class="li1"><div class="de1">    <span class="co1">// attribute has changed:</span></div></li><li class="li1"><div class="de1">    <span class="kw1">this</span>.<span class="me1">after</span><span class="br0">&#40;</span><span class="st0">&quot;personalityChange&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> personality <span class="sy0">=</span> e.<span class="me1">newVal</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">        <span class="kw2">var</span> personalityEl <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">nameTag</span>.<span class="me1">query</span><span class="br0">&#40;</span><span class="st0">&quot;.sd-personality&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        personalityEl.<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&quot;innerHTML&quot;</span><span class="sy0">,</span> personality<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="kw1">if</span> <span class="br0">&#40;</span>personality <span class="sy0">&gt;</span> <span class="nu0">90</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">            personalityEl.<span class="me1">addClass</span><span class="br0">&#40;</span><span class="st0">&quot;sd-max&quot;</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">    <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">// Sync up the UI for &quot;interests&quot;, after the value of the &quot;interests&quot; </span></div></li><li class="li1"><div class="de1">    <span class="co1">// attribute has changed:</span></div></li><li class="li2"><div class="de2">    <span class="kw1">this</span>.<span class="me1">after</span><span class="br0">&#40;</span><span class="st0">&quot;interestsChange&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> interests <span class="sy0">=</span> <span class="br0">&#40;</span>e.<span class="me1">newVal</span>.<span class="me1">length</span> <span class="sy0">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="sy0">?</span> </div></li><li class="li1"><div class="de1">                    <span class="st0">&quot;absolutely nothing&quot;</span> <span class="sy0">:</span> <span class="kw1">this</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;interests&quot;</span><span class="br0">&#41;</span>.<span class="me1">join</span><span class="br0">&#40;</span><span class="st0">&quot;, &quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">this</span>.<span class="me1">nameTag</span>.<span class="me1">query</span><span class="br0">&#40;</span><span class="st0">&quot;.sd-interests&quot;</span><span class="br0">&#41;</span>.<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&quot;innerHTML&quot;</span><span class="sy0">,</span> interests<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="li2"><div class="de2"><span class="br0">&#125;</span><span class="sy0">;</span></div></li></ol></pre></div><div class="nonumbers"><pre class="javascript" style="font-family:monospace;"><span class="co1">// Method used to attach attribute change event listeners, so that </span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   485
<span class="co1">// the SpeedDater instance will react to changes in attribute state, </span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   486
<span class="co1">// and update what's rendered on the page</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   487
SpeedDater.<span class="me1">prototype</span>.<span class="me1">listenForChanges</span> <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
   488
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   489
    <span class="co1">// Sync up the UI for &quot;available&quot;, after the value of the &quot;available&quot; </span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   490
    <span class="co1">// attribute has changed:</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   491
    <span class="kw1">this</span>.<span class="me1">after</span><span class="br0">&#40;</span><span class="st0">&quot;availableChange&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
   492
        <span class="kw2">var</span> taken <span class="sy0">=</span> <span class="br0">&#40;</span>e.<span class="me1">newVal</span><span class="br0">&#41;</span> <span class="sy0">?</span> <span class="st0">&quot;&quot;</span> <span class="sy0">:</span> <span class="st0">&quot;Oh, is that the time?&quot;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   493
        <span class="kw1">this</span>.<span class="me1">nameTag</span>.<span class="me1">query</span><span class="br0">&#40;</span><span class="st0">&quot;.sd-availability&quot;</span><span class="br0">&#41;</span>.<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&quot;innerHTML&quot;</span><span class="sy0">,</span> taken<span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   494
    <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
   495
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   496
    <span class="co1">// Sync up the UI for &quot;name&quot;, after the value of the &quot;name&quot; </span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   497
    <span class="co1">// attribute has changed:</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   498
    <span class="kw1">this</span>.<span class="me1">after</span><span class="br0">&#40;</span><span class="st0">&quot;nameChange&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
   499
        <span class="kw2">var</span> <span class="kw3">name</span> <span class="sy0">=</span> e.<span class="me1">newVal</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   500
        <span class="kw1">this</span>.<span class="me1">nameTag</span>.<span class="me1">query</span><span class="br0">&#40;</span><span class="st0">&quot;.sd-name&quot;</span><span class="br0">&#41;</span>.<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&quot;innerHTML&quot;</span><span class="sy0">,</span> <span class="kw3">name</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   501
    <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
   502
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   503
    <span class="co1">// Sync up the UI for &quot;personality&quot;, after the value of the &quot;personality&quot; </span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   504
    <span class="co1">// attribute has changed:</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   505
    <span class="kw1">this</span>.<span class="me1">after</span><span class="br0">&#40;</span><span class="st0">&quot;personalityChange&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
   506
        <span class="kw2">var</span> personality <span class="sy0">=</span> e.<span class="me1">newVal</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   507
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   508
        <span class="kw2">var</span> personalityEl <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">nameTag</span>.<span class="me1">query</span><span class="br0">&#40;</span><span class="st0">&quot;.sd-personality&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   509
        personalityEl.<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&quot;innerHTML&quot;</span><span class="sy0">,</span> personality<span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   510
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   511
        <span class="kw1">if</span> <span class="br0">&#40;</span>personality <span class="sy0">&gt;</span> <span class="nu0">90</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   512
            personalityEl.<span class="me1">addClass</span><span class="br0">&#40;</span><span class="st0">&quot;sd-max&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   513
        <span class="br0">&#125;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   514
    <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
   515
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   516
    <span class="co1">// Sync up the UI for &quot;interests&quot;, after the value of the &quot;interests&quot; </span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   517
    <span class="co1">// attribute has changed:</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   518
    <span class="kw1">this</span>.<span class="me1">after</span><span class="br0">&#40;</span><span class="st0">&quot;interestsChange&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
   519
        <span class="kw2">var</span> interests <span class="sy0">=</span> <span class="br0">&#40;</span>e.<span class="me1">newVal</span>.<span class="me1">length</span> <span class="sy0">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="sy0">?</span> 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   520
                    <span class="st0">&quot;absolutely nothing&quot;</span> <span class="sy0">:</span> <span class="kw1">this</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;interests&quot;</span><span class="br0">&#41;</span>.<span class="me1">join</span><span class="br0">&#40;</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
   521
        <span class="kw1">this</span>.<span class="me1">nameTag</span>.<span class="me1">query</span><span class="br0">&#40;</span><span class="st0">&quot;.sd-interests&quot;</span><span class="br0">&#41;</span>.<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&quot;innerHTML&quot;</span><span class="sy0">,</span> interests<span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   522
    <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
   523
<span class="br0">&#125;</span><span class="sy0">;</span></pre></div><textarea id="syntax3-plain">// Method used to attach attribute change event listeners, so that 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   524
// the SpeedDater instance will react to changes in attribute state, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   525
// and update what's rendered on the page
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   526
SpeedDater.prototype.listenForChanges = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   527
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   528
    // Sync up the UI for "available", after the value of the "available" 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   529
    // attribute has changed:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   530
    this.after("availableChange", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   531
        var taken = (e.newVal) ? "" : "Oh, is that the time?";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   532
        this.nameTag.query(".sd-availability").set("innerHTML", taken);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   533
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   534
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   535
    // Sync up the UI for "name", after the value of the "name" 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   536
    // attribute has changed:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   537
    this.after("nameChange", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   538
        var name = e.newVal;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   539
        this.nameTag.query(".sd-name").set("innerHTML", name);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   540
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   541
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   542
    // Sync up the UI for "personality", after the value of the "personality" 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   543
    // attribute has changed:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   544
    this.after("personalityChange", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   545
        var personality = e.newVal;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   546
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   547
        var personalityEl = this.nameTag.query(".sd-personality");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   548
        personalityEl.set("innerHTML", personality);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   549
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   550
        if (personality > 90) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   551
            personalityEl.addClass("sd-max");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   552
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   553
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   554
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   555
    // Sync up the UI for "interests", after the value of the "interests" 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   556
    // attribute has changed:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   557
    this.after("interestsChange", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   558
        var interests = (e.newVal.length == 0) ? 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   559
                    "absolutely nothing" : this.get("interests").join(", ");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   560
        this.nameTag.query(".sd-interests").set("innerHTML", interests);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   561
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   562
};</textarea></div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   563
<p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   564
As seen in the above code, the event type for attribute change events is created by concatenating the attribute name with <code>"Change"</code> (e.g. <code>"availableChange"</code>). Whenever an attribute value is changed through Attribute's <code>set()</code> method, both <em>"on"</em> and <em>"after"</em> subscribers are notified.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   565
</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   566
<p> 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   567
In the code snippet above, all the subscribers are listening for the <em>"after"</em> moment using the <code>after()</code> subscription method, since they're only interested in being notified after the value has actually changed. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   568
However, as we'll see below, the example also shows you how to use an <em>"on"</em> listener, to prevent the attribute state change from occuring under certain conditions.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   569
</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   570
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   571
<h4>On vs. After</h4>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   572
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   573
<p>A single attribute change event has two moments which can be subscribed to, depending on what the subscriber wants to do when notified.</p> 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   574
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   575
<p><strong>on :</strong> Subscribers to the <em>"on"</em> moment, will be notified <em>before</em> any actual state change has occurred. This provides the opportunity to prevent the state change from occurring, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   576
using the <code>preventDefault()</code> method of the event facade object passed to the subscriber. If you use <code>get()</code> to retrieve the value of the attribute in an <em>"on"</em> subscriber, you will receive the current, unchanged value. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   577
However the event facade provides access to the value which the attribute is being set to, through it's <code>newVal</code> property.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   578
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   579
<p><strong>after :</strong> Subscribers to the <em>"after"</em> moment, will be notified <em>after</em> the attribute's state has been updated. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   580
This provides the opportunity to update state in other parts of your application, in response to a change in the attribute's state.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   581
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   582
<p>Based on the definition above, <code>after</code> listeners are not invoked if state change is prevented; for example, due to one of the <em>"on"</em> listeners calling <code>preventDefault()</code> on the event object passed to the subscriber.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   583
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   584
<h4>Having Jane React To John</h4>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   585
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   586
<p>Aside from the internal listeners set up by the class, in this example <code>jane</code> also sets up two more subscribers. The first is a subscriber, which allows <code>jane</code> to "reconsider" changing the state of her <code>available</code> attribute, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   587
under certain conditions. Since she may want to prevent the <code>available</code> attribute from being modified in this case, we use Attribute's <code>on()</code> method to listen for the <em>"on"</em> moment, so that the default behavior can be prevented:</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   588
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   589
<div id="syntax4" class="yui-syntax-highlight"><div class="numbers"><pre class="javascript" style="font-family:monospace;"><ol><li class="li1"><div class="de1"><span class="co1">// We can also listen before an attribute changes its value, and </span></div></li><li class="li1"><div class="de1"><span class="co1">// decide if we want to allow the state change to occur or not. </span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1">// Invoking e.preventDefault() stops the state from being updated. </span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1">// In this case, Jane can change her mind about making herself </span></div></li><li class="li1"><div class="de1"><span class="co1">// unavailable, if John likes saving whales, as long as he doesn't </span></div></li><li class="li1"><div class="de1"><span class="co1">// dig knitting too.</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">jane.<span class="me1">on</span><span class="br0">&#40;</span><span class="st0">&quot;availableChange&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> johnsInterests <span class="sy0">=</span> john.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;interests&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">    <span class="kw2">var</span> janeAvailable <span class="sy0">=</span> e.<span class="me1">newVal</span><span class="sy0">;</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>janeAvailable <span class="sy0">===</span> <span class="kw2">false</span> <span class="sy0">&amp;&amp;</span> Y.<span class="me1">Array</span>.<span class="me1">indexOf</span><span class="br0">&#40;</span>johnsInterests<span class="sy0">,</span> <span class="st0">&quot;Saving Whales&quot;</span><span class="br0">&#41;</span> <span class="sy0">!==</span> <span class="sy0">-</span><span class="nu0">1</span> </div></li><li class="li2"><div class="de2">            <span class="sy0">&amp;&amp;</span> Y.<span class="me1">Array</span>.<span class="me1">indexOf</span><span class="br0">&#40;</span>johnsInterests<span class="sy0">,</span> <span class="st0">&quot;Knitting&quot;</span><span class="br0">&#41;</span> <span class="sy0">==</span> <span class="sy0">-</span><span class="nu0">1</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">        <span class="co1">// Reconsider..</span></div></li><li class="li1"><div class="de1">        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><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></ol></pre></div><div class="nonumbers"><pre class="javascript" style="font-family:monospace;"><span class="co1">// We can also listen before an attribute changes its value, and </span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   590
<span class="co1">// decide if we want to allow the state change to occur or not. </span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   591
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   592
<span class="co1">// Invoking e.preventDefault() stops the state from being updated. </span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   593
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   594
<span class="co1">// In this case, Jane can change her mind about making herself </span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   595
<span class="co1">// unavailable, if John likes saving whales, as long as he doesn't </span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   596
<span class="co1">// dig knitting too.</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   597
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   598
jane.<span class="me1">on</span><span class="br0">&#40;</span><span class="st0">&quot;availableChange&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
   599
    <span class="kw2">var</span> johnsInterests <span class="sy0">=</span> john.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;interests&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   600
    <span class="kw2">var</span> janeAvailable <span class="sy0">=</span> e.<span class="me1">newVal</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   601
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   602
    <span class="kw1">if</span> <span class="br0">&#40;</span>janeAvailable <span class="sy0">===</span> <span class="kw2">false</span> <span class="sy0">&amp;&amp;</span> Y.<span class="me1">Array</span>.<span class="me1">indexOf</span><span class="br0">&#40;</span>johnsInterests<span class="sy0">,</span> <span class="st0">&quot;Saving Whales&quot;</span><span class="br0">&#41;</span> <span class="sy0">!==</span> <span class="sy0">-</span><span class="nu0">1</span> 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   603
            <span class="sy0">&amp;&amp;</span> Y.<span class="me1">Array</span>.<span class="me1">indexOf</span><span class="br0">&#40;</span>johnsInterests<span class="sy0">,</span> <span class="st0">&quot;Knitting&quot;</span><span class="br0">&#41;</span> <span class="sy0">==</span> <span class="sy0">-</span><span class="nu0">1</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   604
        <span class="co1">// Reconsider..</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   605
        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
   606
    <span class="br0">&#125;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   607
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div><textarea id="syntax4-plain">// We can also listen before an attribute changes its value, and 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   608
// decide if we want to allow the state change to occur or not. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   609
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   610
// Invoking e.preventDefault() stops the state from being updated. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   611
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   612
// In this case, Jane can change her mind about making herself 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   613
// unavailable, if John likes saving whales, as long as he doesn't 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   614
// dig knitting too.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   615
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   616
jane.on("availableChange", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   617
    var johnsInterests = john.get("interests");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   618
    var janeAvailable = e.newVal;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   619
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   620
    if (janeAvailable === false && Y.Array.indexOf(johnsInterests, "Saving Whales") !== -1 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   621
            && Y.Array.indexOf(johnsInterests, "Knitting") == -1 ) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   622
        // Reconsider..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   623
        e.preventDefault();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   624
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   625
});</textarea></div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   626
<p>We also set up an <em>"after"</em> listener on the <code>john</code> instance, which allows <code>jane</code> to update her interests, so she can admit to enjoying "Reading Specifications", if <code>john</code> admits it first:</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   627
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   628
<div id="syntax5" class="yui-syntax-highlight"><div class="numbers"><pre class="javascript" style="font-family:monospace;"><ol><li class="li1"><div class="de1"><span class="co1">// Consider updating Jane's interests state, after John's interests </span></div></li><li class="li1"><div class="de1"><span class="co1">// state changes...</span></div></li><li class="li1"><div class="de1">john.<span class="me1">after</span><span class="br0">&#40;</span><span class="st0">&quot;interestsChange&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">&nbsp;</div></li><li class="li2"><div class="de2">    <span class="kw2">var</span> janesInterests <span class="sy0">=</span> jane.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;interests&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">// Get john's new interests from the attribute change event...</span></div></li><li class="li1"><div class="de1">        johnsInterests <span class="sy0">=</span> e.<span class="me1">newVal</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">        readingSpecs <span class="sy0">=</span> <span class="st0">&quot;Reading Specifications&quot;</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">// If it turns out that John enjoys reading specs, then Jane can admit it too...</span></div></li><li class="li1"><div class="de1">    <span class="kw1">if</span> <span class="br0">&#40;</span>Y.<span class="me1">Array</span>.<span class="me1">indexOf</span><span class="br0">&#40;</span>johnsInterests<span class="sy0">,</span> readingSpecs<span class="br0">&#41;</span> <span class="sy0">!==</span> <span class="sy0">-</span><span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">if</span><span class="br0">&#40;</span>Y.<span class="me1">Array</span>.<span class="me1">indexOf</span><span class="br0">&#40;</span>janesInterests<span class="sy0">,</span> readingSpecs<span class="br0">&#41;</span> <span class="sy0">==</span> <span class="sy0">-</span><span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li2"><div class="de2">            janesInterests.<span class="me1">push</span><span class="br0">&#40;</span>readingSpecs<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="kw1">else</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">        <span class="co1">// Otherwise, we use Y.Array.reject, provided by the &quot;collection&quot; module, </span></div></li><li class="li1"><div class="de1">        <span class="co1">// to remove &quot;Reading Specifications&quot; from jane's interests..</span></div></li><li class="li2"><div class="de2">        janesInterests <span class="sy0">=</span> Y.<span class="me1">Array</span>.<span class="me1">reject</span><span class="br0">&#40;</span>janesInterests<span class="sy0">,</span> </div></li><li class="li1"><div class="de1">                            <span class="kw2">function</span><span class="br0">&#40;</span><span class="kw1">item</span><span class="br0">&#41;</span><span class="br0">&#123;</span><span class="kw1">return</span> <span class="br0">&#40;</span><span class="kw1">item</span> <span class="sy0">==</span> readingSpecs<span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</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">&nbsp;</div></li><li class="li1"><div class="de1">    jane.<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&quot;interests&quot;</span><span class="sy0">,</span> janesInterests<span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">    jane.<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&quot;available&quot;</span><span class="sy0">,</span> <span class="kw2">true</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">    ...</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">// Consider updating Jane's interests state, after John's interests </span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   629
<span class="co1">// state changes...</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   630
john.<span class="me1">after</span><span class="br0">&#40;</span><span class="st0">&quot;interestsChange&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
   631
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   632
    <span class="kw2">var</span> janesInterests <span class="sy0">=</span> jane.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;interests&quot;</span><span class="br0">&#41;</span><span class="sy0">,</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   633
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   634
        <span class="co1">// Get john's new interests from the attribute change event...</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   635
        johnsInterests <span class="sy0">=</span> e.<span class="me1">newVal</span><span class="sy0">,</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   636
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   637
        readingSpecs <span class="sy0">=</span> <span class="st0">&quot;Reading Specifications&quot;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   638
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   639
    <span class="co1">// If it turns out that John enjoys reading specs, then Jane can admit it too...</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   640
    <span class="kw1">if</span> <span class="br0">&#40;</span>Y.<span class="me1">Array</span>.<span class="me1">indexOf</span><span class="br0">&#40;</span>johnsInterests<span class="sy0">,</span> readingSpecs<span class="br0">&#41;</span> <span class="sy0">!==</span> <span class="sy0">-</span><span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   641
        <span class="kw1">if</span><span class="br0">&#40;</span>Y.<span class="me1">Array</span>.<span class="me1">indexOf</span><span class="br0">&#40;</span>janesInterests<span class="sy0">,</span> readingSpecs<span class="br0">&#41;</span> <span class="sy0">==</span> <span class="sy0">-</span><span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   642
            janesInterests.<span class="me1">push</span><span class="br0">&#40;</span>readingSpecs<span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   643
        <span class="br0">&#125;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   644
    <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   645
        <span class="co1">// Otherwise, we use Y.Array.reject, provided by the &quot;collection&quot; module, </span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   646
        <span class="co1">// to remove &quot;Reading Specifications&quot; from jane's interests..</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   647
        janesInterests <span class="sy0">=</span> Y.<span class="me1">Array</span>.<span class="me1">reject</span><span class="br0">&#40;</span>janesInterests<span class="sy0">,</span> 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   648
                            <span class="kw2">function</span><span class="br0">&#40;</span><span class="kw1">item</span><span class="br0">&#41;</span><span class="br0">&#123;</span><span class="kw1">return</span> <span class="br0">&#40;</span><span class="kw1">item</span> <span class="sy0">==</span> readingSpecs<span class="br0">&#41;</span><span class="sy0">;</span><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
   649
    <span class="br0">&#125;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   650
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   651
    jane.<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&quot;interests&quot;</span><span class="sy0">,</span> janesInterests<span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   652
    jane.<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&quot;available&quot;</span><span class="sy0">,</span> <span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">;</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   653
&nbsp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   654
    ...
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   655
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div><textarea id="syntax5-plain">// Consider updating Jane's interests state, after John's interests 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   656
// state changes...
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   657
john.after("interestsChange", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   658
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   659
    var janesInterests = jane.get("interests"),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   660
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   661
        // Get john's new interests from the attribute change event...
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   662
        johnsInterests = e.newVal,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   663
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   664
        readingSpecs = "Reading Specifications";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   665
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   666
    // If it turns out that John enjoys reading specs, then Jane can admit it too...
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   667
    if (Y.Array.indexOf(johnsInterests, readingSpecs) !== -1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   668
        if(Y.Array.indexOf(janesInterests, readingSpecs) == -1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   669
            janesInterests.push(readingSpecs);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   670
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   671
    } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   672
        // Otherwise, we use Y.Array.reject, provided by the "collection" module, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   673
        // to remove "Reading Specifications" from jane's interests..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   674
        janesInterests = Y.Array.reject(janesInterests, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   675
                            function(item){return (item == readingSpecs);});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   676
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   677
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   678
    jane.set("interests", janesInterests);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   679
    jane.set("available", true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   680
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   681
    ...
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   682
});</textarea></div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   683
<h4>Event Facade</h4>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   684
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   685
<p>The event object (an instance of <a href="../../api/EventFacade.html">EventFacade</a>) passed to attribute change event subscribers, has the following interesting properties and methods related to attribute management:</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   686
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   687
<dl>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   688
    <dt>newVal</dt>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   689
    <dd>The value which the attribute will be set to (in the case of <em>"on"</em> subscribers), or has been set to (in the case of <em>"after"</em> subscribers</dd>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   690
    <dt>prevVal</dt>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   691
    <dd>The value which the attribute is currently set to (in the case of <em>"on"</em> subscribers), or was previously set to (in the case of <em>"after"</em> subscribers</dd>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   692
    <dt>attrName</dt>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   693
    <dd>The name of the attribute which is being set</dd>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   694
    <dt>subAttrName</dt>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   695
    <dd>Attribute also allows you to set nested properties of attributes which have values which are objects through the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   696
    <code>set</code> method (e.g. <code>o1.set("x.y.z")</code>). This property will contain the path to the property which was changed.</dd>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   697
    <dt>preventDefault()<dt>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   698
    <dd>This method can be called in an <em>"on"</em> subscriber to prevent the attribute's value from being updated (the default behavior). Calling this method in an <em>"after"</em> listener has no impact, since the default behavior has already been invoked.</dd>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   699
    <dt>stopImmediatePropagation()</dt>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   700
    <dd>This method can be called in <em>"on"</em> or <em>"after"</em> subscribers, and will prevent the rest of the subscriber stack from
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   701
    being invoked, but will not prevent the attribute's value from being updated.</dd>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   702
</dl>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   703
				</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   704
				<div class="yui-u sidebar">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   705
					
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   706
				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   707
					<div id="examples" class="mod box4">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   708
                        <div class="hd">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   709
						<h4>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   710
    Attribute Examples:</h4>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   711
                        </div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   712
						<div class="bd">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   713
							<ul>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   714
								<li><a href='../attribute/attribute-basic.html'>Basic Attribute Configuration</a></li><li><a href='../attribute/attribute-rw.html'>Read-Only and Write-Once Attributes</a></li><li><a href='../attribute/attribute-event.html'>Attribute Change Events</a></li><li><a href='../attribute/attribute-basic-speeddate.html'>Attribute Based Speed Dating</a></li><li class='selected'><a href='../attribute/attribute-event-speeddate.html'>Attribute Event Based Speed Dating</a></li><li><a href='../attribute/attribute-getset.html'>Attribute Getters, Setters and Validators</a></li>							</ul>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   715
						</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   716
					</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   717
					
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   718
					<div class="mod box4">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   719
                        <div class="hd">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   720
						<h4>More Attribute Resources:</h4>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   721
                        </div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   722
                        <div class="bd">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   723
						<ul>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   724
							<!-- <li><a href="http://developer.yahoo.com/yui/attribute/">User's Guide</a> (external)</li> -->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   725
<li><a href="../../api/module_attribute.html">API Documentation</a></li></ul>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   726
                        </div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   727
					</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   728
			  </div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   729
		</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   730
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   731
		</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   732
	</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   733
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   734
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   735
<div class="yui-b toc3" id="tocWrapper">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   736
<!-- TABLE OF CONTENTS -->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   737
<div id="toc">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   738
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   739
<ul>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   740
<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="item"><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="selected "><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
   741
</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   742
</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   743
	</div><!--closes bd-->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   744
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   745
	<div id="ft">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   746
        <p class="first">Copyright &copy; 2009 Yahoo! Inc. All rights reserved.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   747
        <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
   748
            <a href="http://docs.yahoo.com/info/terms/">Terms of Service</a> - 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   749
            <a href="http://docs.yahoo.com/info/copyright/copyright.html">Copyright Policy</a> - 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   750
            <a href="http://careers.yahoo.com/">Job Openings</a></p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   751
	</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   752
</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   753
<script language="javascript"> 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   754
var yuiConfig = {base:"../../build/", timeout: 10000};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   755
</script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   756
<script src="../../assets/syntax.js"></script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   757
<script src="../../assets/dpSyntaxHighlighter.js"></script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   758
<script language="javascript"> 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   759
dp.SyntaxHighlighter.HighlightAll('code'); 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   760
</script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   761
</body>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   762
</html>