src/cm/media/js/lib/yui/yui_3.10.3/docs/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 525 89ef5ed3c48b
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
<!DOCTYPE html>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
<html lang="en">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
<head>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
    <meta charset="utf-8">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
    <title>Example: Attribute Event Based Speed Dating</title>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=PT+Sans:400,700,400italic,700italic">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
    <link rel="stylesheet" href="../../build/cssgrids/cssgrids-min.css">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
    <link rel="stylesheet" href="../assets/css/main.css">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
    <link rel="stylesheet" href="../assets/vendor/prettify/prettify-min.css">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
    <link rel="shortcut icon" type="image/png" href="../assets/favicon.png">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
    <script src="../../build/yui/yui-min.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
</head>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
<body>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
<!--
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
<a href="https://github.com/yui/yui3"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub"></a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
-->
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
<div id="doc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
    <div id="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
        <h1><img src="http://yuilibrary.com/img/yui-logo.png"></h1>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
            <h1>Example: Attribute Event Based Speed Dating</h1>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
    <div class="yui3-g">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
        <div class="yui3-u-3-4">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
            <div id="main">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
                <div class="content"><style type="text/css" scoped>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
    #speeddate h1 {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
        font-size: 108%;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
        color:#000;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
        margin-bottom:2em;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
    #john {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
        margin-bottom:10px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
    .interests.disabled, .reconsider.disabled {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
        color:#888;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
    #john .interest {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
        margin-left:5px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
    .sd-nametag {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
        border:1px solid #000;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
        text-align:center;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
        width:25em;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
        margin:20px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
        background-color:#00f;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
        border-radius: 10px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
        -webkit-border-radius: 10px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
        -moz-border-radius: 10px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
        box-shadow: 3px 3px 3px #888;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
        -moz-box-shadow: 3px 3px 3px #888;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
        -webkit-box-shadow: 3px 3px 3px #888;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
    .sd-nametag .sd-hd, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
    .sd-nametag .sd-ft {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
        padding:5px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
        text-align:center;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
        font-size:108%;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
        font-weight:900;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
        color:#fff;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
    .sd-nametag .sd-hd {    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
        border-top-right-radius: 10px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
        border-top-left-radius: 10px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
        -moz-border-radius-topright: 10px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
        -moz-border-radius-topleft: 10px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
        -webkit-border-top-right-radius: 10px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
        -webkit-border-top-left-radius: 10px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
    .sd-nametag .sd-ft {    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
        border-bottom-right-radius: 10px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
        border-bottom-left-radius: 10px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
        -moz-border-radius-bottomright: 10px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
        -moz-border-radius-bottomleft: 10px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
        -webkit-border-bottom-right-radius: 10px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
        -webkit-border-bottom-left-radius: 10px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
    .sd-nametag .sd-bd {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
        background-color:#fff;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
        padding:0.5em;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
    .sd-nametag .sd-bd .sd-name, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
    .sd-nametag .sd-bd .sd-personality, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
    .sd-nametag .sd-bd .sd-interests {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
        font-size:108%;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
        font-weight:900;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
        font-family:monospace;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
        text-decoration:underline;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
        color:#00a;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
</style>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
<div class="intro">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
    <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>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
    <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> 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
<div class="example">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
    <div id="speeddate">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
    <h1>Communicating With Attribute Events On Speed Dates</h1>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
    <div id="john">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
        <button type="button" class="hi">Hi, I'm John</button>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
        <span class="interests disabled">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
            I enjoy: 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
            <label><input type="checkbox" id="sunsets" class="interest" value="Sunsets" disabled="disabled"> Sunsets</label>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
            <label><input type="checkbox" id="specs" class="interest" value="Reading Specifications" disabled="disabled"> Reading Specifications</label> 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
            <label><input type="checkbox" id="whales" class="interest" value="Saving Whales" disabled="disabled"> Saving Whales</label>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
            <label><input type="checkbox" id="knitting" class="interest" value="Knitting" disabled="disabled"> Knitting</label>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
        </span>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
        <div class="shirt"></div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
    <div id="jane">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
        <button type="button" class="hi" disabled="disabled">Hey, I'm Jane</button>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
        <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>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
        <div class="shirt"></div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
<script type="text/javascript">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
// Get a new instance of YUI and 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
// load it with the required set of modules
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
YUI().use("collection", "event", "node", "attribute", function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
    // Setup custom class which we want to add managed attribute support to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
    function SpeedDater(cfg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
        // When constructed, setup the initial attributes for the instance, by calling the addAttrs method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
        var attrs = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
            name : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
                writeOnce:true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
            personality : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
                value:50
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
            available : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
                value:true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
            }, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
            interests : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
                value : []
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
        this.addAttrs(attrs, cfg);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
    // The HTML template representing the SpeedDater name tag.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
    SpeedDater.NAMETAG = '<div class="sd-nametag"> \
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
                            <div class="sd-hd">Hello!</div> \
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
                            <div class="sd-bd"> \
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
                                <p>I\'m <span class="sd-name">{name}</span> and my PersonalityQuotientIndex is <span class="sd-personality">{personality}</span></p> \
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
                                <p>I enjoy <span class="sd-interests">{interests}</span>.</p> \
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
                            </div> \
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
                            <div class="sd-ft sd-availability">{available}</div> \
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
                         </div>';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
    // Method used to render the visual representation of a SpeedDater object's state (in this case as a name tag)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
    SpeedDater.prototype.applyNameTag = function(where) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
        var tokens = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
            name: this.get("name"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
            available: (this.get("available")) ? "" : "Sorry, moving on",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
            personality: this.get("personality"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
            interests: (this.get("interests").length == 0) ? "absolutely nothing" : this.get("interests").join(", ")
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
        this.nameTag = Y.Node.create(Y.Lang.sub(SpeedDater.NAMETAG, tokens));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
        Y.one(where).appendChild(this.nameTag);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
        this.listenForChanges();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
    // Method used to attach attribute change event listeners, so that the SpeedDater instance 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
    // will react to changes in attribute state, and update what's rendered on the page
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
    SpeedDater.prototype.listenForChanges = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
        // Sync up the UI for "available", after the value of the "available" attribute has changed:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
        this.after("availableChange", function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
            var taken = (e.newVal) ? "" : "Oh, is that the time?";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
            this.nameTag.one(".sd-availability").set("innerHTML", taken);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
        // Sync up the UI for "name", after the value of the "name" attribute has changed:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
        this.after("nameChange", function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
            var name = e.newVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
            this.nameTag.one(".sd-name").set("innerHTML", name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
        // Sync up the UI for "personality", after the value of the "personality" attribute has changed:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
        this.after("personalityChange", function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
            var personality = e.newVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
            var personalityEl = this.nameTag.one(".sd-personality");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
            personalityEl.set("innerHTML", personality);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
            if (personality > 90) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
                personalityEl.addClass("sd-max");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
        // Sync up the UI for "interests", after the value of the "interests" attribute has changed:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
        this.after("interestsChange", function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
            var interests = (e.newVal.length == 0) ? "absolutely nothing" : this.get("interests").join(", ");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
            this.nameTag.one(".sd-interests").set("innerHTML", interests);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
    // Augment custom class with Attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
    Y.augment(SpeedDater, Y.Attribute);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
    var john, jane;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
    Y.on("click", function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
        if (!john) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
            john = new SpeedDater({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
                name: "John",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
                personality: 78
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
            john.applyNameTag("#john .shirt");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
            Y.one("#jane .hi").set("disabled", false); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
    }, "#john .hi");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
    Y.on("click", function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
        if (!jane) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
            jane = new SpeedDater({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
                name: "Jane",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
                personality: 82,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
                interests: ["Popcorn", "Saving Whales"]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
            jane.applyNameTag("#jane .shirt");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
            // Update Jane's interests state, after John's interests state changes...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
            john.after("interestsChange", function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
                var janesInterests = jane.get("interests"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
                    johnsInterests = e.newVal,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
                    readingSpecs = "Reading Specifications";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
                // If it turns out that John enjoys reading specs, then Jane can admit it too...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
                if (Y.Array.indexOf(johnsInterests, readingSpecs) !== -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
                    if(Y.Array.indexOf(janesInterests, readingSpecs) == -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
                        janesInterests.push(readingSpecs);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
                    janesInterests = Y.Array.reject(janesInterests, function(item){return (item == readingSpecs);});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
                jane.set("interests", janesInterests);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
                jane.set("available", true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
                setMessage("");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
            // We can also listen before an attribute changes its value, and decide if we want to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
            // allow the state change to occur or not. Invoking e.preventDefault() stops the state from
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
            // being updated. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
            // In this case, Jane can change her mind about making herself unavailable, if John likes 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
            // saving whales, as long as he doesn't dig knitting too.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
            jane.on("availableChange", function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
                var johnsInterests = john.get("interests");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
                var janeAvailable = e.newVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
                if (janeAvailable === false && Y.Array.indexOf(johnsInterests, "Saving Whales") !== -1 &&  Y.Array.indexOf(johnsInterests, "Knitting") == -1 ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
                    // Reconsider..
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
                    e.preventDefault();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
                    setMessage("... which he does");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
                };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
            enableExampleUI();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
    }, "#jane .hi");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
    Y.on("click", function() { 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
        jane.set("available", false); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
    }, "#jane .movingOn");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
    // A delegate DOM event listener which will update John's interests, based on the checkbox state, whenever
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
    // a checkbox is clicked. (Using click for IE, due to it's weirdness with requiring a blur before firing change)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
    Y.delegate("click", function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
        var interests = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
        Y.Node.all("#john input[type=checkbox].interest").each(function(checkbox) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
            if (checkbox.get("checked")) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
                interests.push(checkbox.get("value"));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
        john.set("interests", interests);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
    }, "#john", "input[type=checkbox].interest");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
    // Example helpers...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
    function enableExampleUI() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
        Y.all("#jane button").set("disabled", false);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
        Y.all("#john button").set("disabled", false);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
        Y.all("#john input").set("disabled", false);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
        Y.one("#john .interests").removeClass("disabled");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
        Y.one("#jane .reconsider").removeClass("disabled");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
    function setMessage(msg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
        Y.one("#jane .message").set("innerHTML", msg);      
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
 });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
<h2>Listening For Attribute Change Events</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
<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, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
using the <code>SpeedDater</code> class, introduced in the <a href="attribute-basic-speeddate.html">"Attribute Based Speed Dating" example</a>.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
<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, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
and externally, to have <code>jane</code> react to changes in the <code>john</code>'s state.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
<h3>Setting Up The SpeedDater Class With Attribute</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
<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>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
<pre class="code prettyprint">&#x2F;&#x2F; Setup custom class which we want to add managed attribute support to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
function SpeedDater(cfg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
    &#x2F;&#x2F; When constructed, setup the initial attributes for the instance, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
    &#x2F;&#x2F; by calling the addAttrs method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
    var attrs = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
        name : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
            writeOnce:true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
        personality : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
            value:50
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
        available : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
            value:true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
        }, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
        interests : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
            value : []
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
    this.addAttrs(attrs, cfg);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
&#x2F;&#x2F; Augment custom class with Attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
Y.augment(SpeedDater, Y.Attribute);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
<p>We then create two instances of SpeedDaters, <code>jane</code> and <code>john</code>:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
<pre class="code prettyprint">&#x2F;&#x2F; Create a john instance...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
john = new SpeedDater({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
    name: &quot;John&quot;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
    personality: 78
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
&#x2F;&#x2F; ... and render to the page
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
john.applyNameTag(&quot;#john .shirt&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
&#x2F;&#x2F; Create a jane instance...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
jane = new SpeedDater({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
    name: &quot;Jane&quot;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
    personality: 82,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
    interests: [&quot;Popcorn&quot;, &quot;Saving Whales&quot;]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
jane.applyNameTag(&quot;#jane .shirt&quot;);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
<h3>Registering Event Listeners</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
<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. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
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>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
<pre class="code prettyprint">&#x2F;&#x2F; Method used to attach attribute change event listeners, so that 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
&#x2F;&#x2F; the SpeedDater instance will react to changes in attribute state, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
&#x2F;&#x2F; and update what&#x27;s rendered on the page
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
SpeedDater.prototype.listenForChanges = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
    &#x2F;&#x2F; Sync up the UI for &quot;available&quot;, after the value of the &quot;available&quot; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
    &#x2F;&#x2F; attribute has changed:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
    this.after(&quot;availableChange&quot;, function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
        var taken = (e.newVal) ? &quot;&quot; : &quot;Oh, is that the time?&quot;;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
        this.nameTag.one(&quot;.sd-availability&quot;).set(&quot;innerHTML&quot;, taken);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
    &#x2F;&#x2F; Sync up the UI for &quot;name&quot;, after the value of the &quot;name&quot; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
    &#x2F;&#x2F; attribute has changed:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
    this.after(&quot;nameChange&quot;, function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
        var name = e.newVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
        this.nameTag.one(&quot;.sd-name&quot;).set(&quot;innerHTML&quot;, name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
    &#x2F;&#x2F; Sync up the UI for &quot;personality&quot;, after the value of the &quot;personality&quot; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
    &#x2F;&#x2F; attribute has changed:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
    this.after(&quot;personalityChange&quot;, function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
        var personality = e.newVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
        var personalityEl = this.nameTag.one(&quot;.sd-personality&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
        personalityEl.set(&quot;innerHTML&quot;, personality);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
        if (personality &gt; 90) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
            personalityEl.addClass(&quot;sd-max&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
    &#x2F;&#x2F; Sync up the UI for &quot;interests&quot;, after the value of the &quot;interests&quot; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
    &#x2F;&#x2F; attribute has changed:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
    this.after(&quot;interestsChange&quot;, function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
        var interests = (e.newVal.length == 0) ? 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
                    &quot;absolutely nothing&quot; : this.get(&quot;interests&quot;).join(&quot;, &quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
        this.nameTag.one(&quot;.sd-interests&quot;).set(&quot;innerHTML&quot;, interests);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
};</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
As seen in the above code, the event type for attribute change events is created by concatenating the attribute name with <code>&quot;Change&quot;</code> (e.g. <code>&quot;availableChange&quot;</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.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
<p> 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
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. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
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.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
<h3>On vs. After</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
<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> 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
<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, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
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. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
However the event facade provides access to the value which the attribute is being set to, through it's <code>newVal</code> property.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
<p><strong>after :</strong> Subscribers to the <em>"after"</em> moment, will be notified <em>after</em> the attribute's state has been updated. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
This provides the opportunity to update state in other parts of your application, in response to a change in the attribute's state.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   469
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   470
<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>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   471
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   472
<h3>Having Jane React To John</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   473
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   474
<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, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   475
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>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   476
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   477
<pre class="code prettyprint">&#x2F;&#x2F; We can also listen before an attribute changes its value, and 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   478
&#x2F;&#x2F; decide if we want to allow the state change to occur or not. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   479
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   480
&#x2F;&#x2F; Invoking e.preventDefault() stops the state from being updated. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   481
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   482
&#x2F;&#x2F; In this case, Jane can change her mind about making herself 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   483
&#x2F;&#x2F; unavailable, if John likes saving whales, as long as he doesn&#x27;t 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   484
&#x2F;&#x2F; dig knitting too.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   485
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   486
jane.on(&quot;availableChange&quot;, function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   487
    var johnsInterests = john.get(&quot;interests&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   488
    var janeAvailable = e.newVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   489
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   490
    if (janeAvailable === false &amp;&amp; Y.Array.indexOf(johnsInterests, &quot;Saving Whales&quot;) !== -1 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   491
            &amp;&amp; Y.Array.indexOf(johnsInterests, &quot;Knitting&quot;) == -1 ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   492
        &#x2F;&#x2F; Reconsider..
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   493
        e.preventDefault();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   494
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   495
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   496
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   497
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   498
<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>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   499
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   500
<pre class="code prettyprint">&#x2F;&#x2F; Consider updating Jane&#x27;s interests state, after John&#x27;s interests 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   501
&#x2F;&#x2F; state changes...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   502
john.after(&quot;interestsChange&quot;, function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   503
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   504
    var janesInterests = jane.get(&quot;interests&quot;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   505
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   506
        &#x2F;&#x2F; Get john&#x27;s new interests from the attribute change event...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   507
        johnsInterests = e.newVal,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   508
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   509
        readingSpecs = &quot;Reading Specifications&quot;;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   510
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   511
    &#x2F;&#x2F; If it turns out that John enjoys reading specs, then Jane can admit it too...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   512
    if (Y.Array.indexOf(johnsInterests, readingSpecs) !== -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   513
        if(Y.Array.indexOf(janesInterests, readingSpecs) == -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   514
            janesInterests.push(readingSpecs);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   515
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   516
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   517
        &#x2F;&#x2F; Otherwise, we use Y.Array.reject, provided by the &quot;collection&quot; module, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   518
        &#x2F;&#x2F; to remove &quot;Reading Specifications&quot; from jane&#x27;s interests..
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   519
        janesInterests = Y.Array.reject(janesInterests, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   520
                            function(item){return (item == readingSpecs);});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   521
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   522
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   523
    jane.set(&quot;interests&quot;, janesInterests);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   524
    jane.set(&quot;available&quot;, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   526
    ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   527
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   528
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   529
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   530
<h3>Event Facade</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   531
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   532
<p>The event object (an instance of <a href="http://yuilibrary.com/yui/docs/api/EventFacade.html">EventFacade</a>) passed to attribute change event subscribers, has the following interesting properties and methods related to attribute management:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   533
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   534
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   535
    <dt>newVal</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   536
    <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>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   537
    <dt>prevVal</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   538
    <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>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   539
    <dt>attrName</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   540
    <dd>The name of the attribute which is being set</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   541
    <dt>subAttrName</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   542
    <dd>Attribute also allows you to set nested properties of attributes which have values which are objects through the 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   543
    <code>set</code> method (e.g. <code>o1.set(&quot;x.y.z&quot;)</code>). This property will contain the path to the property which was changed.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   544
    <dt>preventDefault()<dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   545
    <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>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   546
    <dt>stopImmediatePropagation()</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   547
    <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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   548
    being invoked, but will not prevent the attribute's value from being updated.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   549
</dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   550
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   551
<h2>Complete Example Source</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   552
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   553
<pre class="code prettyprint">&lt;div id=&quot;speeddate&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   554
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   555
    &lt;h1&gt;Communicating With Attribute Events On Speed Dates&lt;&#x2F;h1&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   556
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   557
    &lt;div id=&quot;john&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   558
        &lt;button type=&quot;button&quot; class=&quot;hi&quot;&gt;Hi, I&#x27;m John&lt;&#x2F;button&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   559
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   560
        &lt;span class=&quot;interests disabled&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   561
            I enjoy: 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   562
            &lt;label&gt;&lt;input type=&quot;checkbox&quot; id=&quot;sunsets&quot; class=&quot;interest&quot; value=&quot;Sunsets&quot; disabled=&quot;disabled&quot;&gt; Sunsets&lt;&#x2F;label&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   563
            &lt;label&gt;&lt;input type=&quot;checkbox&quot; id=&quot;specs&quot; class=&quot;interest&quot; value=&quot;Reading Specifications&quot; disabled=&quot;disabled&quot;&gt; Reading Specifications&lt;&#x2F;label&gt; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   564
            &lt;label&gt;&lt;input type=&quot;checkbox&quot; id=&quot;whales&quot; class=&quot;interest&quot; value=&quot;Saving Whales&quot; disabled=&quot;disabled&quot;&gt; Saving Whales&lt;&#x2F;label&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   565
            &lt;label&gt;&lt;input type=&quot;checkbox&quot; id=&quot;knitting&quot; class=&quot;interest&quot; value=&quot;Knitting&quot; disabled=&quot;disabled&quot;&gt; Knitting&lt;&#x2F;label&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   566
        &lt;&#x2F;span&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   567
        &lt;div class=&quot;shirt&quot;&gt;&lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   568
    &lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   569
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   570
    &lt;div id=&quot;jane&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   571
        &lt;button type=&quot;button&quot; class=&quot;hi&quot; disabled=&quot;disabled&quot;&gt;Hey, I&#x27;m Jane&lt;&#x2F;button&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   572
        &lt;button type=&quot;button&quot; class=&quot;movingOn&quot; disabled=&quot;disabled&quot;&gt;I&#x27;m Moving On...&lt;&#x2F;button&gt; &lt;span class=&quot;reconsider disabled&quot;&gt;(unless he likes whales, and avoids knitting &lt;em class=&quot;message&quot;&gt;&lt;&#x2F;em&gt;)&lt;&#x2F;span&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   573
        &lt;div class=&quot;shirt&quot;&gt;&lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   574
    &lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   575
&lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   576
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   577
&lt;script type=&quot;text&#x2F;javascript&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   578
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   579
&#x2F;&#x2F; Get a new instance of YUI and 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   580
&#x2F;&#x2F; load it with the required set of modules
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   581
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   582
YUI().use(&quot;collection&quot;, &quot;event&quot;, &quot;node&quot;, &quot;attribute&quot;, function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   583
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   584
    &#x2F;&#x2F; Setup custom class which we want to add managed attribute support to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   585
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   586
    function SpeedDater(cfg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   587
        &#x2F;&#x2F; When constructed, setup the initial attributes for the instance, by calling the addAttrs method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   588
        var attrs = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   589
            name : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   590
                writeOnce:true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   591
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   592
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   593
            personality : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   594
                value:50
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   595
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   596
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   597
            available : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   598
                value:true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   599
            }, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   600
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   601
            interests : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   602
                value : []
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   603
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   604
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   605
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   606
        this.addAttrs(attrs, cfg);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   607
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   608
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   609
    &#x2F;&#x2F; The HTML template representing the SpeedDater name tag.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   610
    SpeedDater.NAMETAG = &#x27;&lt;div class=&quot;sd-nametag&quot;&gt; \
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   611
                            &lt;div class=&quot;sd-hd&quot;&gt;Hello!&lt;&#x2F;div&gt; \
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   612
                            &lt;div class=&quot;sd-bd&quot;&gt; \
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   613
                                &lt;p&gt;I\&#x27;m &lt;span class=&quot;sd-name&quot;&gt;{name}&lt;&#x2F;span&gt; and my PersonalityQuotientIndex is &lt;span class=&quot;sd-personality&quot;&gt;{personality}&lt;&#x2F;span&gt;&lt;&#x2F;p&gt; \
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   614
                                &lt;p&gt;I enjoy &lt;span class=&quot;sd-interests&quot;&gt;{interests}&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt; \
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   615
                            &lt;&#x2F;div&gt; \
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   616
                            &lt;div class=&quot;sd-ft sd-availability&quot;&gt;{available}&lt;&#x2F;div&gt; \
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   617
                         &lt;&#x2F;div&gt;&#x27;;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   618
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   619
    &#x2F;&#x2F; Method used to render the visual representation of a SpeedDater object&#x27;s state (in this case as a name tag)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   620
    SpeedDater.prototype.applyNameTag = function(where) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   621
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   622
        var tokens = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   623
            name: this.get(&quot;name&quot;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   624
            available: (this.get(&quot;available&quot;)) ? &quot;&quot; : &quot;Sorry, moving on&quot;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   625
            personality: this.get(&quot;personality&quot;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   626
            interests: (this.get(&quot;interests&quot;).length == 0) ? &quot;absolutely nothing&quot; : this.get(&quot;interests&quot;).join(&quot;, &quot;)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   627
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   628
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   629
        this.nameTag = Y.Node.create(Y.Lang.sub(SpeedDater.NAMETAG, tokens));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   630
        Y.one(where).appendChild(this.nameTag);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   631
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   632
        this.listenForChanges();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   633
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   634
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   635
    &#x2F;&#x2F; Method used to attach attribute change event listeners, so that the SpeedDater instance 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   636
    &#x2F;&#x2F; will react to changes in attribute state, and update what&#x27;s rendered on the page
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   637
    SpeedDater.prototype.listenForChanges = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   638
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   639
        &#x2F;&#x2F; Sync up the UI for &quot;available&quot;, after the value of the &quot;available&quot; attribute has changed:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   640
        this.after(&quot;availableChange&quot;, function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   641
            var taken = (e.newVal) ? &quot;&quot; : &quot;Oh, is that the time?&quot;;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   642
            this.nameTag.one(&quot;.sd-availability&quot;).set(&quot;innerHTML&quot;, taken);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   643
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   644
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   645
        &#x2F;&#x2F; Sync up the UI for &quot;name&quot;, after the value of the &quot;name&quot; attribute has changed:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   646
        this.after(&quot;nameChange&quot;, function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   647
            var name = e.newVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   648
            this.nameTag.one(&quot;.sd-name&quot;).set(&quot;innerHTML&quot;, name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   649
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   650
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   651
        &#x2F;&#x2F; Sync up the UI for &quot;personality&quot;, after the value of the &quot;personality&quot; attribute has changed:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   652
        this.after(&quot;personalityChange&quot;, function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   653
            var personality = e.newVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   654
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   655
            var personalityEl = this.nameTag.one(&quot;.sd-personality&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   656
            personalityEl.set(&quot;innerHTML&quot;, personality);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   657
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   658
            if (personality &gt; 90) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   659
                personalityEl.addClass(&quot;sd-max&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   660
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   661
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   662
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   663
        &#x2F;&#x2F; Sync up the UI for &quot;interests&quot;, after the value of the &quot;interests&quot; attribute has changed:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   664
        this.after(&quot;interestsChange&quot;, function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   665
            var interests = (e.newVal.length == 0) ? &quot;absolutely nothing&quot; : this.get(&quot;interests&quot;).join(&quot;, &quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   666
            this.nameTag.one(&quot;.sd-interests&quot;).set(&quot;innerHTML&quot;, interests);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   667
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   668
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   669
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   670
    &#x2F;&#x2F; Augment custom class with Attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   671
    Y.augment(SpeedDater, Y.Attribute);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   672
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   673
    var john, jane;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   674
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   675
    Y.on(&quot;click&quot;, function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   676
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   677
        if (!john) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   678
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   679
            john = new SpeedDater({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   680
                name: &quot;John&quot;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   681
                personality: 78
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   682
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   683
            john.applyNameTag(&quot;#john .shirt&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   684
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   685
            Y.one(&quot;#jane .hi&quot;).set(&quot;disabled&quot;, false); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   686
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   687
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   688
    }, &quot;#john .hi&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   689
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   690
    Y.on(&quot;click&quot;, function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   691
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   692
        if (!jane) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   693
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   694
            jane = new SpeedDater({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   695
                name: &quot;Jane&quot;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   696
                personality: 82,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   697
                interests: [&quot;Popcorn&quot;, &quot;Saving Whales&quot;]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   698
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   699
            jane.applyNameTag(&quot;#jane .shirt&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   700
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   701
            &#x2F;&#x2F; Update Jane&#x27;s interests state, after John&#x27;s interests state changes...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   702
            john.after(&quot;interestsChange&quot;, function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   703
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   704
                var janesInterests = jane.get(&quot;interests&quot;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   705
                    johnsInterests = e.newVal,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   706
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   707
                    readingSpecs = &quot;Reading Specifications&quot;;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   708
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   709
                &#x2F;&#x2F; If it turns out that John enjoys reading specs, then Jane can admit it too...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   710
                if (Y.Array.indexOf(johnsInterests, readingSpecs) !== -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   711
                    if(Y.Array.indexOf(janesInterests, readingSpecs) == -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   712
                        janesInterests.push(readingSpecs);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   713
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   714
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   715
                    janesInterests = Y.Array.reject(janesInterests, function(item){return (item == readingSpecs);});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   716
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   717
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   718
                jane.set(&quot;interests&quot;, janesInterests);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   719
                jane.set(&quot;available&quot;, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   720
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   721
                setMessage(&quot;&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   722
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   723
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   724
            &#x2F;&#x2F; We can also listen before an attribute changes its value, and decide if we want to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   725
            &#x2F;&#x2F; allow the state change to occur or not. Invoking e.preventDefault() stops the state from
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   726
            &#x2F;&#x2F; being updated. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   727
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   728
            &#x2F;&#x2F; In this case, Jane can change her mind about making herself unavailable, if John likes 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   729
            &#x2F;&#x2F; saving whales, as long as he doesn&#x27;t dig knitting too.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   730
 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   731
            jane.on(&quot;availableChange&quot;, function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   732
                var johnsInterests = john.get(&quot;interests&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   733
                var janeAvailable = e.newVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   734
                if (janeAvailable === false &amp;&amp; Y.Array.indexOf(johnsInterests, &quot;Saving Whales&quot;) !== -1 &amp;&amp;  Y.Array.indexOf(johnsInterests, &quot;Knitting&quot;) == -1 ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   735
                    &#x2F;&#x2F; Reconsider..
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   736
                    e.preventDefault();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   737
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   738
                    setMessage(&quot;... which he does&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   739
                };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   740
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   741
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   742
            enableExampleUI();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   743
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   744
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   745
    }, &quot;#jane .hi&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   746
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   747
    Y.on(&quot;click&quot;, function() { 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   748
        jane.set(&quot;available&quot;, false); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   749
    }, &quot;#jane .movingOn&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   750
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   751
    &#x2F;&#x2F; A delegate DOM event listener which will update John&#x27;s interests, based on the checkbox state, whenever
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   752
    &#x2F;&#x2F; a checkbox is clicked. (Using click for IE, due to it&#x27;s weirdness with requiring a blur before firing change)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   753
    Y.delegate(&quot;click&quot;, function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   754
        var interests = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   755
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   756
        Y.Node.all(&quot;#john input[type=checkbox].interest&quot;).each(function(checkbox) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   757
            if (checkbox.get(&quot;checked&quot;)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   758
                interests.push(checkbox.get(&quot;value&quot;));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   759
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   760
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   761
        john.set(&quot;interests&quot;, interests);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   762
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   763
    }, &quot;#john&quot;, &quot;input[type=checkbox].interest&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   764
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   765
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   766
    &#x2F;&#x2F; Example helpers...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   767
    function enableExampleUI() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   768
        Y.all(&quot;#jane button&quot;).set(&quot;disabled&quot;, false);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   769
        Y.all(&quot;#john button&quot;).set(&quot;disabled&quot;, false);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   770
        Y.all(&quot;#john input&quot;).set(&quot;disabled&quot;, false);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   771
        Y.one(&quot;#john .interests&quot;).removeClass(&quot;disabled&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   772
        Y.one(&quot;#jane .reconsider&quot;).removeClass(&quot;disabled&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   773
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   774
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   775
    function setMessage(msg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   776
        Y.one(&quot;#jane .message&quot;).set(&quot;innerHTML&quot;, msg);      
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   777
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   778
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   779
 });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   780
&lt;&#x2F;script&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   781
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   782
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   783
            </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   784
        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   785
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   786
        <div class="yui3-u-1-4">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   787
            <div class="sidebar">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   788
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   789
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   790
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   791
                    <div class="sidebox">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   792
                        <div class="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   793
                            <h2 class="no-toc">Examples</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   794
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   795
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   796
                        <div class="bd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   797
                            <ul class="examples">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   798
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   799
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   800
                                        <li data-description="Use the Attribute API to define, set and get attribute values.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   801
                                            <a href="attribute-basic.html">Basic Attribute Configuration</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   802
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   803
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   804
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   805
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   806
                                        <li data-description="Configure attributes to be readOnly or writeOnce.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   807
                                            <a href="attribute-rw.html">Read-Only and Write-Once Attributes</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   808
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   809
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   810
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   811
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   812
                                        <li data-description="How to listen for changes in attribute values.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   813
                                            <a href="attribute-event.html">Attribute Change Events</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   814
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   815
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   816
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   817
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   818
                                        <li data-description="Create a basic SpeedDater class, with Attribute support.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   819
                                            <a href="attribute-basic-speeddate.html">Attribute Based Speed Dating</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   820
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   821
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   822
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   823
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   824
                                        <li data-description="Refactors the basic Speed Dating example, to use attribute change events to update rendered elements, and have two instances react to another.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   825
                                            <a href="attribute-event-speeddate.html">Attribute Event Based Speed Dating</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   826
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   827
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   828
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   829
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   830
                                        <li data-description="Add custom methods to get and set attribute values and provide validation support.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   831
                                            <a href="attribute-getset.html">Attribute Getters, Setters and Validators</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   832
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   833
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   834
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   835
                            </ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   836
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   837
                    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   838
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   839
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   840
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   841
            </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   842
        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   843
    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   844
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   845
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   846
<script src="../assets/vendor/prettify/prettify-min.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   847
<script>prettyPrint();</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   848
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   849
<script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   850
YUI.Env.Tests = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   851
    examples: [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   852
    project: '../assets',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   853
    assets: '../assets/attribute',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   854
    name: 'attribute-event-speeddate',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   855
    title: 'Attribute Event Based Speed Dating',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   856
    newWindow: '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   857
    auto:  false 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   858
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   859
YUI.Env.Tests.examples.push('attribute-basic');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   860
YUI.Env.Tests.examples.push('attribute-rw');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   861
YUI.Env.Tests.examples.push('attribute-event');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   862
YUI.Env.Tests.examples.push('attribute-basic-speeddate');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   863
YUI.Env.Tests.examples.push('attribute-event-speeddate');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   864
YUI.Env.Tests.examples.push('attribute-getset');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   865
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   866
</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   867
<script src="../assets/yui/test-runner.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   868
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   869
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   870
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   871
</body>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   872
</html>