src/cm/media/js/lib/yui/yui_3.10.3/docs/attribute/attribute-getset.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 Getters, Setters and Validators</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 Getters, Setters and Validators</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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
    #boxParent {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
        overflow:hidden;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
        background-color:#004c6d;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
        height:25em;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
        padding:10px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
        margin:5px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
    #boxParent .yui3-box p, #attrs p {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
        margin:2px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
    .attrs {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
        border:1px solid #000;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
        background-color:#cdcdcd;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
        margin:5px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
    .attrs .header {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
        font-weight:bold;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
        background-color:#aaa;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
        padding:5px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
    .attrs .body {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
        padding:10px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
    .attrs .body .hints li {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
        padding-bottom:10px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
    .attrs .footer {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
        padding:0px 20px 10px 20px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
    .attrs label {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
        font-weight:bold;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
        display:block;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
        float:left;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
        width:4em;
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
    .attrs .hint {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
        font-size:85%;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
        color: #004c6d;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
    .attrs .fields {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
        border-top:1px solid #aaa;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
        padding:10px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
    .yui3-box {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
        padding:5px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
        border:1px solid #000;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
        width:8em;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
        height:8em;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
        text-align:center;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
        color:#000;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
    .yui3-box .color, .yui3-box .coord {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
        font-family:courier;
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
</style>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
<div class="intro">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
    <p>The <a href="attribute-basic.html">"Basic Attribute Configuration" example</a> shows how you can add attributes to a host class, and set up default values for them using the attribute configuration object. This example explores how you can configure <code>setter</code>, <code>getter</code> and <code>validator</code> functions for individual attributes, which can be used to modify or normalize attribute values during get and set invocations, and prevent invalid values from being stored.</p> 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
<div class="example">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
    <div id="attrs" class="attrs">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
    <div class="header">Enter new values and click the "Set" buttons</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
    <div class="body">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
        <ul class="hints">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
            <li>Try entering valid and invalid values for x, y; or values which attempt to position the box outside it's parent (parent box co-ordinates are displayed next to the text box).</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
            <li>Try entering rgb, hex or keyword color values [ <code>rgb(255,0,0)</code>, <code>#ff0000</code>, <code>red</code> ].</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
        </ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
        <div class="fields">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
            <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
                <form action="#"  id="setX" class="action">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
                    <label for="x">x:</label>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
                    <input type="text" name="x" id="x" />
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
                    <button type="submit">Set</button>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
                    <span id="xhint" class="hint"></span>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
                </form>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
            </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
            <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
                <form action="#" id="setY" class="action">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
                    <label for="y">y:</label>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
                    <input type="text" name="y" id="y" />
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
                    <button type="submit">Set</button>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
                    <span id="yhint" class="hint"></span>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
                </form>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
            </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
            <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
                <form action="#" id="setColor" class="action">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
                    <label for="color">color:</label>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
                    <input type="text" name="color" id="color" />
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
                    <button type="submit">Set</button>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
                </form>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
            </p>
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
    <div class="footer">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
        <button type="button" class="action" id="setXY">Set XY</button>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
        <button type="button" class="action" id="setAll">Set All</button>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
        <button type="button" class="action" id="getAll">Get All</button>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
<div id="boxParent"></div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
<script type="text/javascript">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
// Get a new YUI instance 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
YUI().use("node", "attribute", function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
    var boxParent = Y.one("#boxParent");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
    // Setup a custom class with attribute support
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
    function Box(cfg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
        this._createNode(cfg);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
        // Attribute configuration
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
        var attrs = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
            "parent" : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
                value: null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
            "x" : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
                setter: function(val, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
                    // Pass through x value to xy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
                    this.set("xy", [val, this.get("y")]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
                getter: function(val, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
                    // Get x value from xy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
                    return this.get("xy")[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
            "y" : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
                setter: function(val, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
                    // Pass through y value to xy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
                    this.set("xy", [this.get("x"), val]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
                getter: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
                    // Get y value from xy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
                    return this.get("xy")[1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
            "xy" : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
                // Actual stored xy co-ordinates
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
                value: [0, 0],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
                setter: function(val, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
                    // Constrain XY value to the parent element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
                    // Returns the constrained xy value, which will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
                    // be the final value stored.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
                    return this.constrain(val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
                validator: function(val, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
                    // Ensure we only store a valid data value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
                    return (Y.Lang.isArray(val) && val.length == 2 && Y.Lang.isNumber(val[0]) && Y.Lang.isNumber(val[1]));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
            "color" : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
                value: "olive",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
                getter: function(val, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
                    // Always normalize the returned value to 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
                    // a hex color value,  even if the stored 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
                    // value is a keyword, or an rgb value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
                    if (val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
                        return Y.Color.toHex(val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
                        return null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
                validator: function(val, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
                    // Ensure we only store rgb, hex or keyword values.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
                    return (Y.Color.re_RGB.test(val) || Y.Color.re_hex.test(val) || Y.Color.KEYWORDS[val]); 
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
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
        this.addAttrs(attrs, cfg);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
        this._sync();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
        this._bind();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
    Box.BUFFER = 5;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
    // Create the box node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
    Box.prototype._createNode = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
        this._node = Y.Node.create('<div class="yui3-box"><p>Positioned Box</p><p class="coord"></p><p class="color">None</p></div>');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
    // Update rendered state to match the attribute state
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
    Box.prototype._sync = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
        this._syncParent();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
        this._syncXY();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
        this._syncColor();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
    Box.prototype._syncParent = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
        this.get("parent").appendChild(this._node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
    Box.prototype._syncXY = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
        this._node.setXY(this.get("xy"));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
        this._node.one("p.coord").set("innerHTML", "[" + this.get("x") + "," + this.get("y") + "]");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
    Box.prototype._syncColor = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
        this._node.setStyle("backgroundColor", this.get("color"));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
        this._node.one("p.color").set("innerHTML", this.get("color"));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
    // Bind listeners for attribute change events
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
    Box.prototype._bind = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
        // Reflect any changes in xy, to the rendered Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
        this.after("xyChange", this._syncXY);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
        // Reflect any changes in color, to the rendered Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
        // and output the color value received from get
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
        this.after("colorChange", this._syncColor);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
        // Append the rendered node to the parent provided
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
        this.after("parentChange", this._syncParent);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
    // Get min, max unconstrained values for X.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
    Box.prototype.getXConstraints = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
        var parentRegion = this.get("parent").get("region"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
            nodeRegion = this._node.get("region"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
            nodeWidth = nodeRegion.right-nodeRegion.left;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
        // Ceil/Floor to account for browsers which have sub-pixel values.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
        return [Math.ceil(parentRegion.left + Box.BUFFER), Math.floor(parentRegion.right - nodeWidth - Box.BUFFER)];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
    // Get min, max unconstrained values for Y.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
    Box.prototype.getYConstraints = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
        var parentRegion = this.get("parent").get("region"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
            nodeRegion = this._node.get("region"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
            nodeHeight = nodeRegion.bottom-nodeRegion.top;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
        // Ceil/Floor to account for browsers which have sub-pixel values.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
        return [Math.ceil(parentRegion.top + Box.BUFFER), Math.floor(parentRegion.bottom - nodeHeight - Box.BUFFER)];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
    // Constrain the x,y value provided
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
    Box.prototype.constrain = function(val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
        // If the X value places the box outside it's parent,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
        // modify it's value to place the box inside it's parent.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
        var xConstraints = this.getXConstraints();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
        if (val[0] < xConstraints[0]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
            val[0] = xConstraints[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
            if (val[0] > xConstraints[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
                val[0] = xConstraints[1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
        // If the Y value places the box outside it's parent,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
        // modify it's value to place the box inside it's parent.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
        var yConstraints = this.getYConstraints();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
        if (val[1] < yConstraints[0]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
            val[1] = yConstraints[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
            if (val[1] > yConstraints[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
                val[1] = yConstraints[1];
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
        return val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
    Y.augment(Box, Y.Attribute);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
    // ------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
    // Create a new instance of Box
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
    var box = new Box({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
        parent : boxParent 
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
    // Set references to form controls
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
    var xTxt = Y.one("#x");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
    var yTxt = Y.one("#y");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
    var colorTxt = Y.one("#color");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
    var xHint = Y.one("#xhint");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
    var yHint = Y.one("#yhint");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
    function getAll() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
        xTxt.set("value", box.get("x"));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
        yTxt.set("value", box.get("y"));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
        colorTxt.set("value", box.get("color"));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
    // Use event delegation for the action button clicks, and form submissions
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
    Y.delegate("click", function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
        // Get Node target from the event object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
        // We already know it's a button which has an action because
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
        // of our selector (button.action), so all we need to do is 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
        // route it based on the id.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
        var id = e.currentTarget.get("id");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
        switch (id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
            case "setXY":
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
                box.set("xy", [parseInt(xTxt.get("value"), 10), parseInt(yTxt.get("value"), 10)]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
            case "setAll":
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
                box.set("xy", [parseInt(xTxt.get("value"), 10), parseInt(yTxt.get("value"), 10)]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
                box.set("color", Y.Lang.trim(colorTxt.get("value")));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
            case "getAll":
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
                getAll();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
            default:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
                break;
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
    }, "#attrs", "button.action");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
    Y.all("#attrs form.action").on("submit", function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
        e.preventDefault();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
        // Get Node target from the event object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
        // We already know it's a button which has an action because
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
        // of our selector (button.action), so all we need to do is 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
        // route it based on the id.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
        var id = e.currentTarget.get("id");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
        switch (id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
            case "setX":
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
                box.set("x", parseInt(xTxt.get("value"), 10));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
            case "setY":
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
                box.set("y", parseInt(yTxt.get("value"), 10));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
            case "setColor":
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
                box.set("color", Y.Lang.trim(colorTxt.get("value")));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
            default:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
    // Bind listeners to provide min, max unconstrained value hints for x, y
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
    // (focus/blur doesn't bubble, so bind individual listeners)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
    Y.on("focus", function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
        var minmax = box.getXConstraints();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
        xHint.set("innerHTML", "Valid values: " + minmax[0] + " to " + minmax[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
    }, xTxt);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
    Y.on("focus", function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
        var minmax = box.getYConstraints();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
        yHint.set("innerHTML", "Valid values: " + minmax[0] + " to " + minmax[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
    }, yTxt);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
    Y.on("blur", function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
        xHint.set("innerHTML", "");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
    }, xTxt);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
    Y.on("blur", function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
        yHint.set("innerHTML", "");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
    }, yTxt);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
    getAll();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
<h2>Getter, Setter And Validator Functions</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
<p>Attribute lets you configure <code>getter</code> and <code>setter</code> functions for each attribute. These functions are invoked when the user calls Attribute's <code>get</code> and <code>set</code> methods, and provide a way to modify the value returned or the value stored respectively.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
<p>You can also define a <code>validator</code> function for each attribute, which is used to validate the final value before it gets stored.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
<p>All these functions receive the value and name of the attribute being set or retrieved, as shown in the example code below. The name is not used in this example, but is provided to support use cases where you may wish to share the same function between different attributes.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
<h3>Creating The Box Class - The X, Y And XY Attributes</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
<p>In this example, we'll set up a custom <code>Box</code> class representing a positionable element, with <code>x</code>, <code>y</code> and <code>xy</code> attributes.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
<p>Only the <code>xy</code> attribute will actually store the page co-ordinate position of the box. The <code>x</code> and <code>y</code> attributes provide the user a convenient way to set only one of the co-ordinates. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
However we don't want to store the actual values in the <code>x</code> and <code>y</code> attributes, to avoid having to constantly synchronize all three. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
The <code>getter</code> and <code>setter</code> functions provide us with an easy way to achieve this. We'll define <code>getter</code> and <code>setter</code> functions for both the <code>x</code> and <code>y</code> attributes, which simply pass through to the <code>xy</code> attribute to store and retrieve values:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
<pre class="code prettyprint">&#x2F;&#x2F; Setup a custom class with attribute support
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
function Box(cfg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
    ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
          
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
    &#x2F;&#x2F; Attribute configuration
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
    var attrs = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
        &quot;parent&quot; : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
            value: null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
        &quot;x&quot; : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
            setter: function(val, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
                &#x2F;&#x2F; Pass through x value to xy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
                this.set(&quot;xy&quot;, [val, this.get(&quot;y&quot;)]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
            getter: function(val, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
                &#x2F;&#x2F; Get x value from xy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   469
                return this.get(&quot;xy&quot;)[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   470
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   471
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   472
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   473
        &quot;y&quot; : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   474
            setter: function(val, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   475
                &#x2F;&#x2F; Pass through y value to xy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   476
                this.set(&quot;xy&quot;, [this.get(&quot;x&quot;), val]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   477
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   478
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   479
            getter: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   480
                &#x2F;&#x2F; Get y value from xy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   481
                return this.get(&quot;xy&quot;)[1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   482
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   483
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   484
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   485
        &quot;xy&quot; : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   486
            &#x2F;&#x2F; Actual stored xy co-ordinates
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   487
            value: [0, 0],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   488
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   489
            setter: function(val, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   490
                &#x2F;&#x2F; Constrain XY value to the parent element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   491
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   492
                &#x2F;&#x2F; Returns the constrained xy value, which will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   493
                &#x2F;&#x2F; be the final value stored.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   494
                return this.constrain(val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   495
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   496
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   497
            validator: function(val, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   498
                &#x2F;&#x2F; Ensure we only store a valid data value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   499
                return (Y.Lang.isArray(val) &amp;&amp; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   500
                        val.length == 2 &amp;&amp; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   501
                        Y.Lang.isNumber(val[0]) &amp;&amp; Y.Lang.isNumber(val[1]));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   502
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   503
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   504
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   505
    ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   506
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   507
    this.addAttrs(attrs, cfg);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   508
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   509
    ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   510
}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   511
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   512
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   513
<p>The <code>validator</code> function for <code>xy</code> ensures that only valid values finally end up being stored.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   514
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   515
<p>The <code>xy</code> attribute also has a <code>setter</code> function configured, which makes sure that the box is always constrained to it's parent element. The <code>constrain</code> method which it delegates to, takes the xy value the user is trying to set and returns a constrained value if the x or y values fall outside the parent box. The value which is returned by the <code>setter</code> is the value which is ultimately stored for the <code>xy</code> attribute:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   516
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   517
<pre class="code prettyprint">&#x2F;&#x2F; Get min, max unconstrained values for X.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   518
Box.prototype.getXConstraints = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   519
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   520
    var parentRegion = this.get(&quot;parent&quot;).get(&quot;region&quot;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   521
        nodeRegion = this._node.get(&quot;region&quot;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   522
        nodeWidth = nodeRegion.right-nodeRegion.left;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   523
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   524
    &#x2F;&#x2F; Ceil&#x2F;Floor to account for browsers which have sub-pixel values.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   526
    return [Math.ceil(parentRegion.left + Box.BUFFER), Math.floor(parentRegion.right - nodeWidth - Box.BUFFER)];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   527
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   528
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   529
&#x2F;&#x2F; Get min, max unconstrained values for Y.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   530
Box.prototype.getYConstraints = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   531
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   532
    var parentRegion = this.get(&quot;parent&quot;).get(&quot;region&quot;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   533
        nodeRegion = this._node.get(&quot;region&quot;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   534
        nodeHeight = nodeRegion.bottom-nodeRegion.top;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   535
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   536
    &#x2F;&#x2F; Ceil&#x2F;Floor to account for browsers which have sub-pixel values.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   537
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   538
    return [Math.ceil(parentRegion.top + Box.BUFFER), Math.floor(parentRegion.bottom - nodeHeight - Box.BUFFER)];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   539
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   540
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   541
&#x2F;&#x2F; Constrains given x,y values
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   542
Box.prototype.constrain = function(val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   543
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   544
    &#x2F;&#x2F; If the X value places the box outside it&#x27;s parent,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   545
    &#x2F;&#x2F; modify it&#x27;s value to place the box inside it&#x27;s parent.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   546
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   547
    var xConstraints = this.getXConstraints();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   548
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   549
    if (val[0] &lt; xConstraints[0]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   550
        val[0] = xConstraints[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   551
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   552
        if (val[0] &gt; xConstraints[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   553
            val[0] = xConstraints[1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   554
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   555
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   556
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   557
    &#x2F;&#x2F; If the Y value places the box outside it&#x27;s parent,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   558
    &#x2F;&#x2F; modify it&#x27;s value to place the box inside it&#x27;s parent.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   559
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   560
    var yConstraints = this.getYConstraints();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   561
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   562
    if (val[1] &lt; yConstraints[0]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   563
        val[1] = yConstraints[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   564
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   565
        if (val[1] &gt; yConstraints[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   566
            val[1] = yConstraints[1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   567
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   568
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   569
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   570
    return val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   571
};</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   572
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   573
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   574
<p>The <code>setter</code>, <code>getter</code> and <code>validator</code> functions are invoked with the host object as the context, so that they can refer to the host object using "<code>this</code>", as we see in the <code>setter</code> function for <code>xy</code>.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   575
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   576
<h3>The Color Attribute - Normalizing Stored Values Through Get</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   577
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   578
<p>The <code>Box</code> class also has a <code>color</code> attribute which also has a <code>getter</code> and <code>validator</code> functions defined:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   579
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   580
<pre class="code prettyprint">...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   581
&quot;color&quot; : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   582
    value: &quot;olive&quot;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   583
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   584
    getter: function(val, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   585
        if (val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   586
            return Y.Color.toHex(val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   587
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   588
            return null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   589
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   590
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   591
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   592
    validator: function(val, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   593
        return (Y.Color.re_RGB.test(val) || Y.Color.re_hex.test(val) 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   594
                    || Y.Color.KEYWORDS[val]);
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
...</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   598
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   599
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   600
<p>The role of the <code>getter</code> handler in this case is to normalize the actual stored value of the <code>color</code> attribute, so that users always receive the hex value, regardless of the actual value stored, which maybe a color keyword (e.g. <code>&quot;red&quot;</code>), an rgb value (e.g.<code>rbg(255,0,0)</code>), or a hex value (<code>#ff0000</code>). The <code>validator</code> ensures the the stored value is one of these three formats.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   601
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   602
<h3>Syncing Changes Using Attribute Change Events</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   603
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   604
<p>Another interesting aspect of this example, is it's use of attribute change events to listen for changes to the attribute values. <code>Box</code>'s <code>_bind</code> method configures a set of attribute change event listeners which monitor changes to the <code>xy</code>, <code>color</code> and <code>parent</code> attributes and update the rendered DOM for the Box in response:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   605
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   606
<pre class="code prettyprint">&#x2F;&#x2F; Bind listeners for attribute change events
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   607
Box.prototype._bind = function() {
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; Reflect any changes in xy, to the rendered Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   610
    this.after(&quot;xyChange&quot;, this._syncXY);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   611
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   612
    &#x2F;&#x2F; Reflect any changes in color, to the rendered Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   613
    &#x2F;&#x2F; and output the color value received from get
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   614
    this.after(&quot;colorChange&quot;, this._syncColor);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   615
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   616
    &#x2F;&#x2F; Append the rendered node to the parent provided
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   617
    this.after(&quot;parentChange&quot;, this._syncParent);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   618
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   619
};</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   620
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   621
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   622
<p>Since only <code>xy</code> stores the final co-ordinates, we don't need to monitor the <code>x</code> and <code>y</code> attributes individually for changes.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   623
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   624
<h3>DOM Event Listeners And Delegation</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   625
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   626
<p>Although not an integral part of the example, it's worth highlighting the code which is used to setup the DOM event listeners for the form elements used by the example:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   627
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   628
<pre class="code prettyprint">&#x2F;&#x2F; Set references to form controls
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   629
var xTxt = Y.one(&quot;#x&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   630
var yTxt = Y.one(&quot;#y&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   631
var colorTxt = Y.one(&quot;#color&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   632
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   633
&#x2F;&#x2F; Use event delegation for the action button clicks, and form submissions
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   634
Y.delegate(&quot;click&quot;, function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   635
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   636
    &#x2F;&#x2F; Get Node target from the event object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   637
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   638
    &#x2F;&#x2F; We already know it&#x27;s a button which has an action because
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   639
    &#x2F;&#x2F; of our selector (button.action), so all we need to do is 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   640
    &#x2F;&#x2F; route it based on the id.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   641
    var id = e.currentTarget.get(&quot;id&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   642
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   643
    switch (id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   644
        case &quot;setXY&quot;:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   645
            box.set(&quot;xy&quot;, [parseInt(xTxt.get(&quot;value&quot;)), parseInt(yTxt.get(&quot;value&quot;))]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   646
            break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   647
        case &quot;setAll&quot;:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   648
            box.set(&quot;xy&quot;, [parseInt(xTxt.get(&quot;value&quot;)), parseInt(yTxt.get(&quot;value&quot;))]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   649
            box.set(&quot;color&quot;, Y.Lang.trim(colorTxt.get(&quot;value&quot;)));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   650
            break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   651
        case &quot;getAll&quot;:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   652
            getAll();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   653
            break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   654
        default:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   655
            break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   656
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   657
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   658
}, &quot;#attrs&quot;, &quot;button.action&quot;);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   659
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   660
<p>Rather than attach individual listeners to each button, the above code uses YUI 3's <code>delegate</code> support, to listen for <code>click</code> from buttons, with an <code>action</code> class which bubble up to the <code>attrs</code> element.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   661
<p>The delegate listener uses the <a href="http://yuilibrary.com/yui/docs/api/DOMEventFacade.html">Event Facade</a> which normalizes cross-browser access to DOM event properties, such as <code>currentTarget</code>, to route to the appropriate button handler. Note the use of selector syntax when we specify the elements for the listener (e.g. <code>#attrs</code>, <code>button.actions</code>) and the use of the <a href="http://yuilibrary.com/yui/docs/api/Node.html">Node</a> facade when dealing with references to HTML elements (e.g. <code>xTxt, yTxt, colorTxt</code>).</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   662
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   663
<h2>Complete Example Source</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   664
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   665
<pre class="code prettyprint">&lt;div id=&quot;attrs&quot; class=&quot;attrs&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   666
    &lt;div class=&quot;header&quot;&gt;Enter new values and click the &quot;Set&quot; buttons&lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   667
    &lt;div class=&quot;body&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   668
        &lt;ul class=&quot;hints&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   669
            &lt;li&gt;Try entering valid and invalid values for x, y; or values which attempt to position the box outside it&#x27;s parent (parent box co-ordinates are displayed next to the text box).&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   670
            &lt;li&gt;Try entering rgb, hex or keyword color values [ &lt;code&gt;rgb(255,0,0)&lt;&#x2F;code&gt;, &lt;code&gt;#ff0000&lt;&#x2F;code&gt;, &lt;code&gt;red&lt;&#x2F;code&gt; ].&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   671
        &lt;&#x2F;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   672
        &lt;div class=&quot;fields&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   673
            &lt;p&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   674
                &lt;form action=&quot;#&quot;  id=&quot;setX&quot; class=&quot;action&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   675
                    &lt;label for=&quot;x&quot;&gt;x:&lt;&#x2F;label&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   676
                    &lt;input type=&quot;text&quot; name=&quot;x&quot; id=&quot;x&quot; &#x2F;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   677
                    &lt;button type=&quot;submit&quot;&gt;Set&lt;&#x2F;button&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   678
                    &lt;span id=&quot;xhint&quot; class=&quot;hint&quot;&gt;&lt;&#x2F;span&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   679
                &lt;&#x2F;form&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   680
            &lt;&#x2F;p&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   681
            &lt;p&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   682
                &lt;form action=&quot;#&quot; id=&quot;setY&quot; class=&quot;action&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   683
                    &lt;label for=&quot;y&quot;&gt;y:&lt;&#x2F;label&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   684
                    &lt;input type=&quot;text&quot; name=&quot;y&quot; id=&quot;y&quot; &#x2F;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   685
                    &lt;button type=&quot;submit&quot;&gt;Set&lt;&#x2F;button&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   686
                    &lt;span id=&quot;yhint&quot; class=&quot;hint&quot;&gt;&lt;&#x2F;span&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   687
                &lt;&#x2F;form&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   688
            &lt;&#x2F;p&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   689
            &lt;p&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   690
                &lt;form action=&quot;#&quot; id=&quot;setColor&quot; class=&quot;action&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   691
                    &lt;label for=&quot;color&quot;&gt;color:&lt;&#x2F;label&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   692
                    &lt;input type=&quot;text&quot; name=&quot;color&quot; id=&quot;color&quot; &#x2F;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   693
                    &lt;button type=&quot;submit&quot;&gt;Set&lt;&#x2F;button&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   694
                &lt;&#x2F;form&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   695
            &lt;&#x2F;p&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   696
        &lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   697
    &lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   698
    &lt;div class=&quot;footer&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   699
        &lt;button type=&quot;button&quot; class=&quot;action&quot; id=&quot;setXY&quot;&gt;Set XY&lt;&#x2F;button&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   700
        &lt;button type=&quot;button&quot; class=&quot;action&quot; id=&quot;setAll&quot;&gt;Set All&lt;&#x2F;button&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   701
        &lt;button type=&quot;button&quot; class=&quot;action&quot; id=&quot;getAll&quot;&gt;Get All&lt;&#x2F;button&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   702
    &lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   703
&lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   704
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   705
&lt;div id=&quot;boxParent&quot;&gt;&lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   706
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   707
&lt;script type=&quot;text&#x2F;javascript&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   708
&#x2F;&#x2F; Get a new YUI instance 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   709
YUI().use(&quot;node&quot;, &quot;attribute&quot;, function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   710
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   711
    var boxParent = Y.one(&quot;#boxParent&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   712
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   713
    &#x2F;&#x2F; Setup a custom class with attribute support
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   714
    function Box(cfg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   715
        this._createNode(cfg);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   716
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   717
        &#x2F;&#x2F; Attribute configuration
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   718
        var attrs = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   719
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   720
            &quot;parent&quot; : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   721
                value: null
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
            &quot;x&quot; : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   725
                setter: function(val, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   726
                    &#x2F;&#x2F; Pass through x value to xy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   727
                    this.set(&quot;xy&quot;, [val, this.get(&quot;y&quot;)]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   728
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   729
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   730
                getter: function(val, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   731
                    &#x2F;&#x2F; Get x value from xy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   732
                    return this.get(&quot;xy&quot;)[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   733
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   734
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   735
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   736
            &quot;y&quot; : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   737
                setter: function(val, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   738
                    &#x2F;&#x2F; Pass through y value to xy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   739
                    this.set(&quot;xy&quot;, [this.get(&quot;x&quot;), val]);
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
                getter: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   743
                    &#x2F;&#x2F; Get y value from xy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   744
                    return this.get(&quot;xy&quot;)[1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   745
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   746
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   747
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   748
            &quot;xy&quot; : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   749
                &#x2F;&#x2F; Actual stored xy co-ordinates
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   750
                value: [0, 0],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   751
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   752
                setter: function(val, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   753
                    &#x2F;&#x2F; Constrain XY value to the parent element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   754
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   755
                    &#x2F;&#x2F; Returns the constrained xy value, which will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   756
                    &#x2F;&#x2F; be the final value stored.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   757
                    return this.constrain(val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   758
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   759
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   760
                validator: function(val, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   761
                    &#x2F;&#x2F; Ensure we only store a valid data value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   762
                    return (Y.Lang.isArray(val) &amp;&amp; val.length == 2 &amp;&amp; Y.Lang.isNumber(val[0]) &amp;&amp; Y.Lang.isNumber(val[1]));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   763
                }
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
            &quot;color&quot; : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   767
                value: &quot;olive&quot;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   768
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   769
                getter: function(val, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   770
                    &#x2F;&#x2F; Always normalize the returned value to 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   771
                    &#x2F;&#x2F; a hex color value,  even if the stored 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   772
                    &#x2F;&#x2F; value is a keyword, or an rgb value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   773
                    if (val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   774
                        return Y.Color.toHex(val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   775
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   776
                        return null;
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
                validator: function(val, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   781
                    &#x2F;&#x2F; Ensure we only store rgb, hex or keyword values.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   782
                    return (Y.Color.re_RGB.test(val) || Y.Color.re_hex.test(val) || Y.Color.KEYWORDS[val]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   783
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   784
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   785
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   786
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   787
        this.addAttrs(attrs, cfg);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   788
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   789
        this._sync();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   790
        this._bind();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   791
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   792
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   793
    Box.BUFFER = 5;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   794
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   795
    &#x2F;&#x2F; Create the box node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   796
    Box.prototype._createNode = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   797
        this._node = Y.Node.create(&#x27;&lt;div class=&quot;yui3-box&quot;&gt;&lt;p&gt;Positioned Box&lt;&#x2F;p&gt;&lt;p class=&quot;coord&quot;&gt;&lt;&#x2F;p&gt;&lt;p class=&quot;color&quot;&gt;None&lt;&#x2F;p&gt;&lt;&#x2F;div&gt;&#x27;);
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
    &#x2F;&#x2F; Update rendered state to match the attribute state
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   801
    Box.prototype._sync = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   802
        this._syncParent();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   803
        this._syncXY();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   804
        this._syncColor();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   805
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   806
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   807
    Box.prototype._syncParent = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   808
        this.get(&quot;parent&quot;).appendChild(this._node);
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
    Box.prototype._syncXY = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   812
        this._node.setXY(this.get(&quot;xy&quot;));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   813
        this._node.one(&quot;p.coord&quot;).set(&quot;innerHTML&quot;, &quot;[&quot; + this.get(&quot;x&quot;) + &quot;,&quot; + this.get(&quot;y&quot;) + &quot;]&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   814
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   815
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   816
    Box.prototype._syncColor = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   817
        this._node.setStyle(&quot;backgroundColor&quot;, this.get(&quot;color&quot;));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   818
        this._node.one(&quot;p.color&quot;).set(&quot;innerHTML&quot;, this.get(&quot;color&quot;));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   819
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   820
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   821
    &#x2F;&#x2F; Bind listeners for attribute change events
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   822
    Box.prototype._bind = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   823
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   824
        &#x2F;&#x2F; Reflect any changes in xy, to the rendered Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   825
        this.after(&quot;xyChange&quot;, this._syncXY);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   826
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   827
        &#x2F;&#x2F; Reflect any changes in color, to the rendered Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   828
        &#x2F;&#x2F; and output the color value received from get
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   829
        this.after(&quot;colorChange&quot;, this._syncColor);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   830
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   831
        &#x2F;&#x2F; Append the rendered node to the parent provided
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   832
        this.after(&quot;parentChange&quot;, this._syncParent);
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   836
    &#x2F;&#x2F; Get min, max unconstrained values for X.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   837
    Box.prototype.getXConstraints = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   838
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   839
        var parentRegion = this.get(&quot;parent&quot;).get(&quot;region&quot;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   840
            nodeRegion = this._node.get(&quot;region&quot;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   841
            nodeWidth = nodeRegion.right-nodeRegion.left;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   842
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   843
        &#x2F;&#x2F; Ceil&#x2F;Floor to account for browsers which have sub-pixel values.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   844
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   845
        return [Math.ceil(parentRegion.left + Box.BUFFER), Math.floor(parentRegion.right - nodeWidth - Box.BUFFER)];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   846
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   847
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   848
    &#x2F;&#x2F; Get min, max unconstrained values for Y.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   849
    Box.prototype.getYConstraints = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   850
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   851
        var parentRegion = this.get(&quot;parent&quot;).get(&quot;region&quot;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   852
            nodeRegion = this._node.get(&quot;region&quot;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   853
            nodeHeight = nodeRegion.bottom-nodeRegion.top;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   854
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   855
        &#x2F;&#x2F; Ceil&#x2F;Floor to account for browsers which have sub-pixel values.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   856
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   857
        return [Math.ceil(parentRegion.top + Box.BUFFER), Math.floor(parentRegion.bottom - nodeHeight - Box.BUFFER)];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   858
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   859
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   860
    &#x2F;&#x2F; Constrain the x,y value provided
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   861
    Box.prototype.constrain = function(val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   862
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   863
        &#x2F;&#x2F; If the X value places the box outside it&#x27;s parent,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   864
        &#x2F;&#x2F; modify it&#x27;s value to place the box inside it&#x27;s parent.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   865
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   866
        var xConstraints = this.getXConstraints();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   867
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   868
        if (val[0] &lt; xConstraints[0]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   869
            val[0] = xConstraints[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   870
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   871
            if (val[0] &gt; xConstraints[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   872
                val[0] = xConstraints[1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   873
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   874
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   875
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   876
        &#x2F;&#x2F; If the Y value places the box outside it&#x27;s parent,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   877
        &#x2F;&#x2F; modify it&#x27;s value to place the box inside it&#x27;s parent.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   878
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   879
        var yConstraints = this.getYConstraints();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   880
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   881
        if (val[1] &lt; yConstraints[0]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   882
            val[1] = yConstraints[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   883
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   884
            if (val[1] &gt; yConstraints[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   885
                val[1] = yConstraints[1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   886
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   887
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   888
        return val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   889
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   890
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   891
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   892
    Y.augment(Box, Y.Attribute);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   893
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   894
    &#x2F;&#x2F; ------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   895
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   896
    &#x2F;&#x2F; Create a new instance of Box
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   897
    var box = new Box({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   898
        parent : boxParent 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   899
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   900
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   901
    &#x2F;&#x2F; Set references to form controls
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   902
    var xTxt = Y.one(&quot;#x&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   903
    var yTxt = Y.one(&quot;#y&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   904
    var colorTxt = Y.one(&quot;#color&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   905
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   906
    var xHint = Y.one(&quot;#xhint&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   907
    var yHint = Y.one(&quot;#yhint&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   908
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   909
    function getAll() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   910
        xTxt.set(&quot;value&quot;, box.get(&quot;x&quot;));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   911
        yTxt.set(&quot;value&quot;, box.get(&quot;y&quot;));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   912
        colorTxt.set(&quot;value&quot;, box.get(&quot;color&quot;));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   913
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   914
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   915
    &#x2F;&#x2F; Use event delegation for the action button clicks, and form submissions
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   916
    Y.delegate(&quot;click&quot;, function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   917
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   918
        &#x2F;&#x2F; Get Node target from the event object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   919
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   920
        &#x2F;&#x2F; We already know it&#x27;s a button which has an action because
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   921
        &#x2F;&#x2F; of our selector (button.action), so all we need to do is 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   922
        &#x2F;&#x2F; route it based on the id.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   923
        var id = e.currentTarget.get(&quot;id&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   924
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   925
        switch (id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   926
            case &quot;setXY&quot;:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   927
                box.set(&quot;xy&quot;, [parseInt(xTxt.get(&quot;value&quot;), 10), parseInt(yTxt.get(&quot;value&quot;), 10)]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   928
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   929
            case &quot;setAll&quot;:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   930
                box.set(&quot;xy&quot;, [parseInt(xTxt.get(&quot;value&quot;), 10), parseInt(yTxt.get(&quot;value&quot;), 10)]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   931
                box.set(&quot;color&quot;, Y.Lang.trim(colorTxt.get(&quot;value&quot;)));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   932
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   933
            case &quot;getAll&quot;:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   934
                getAll();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   935
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   936
            default:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   937
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   938
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   939
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   940
    }, &quot;#attrs&quot;, &quot;button.action&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   941
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   942
    Y.all(&quot;#attrs form.action&quot;).on(&quot;submit&quot;, function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   943
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   944
        e.preventDefault();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   945
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   946
        &#x2F;&#x2F; Get Node target from the event object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   947
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   948
        &#x2F;&#x2F; We already know it&#x27;s a button which has an action because
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   949
        &#x2F;&#x2F; of our selector (button.action), so all we need to do is 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   950
        &#x2F;&#x2F; route it based on the id.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   951
        var id = e.currentTarget.get(&quot;id&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   952
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   953
        switch (id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   954
            case &quot;setX&quot;:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   955
                box.set(&quot;x&quot;, parseInt(xTxt.get(&quot;value&quot;), 10));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   956
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   957
            case &quot;setY&quot;:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   958
                box.set(&quot;y&quot;, parseInt(yTxt.get(&quot;value&quot;), 10));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   959
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   960
            case &quot;setColor&quot;:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   961
                box.set(&quot;color&quot;, Y.Lang.trim(colorTxt.get(&quot;value&quot;)));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   962
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   963
            default:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   964
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   965
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   966
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   967
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   968
    &#x2F;&#x2F; Bind listeners to provide min, max unconstrained value hints for x, y
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   969
    &#x2F;&#x2F; (focus&#x2F;blur doesn&#x27;t bubble, so bind individual listeners)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   970
    Y.on(&quot;focus&quot;, function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   971
        var minmax = box.getXConstraints();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   972
        xHint.set(&quot;innerHTML&quot;, &quot;Valid values: &quot; + minmax[0] + &quot; to &quot; + minmax[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   973
    }, xTxt);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   974
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   975
    Y.on(&quot;focus&quot;, function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   976
        var minmax = box.getYConstraints();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   977
        yHint.set(&quot;innerHTML&quot;, &quot;Valid values: &quot; + minmax[0] + &quot; to &quot; + minmax[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   978
    }, yTxt);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   979
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   980
    Y.on(&quot;blur&quot;, function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   981
        xHint.set(&quot;innerHTML&quot;, &quot;&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   982
    }, xTxt);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   983
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   984
    Y.on(&quot;blur&quot;, function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   985
        yHint.set(&quot;innerHTML&quot;, &quot;&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   986
    }, yTxt);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   987
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   988
    getAll();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   989
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   990
&lt;&#x2F;script&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   991
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   992
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   993
            </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   994
        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   995
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   996
        <div class="yui3-u-1-4">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   997
            <div class="sidebar">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   998
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   999
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1000
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1001
                    <div class="sidebox">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1002
                        <div class="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1003
                            <h2 class="no-toc">Examples</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1004
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1005
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1006
                        <div class="bd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1007
                            <ul class="examples">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1008
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1009
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1010
                                        <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
  1011
                                            <a href="attribute-basic.html">Basic Attribute Configuration</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1012
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1013
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1014
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1015
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1016
                                        <li data-description="Configure attributes to be readOnly or writeOnce.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1017
                                            <a href="attribute-rw.html">Read-Only and Write-Once Attributes</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1018
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1019
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1020
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1021
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1022
                                        <li data-description="How to listen for changes in attribute values.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1023
                                            <a href="attribute-event.html">Attribute Change Events</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1024
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1025
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1026
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1027
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1028
                                        <li data-description="Create a basic SpeedDater class, with Attribute support.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1029
                                            <a href="attribute-basic-speeddate.html">Attribute Based Speed Dating</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1030
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1031
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1032
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1033
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1034
                                        <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
  1035
                                            <a href="attribute-event-speeddate.html">Attribute Event Based Speed Dating</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1036
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1037
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1038
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1039
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1040
                                        <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
  1041
                                            <a href="attribute-getset.html">Attribute Getters, Setters and Validators</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1042
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1043
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1044
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1045
                            </ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1046
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1047
                    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1048
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1049
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1050
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1051
            </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1052
        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1053
    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1054
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1055
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1056
<script src="../assets/vendor/prettify/prettify-min.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1057
<script>prettyPrint();</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1058
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1059
<script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1060
YUI.Env.Tests = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1061
    examples: [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1062
    project: '../assets',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1063
    assets: '../assets/attribute',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1064
    name: 'attribute-getset',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1065
    title: 'Attribute Getters, Setters and Validators',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1066
    newWindow: '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1067
    auto:  false 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1068
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1069
YUI.Env.Tests.examples.push('attribute-basic');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1070
YUI.Env.Tests.examples.push('attribute-rw');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1071
YUI.Env.Tests.examples.push('attribute-event');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1072
YUI.Env.Tests.examples.push('attribute-basic-speeddate');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1073
YUI.Env.Tests.examples.push('attribute-event-speeddate');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1074
YUI.Env.Tests.examples.push('attribute-getset');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1075
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1076
</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1077
<script src="../assets/yui/test-runner.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1078
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1079
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1080
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1081
</body>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1082
</html>