src/cm/media/js/lib/yui/yui3.0.0/examples/attribute/attribute-event-speeddate_clean.html
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 0 40c8f766c9b8
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
<html>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
<head>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
<meta http-equiv="content-type" content="text/html; charset=utf-8">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
<title>Attribute Event Based Speed Dating</title>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
<style type="text/css">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
/*margin and padding on body element
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
  can introduce errors in determining
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
  element position and are not recommended;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
  we turn them off as a foundation for YUI
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
  CSS treatments. */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
body {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
	margin:0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
	padding:0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
</style>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
<link type="text/css" rel="stylesheet" href="../../build/cssfonts/fonts-min.css" />
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
<script type="text/javascript" src="../../build/yui/yui-min.js"></script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
<!--begin custom header content for this example-->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
<style type="text/css">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
    #speeddate h1 {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
        font-size: 108%;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
        color:#000;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
        margin-bottom:2em;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
    #john {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
        margin-bottom:10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
    .interests.disabled, .reconsider.disabled {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
        color:#888;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
    #john .interest {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
        margin-left:5px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
    .sd-nametag {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
        border:1px solid #000;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
        text-align:center;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
        width:25em;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
        margin:20px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
        background-color:#00f;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
        border-radius: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
        -webkit-border-radius: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
        -moz-border-radius: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
        box-shadow: 3px 3px 3px #888;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
        -moz-box-shadow: 3px 3px 3px #888;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
        -webkit-box-shadow: 3px 3px 3px #888;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
    .sd-nametag .sd-hd, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
    .sd-nametag .sd-ft {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
        padding:5px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
        text-align:center;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
        font-size:108%;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
        font-weight:900;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
        color:#fff;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
    .sd-nametag .sd-hd {    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
        border-top-right-radius: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
        border-top-left-radius: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
        -moz-border-radius-topright: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
        -moz-border-radius-topleft: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
        -webkit-border-top-right-radius: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
        -webkit-border-top-left-radius: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
    .sd-nametag .sd-ft {    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
        border-bottom-right-radius: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
        border-bottom-left-radius: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
        -moz-border-radius-bottomright: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
        -moz-border-radius-bottomleft: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
        -webkit-border-bottom-right-radius: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
        -webkit-border-bottom-left-radius: 10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
    .sd-nametag .sd-bd {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
        background-color:#fff;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
        padding:0.5em;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
    .sd-nametag .sd-bd .sd-name, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
    .sd-nametag .sd-bd .sd-personality, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
    .sd-nametag .sd-bd .sd-interests {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
        font-size:108%;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
        font-weight:900;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
        font-family:monospace;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
        text-decoration:underline;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
        color:#00a;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
</style>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
<!--end custom header content for this example-->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
</head>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
<body class=" yui-skin-sam">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
<h1>Attribute Event Based Speed Dating</h1>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
<div class="exampleIntro">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
	<p>Attribute change events are one of the key benefits of using attributes to maintain state for your objects, instead of regular object properties.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
<p>This example refactors the basic <a href="attribute-basic-speeddate.html">"Attribute Based Speed Dating" example</a> to shows how you can listen for attribute change events to tie together your object's internal logic (such as updating the visual presentation of the object), and also to communicate with other objects.</p> 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
<!--BEGIN SOURCE CODE FOR EXAMPLE =============================== -->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
<div id="speeddate">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
    <h1>Communicating With Attribute Events On Speed Dates</h1>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
    <div id="john">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
        <button type="button" class="hi">Hi, I'm John</button>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
        <span class="interests disabled">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
            I enjoy: 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
            <label><input type="checkbox" class="interest" value="Sunsets" disabled="disabled"> Sunsets</label>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
            <label><input type="checkbox" class="interest" value="Reading Specifications" disabled="disabled"> Reading Specifications</label> 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
            <label><input type="checkbox" class="interest" value="Saving Whales" disabled="disabled"> Saving Whales</label>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
            <label><input type="checkbox" class="interest" value="Knitting" disabled="disabled"> Knitting</label>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
        </span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
        <div class="shirt"></div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
    </div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
    <div id="jane">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
        <button type="button" class="hi" disabled="disabled">Hey, I'm Jane</button>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
        <button type="button" class="movingOn" disabled="disabled">I'm Moving On...</button> <span class="reconsider disabled">(unless he likes whales, and avoids knitting <em class="message"></em>)</span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
        <div class="shirt"></div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
    </div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
<script type="text/javascript">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
// Get a new instance of YUI and 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
// load it with the required set of modules
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
YUI({base:"../../build/", timeout: 10000}).use("collection", "event-delegate", "node", "attribute", "substitute", function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
    // Setup custom class which we want to add managed attribute support to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
    function SpeedDater(cfg) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
        // When constructed, setup the initial attributes for the instance, by calling the addAttrs method.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
        var attrs = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
            name : {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
                writeOnce:true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
            personality : {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
                value:50
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
            available : {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
                value:true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
            }, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
            interests : {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
                value : []
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
        };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
        this.addAttrs(attrs, cfg);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
    // The HTML template representing the SpeedDater name tag.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
    SpeedDater.NAMETAG = '<div class="sd-nametag"> \
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
                            <div class="sd-hd">Hello!</div> \
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
                            <div class="sd-bd"> \
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
                                <p>I\'m <span class="sd-name">{name}</span> and my PersonalityQuotientIndex is <span class="sd-personality">{personality}</span></p> \
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
                                <p>I enjoy <span class="sd-interests">{interests}</span>.</p> \
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
                            </div> \
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
                            <div class="sd-ft sd-availability">{available}</div> \
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
                         </div>';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
    // Method used to render the visual representation of a SpeedDater object's state (in this case as a name tag)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
    SpeedDater.prototype.applyNameTag = function(where) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
        var tokens = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
            name: this.get("name"),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
            available: (this.get("available")) ? "" : "Sorry, moving on",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
            personality: this.get("personality"),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
            interests: (this.get("interests").length == 0) ? "absolutely nothing" : this.get("interests").join(", ")
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
        };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
        this.nameTag = Y.Node.create(Y.substitute(SpeedDater.NAMETAG, tokens));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
        Y.one(where).appendChild(this.nameTag);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   198
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   199
        this.listenForChanges();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   200
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   201
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   202
    // Method used to attach attribute change event listeners, so that the SpeedDater instance 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   203
    // will react to changes in attribute state, and update what's rendered on the page
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   204
    SpeedDater.prototype.listenForChanges = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   205
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   206
        // Sync up the UI for "available", after the value of the "available" attribute has changed:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   207
        this.after("availableChange", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   208
            var taken = (e.newVal) ? "" : "Oh, is that the time?";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   209
            this.nameTag.query(".sd-availability").set("innerHTML", taken);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   210
        });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   211
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   212
        // Sync up the UI for "name", after the value of the "name" attribute has changed:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   213
        this.after("nameChange", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   214
            var name = e.newVal;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   215
            this.nameTag.query(".sd-name").set("innerHTML", name);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   216
        });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   217
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   218
        // Sync up the UI for "personality", after the value of the "personality" attribute has changed:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   219
        this.after("personalityChange", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   220
            var personality = e.newVal;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   221
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   222
            var personalityEl = this.nameTag.query(".sd-personality");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   223
            personalityEl.set("innerHTML", personality);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   224
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   225
            if (personality > 90) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   226
                personalityEl.addClass("sd-max");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   227
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   228
        });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   229
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   230
        // Sync up the UI for "interests", after the value of the "interests" attribute has changed:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   231
        this.after("interestsChange", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   232
            var interests = (e.newVal.length == 0) ? "absolutely nothing" : this.get("interests").join(", ");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   233
            this.nameTag.query(".sd-interests").set("innerHTML", interests);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   234
        });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   235
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   236
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   237
    // Augment custom class with Attribute
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   238
    Y.augment(SpeedDater, Y.Attribute);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   239
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   240
    var john, jane;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   241
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   242
    Y.on("click", function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   243
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   244
        if (!john) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   245
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   246
            john = new SpeedDater({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   247
                name: "John",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   248
                personality: 78
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   249
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   250
            john.applyNameTag("#john .shirt");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   251
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   252
            Y.one("#jane .hi").set("disabled", false); 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   253
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   254
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   255
    }, "#john .hi");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   256
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   257
    Y.on("click", function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   258
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   259
        if (!jane) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   260
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   261
            jane = new SpeedDater({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   262
                name: "Jane",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   263
                personality: 82,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   264
                interests: ["Popcorn", "Saving Whales"]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   265
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   266
            jane.applyNameTag("#jane .shirt");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   267
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   268
            // Update Jane's interests state, after John's interests state changes...
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   269
            john.after("interestsChange", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   270
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   271
                var janesInterests = jane.get("interests"),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   272
                    johnsInterests = e.newVal,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   273
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   274
                    readingSpecs = "Reading Specifications";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   275
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   276
                // If it turns out that John enjoys reading specs, then Jane can admit it too...
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   277
                if (Y.Array.indexOf(johnsInterests, readingSpecs) !== -1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   278
                    if(Y.Array.indexOf(janesInterests, readingSpecs) == -1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   279
                        janesInterests.push(readingSpecs);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   280
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   281
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   282
                    janesInterests = Y.Array.reject(janesInterests, function(item){return (item == readingSpecs);});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   283
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   284
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   285
                jane.set("interests", janesInterests);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   286
                jane.set("available", true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   287
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   288
                setMessage("");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   289
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   290
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   291
            // We can also listen before an attribute changes its value, and decide if we want to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   292
            // allow the state change to occur or not. Invoking e.preventDefault() stops the state from
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   293
            // being updated. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   294
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   295
            // In this case, Jane can change her mind about making herself unavailable, if John likes 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   296
            // saving whales, as long as he doesn't dig knitting too.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   297
 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   298
            jane.on("availableChange", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   299
                var johnsInterests = john.get("interests");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   300
                var janeAvailable = e.newVal;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   301
                if (janeAvailable === false && Y.Array.indexOf(johnsInterests, "Saving Whales") !== -1 &&  Y.Array.indexOf(johnsInterests, "Knitting") == -1 ) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   302
                    // Reconsider..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   303
                    e.preventDefault();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   304
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   305
                    setMessage("... which he does");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   306
                };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   307
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   308
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   309
            enableExampleUI();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   310
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   311
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   312
    }, "#jane .hi");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   313
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   314
    Y.on("click", function() { 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   315
        jane.set("available", false); 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   316
    }, "#jane .movingOn");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   317
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   318
    // A delegate DOM event listener which will update John's interests, based on the checkbox state, whenever
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   319
    // a checkbox is clicked.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   320
    Y.on("delegate", function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   321
        var interests = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   322
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   323
        Y.Node.all("#john input[type=checkbox].interest").each(function(checkbox) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   324
            if (checkbox.get("checked")) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   325
                interests.push(checkbox.get("value"));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   326
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   327
        });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   328
        john.set("interests", interests);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   329
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   330
    }, "#john", "click", "input[type=checkbox].interest");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   331
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   332
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   333
    // Example helpers...
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   334
    function enableExampleUI() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   335
        Y.all("#jane button").set("disabled", false);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   336
        Y.all("#john button").set("disabled", false);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   337
        Y.all("#john input").set("disabled", false);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   338
        Y.one("#john .interests").removeClass("disabled");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   339
        Y.one("#jane .reconsider").removeClass("disabled");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   340
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   341
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   342
    function setMessage(msg) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   343
        Y.one("#jane .message").set("innerHTML", msg);      
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   344
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   345
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   346
 });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   347
</script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   348
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   349
<!--END SOURCE CODE FOR EXAMPLE =============================== -->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   350
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   351
</body>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   352
</html>