src/cm/media/js/lib/yui/yui3.0.0/examples/attribute/attribute-getset_clean.html
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 0 40c8f766c9b8
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
<html>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
<head>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
<meta http-equiv="content-type" content="text/html; charset=utf-8">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
<title>Attribute Getters, Setters and Validators</title>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
<style type="text/css">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
/*margin and padding on body element
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
  can introduce errors in determining
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
  element position and are not recommended;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
  we turn them off as a foundation for YUI
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
  CSS treatments. */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
body {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
	margin:0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
	padding:0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
</style>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
<link type="text/css" rel="stylesheet" href="../../build/cssfonts/fonts-min.css" />
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
<script type="text/javascript" src="../../build/yui/yui-min.js"></script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
<!--begin custom header content for this example-->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
<style type="text/css">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
    #boxParent {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
        overflow:hidden;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
        background-color:#004c6d;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
        height:25em;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
        padding:10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
        margin:5px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
    #boxParent .yui-box p, #attrs p {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
        margin:2px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
    .attrs {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
        border:1px solid #000;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
        background-color:#cdcdcd;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
        margin:5px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
    .attrs .header {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
        font-weight:bold;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
        background-color:#aaa;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
        padding:5px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
    .attrs .body {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
        padding:10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
    .attrs .body .hints li {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
        padding-bottom:10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
    .attrs .footer {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
        padding:0px 20px 10px 20px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
    .attrs label {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
        font-weight:bold;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
        display:block;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
        float:left;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
        width:4em;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
    .attrs .hint {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
        font-size:85%;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
        color: #004c6d;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
    .attrs .fields {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
        border-top:1px solid #aaa;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
        padding:10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
    .yui-box {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
        padding:5px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
        border:1px solid #000;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
        width:8em;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
        height:8em;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
        text-align:center;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
        color:#000;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
    .yui-box .color, .yui-box .coord {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
        font-family:courier;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
</style>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
<!--end custom header content for this example-->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
</head>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
<body class=" yui-skin-sam">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
<h1>Attribute Getters, Setters and Validators</h1>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
<div class="exampleIntro">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
	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. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
<!--BEGIN SOURCE CODE FOR EXAMPLE =============================== -->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
<div id="attrs" class="attrs">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
    <div class="header">Enter new values and click the "Set" buttons</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
    <div class="body">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
        <ul class="hints">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
            <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>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
            <li>Try entering rgb, hex or keyword color values [ <code>rgb(255,0,0)</code>, <code>#ff0000</code>, <code>red</code> ].</li>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
        </ul>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
        <div class="fields">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
            <p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
                <label for="x">x:</label>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
                <input type="text" name="x" id="x" />
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
                <button type="button" class="action" id="setX">Set</button>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
                <span id="xhint" class="hint"></span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
            </p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
            <p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
                <label for="y">y:</label>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
                <input type="text" name="y" id="y" />
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
                <button type="button" class="action" id="setY">Set</button>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
                <span id="yhint" class="hint"></span>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
            </p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
            <p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
                <label for="color">color:</label>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
                <input type="text" name="color" id="color" />
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
                <button type="button" class="action" id="setColor">Set</button>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
            </p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
        </div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
    </div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
    <div class="footer">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
        <button type="button" class="action" id="setXY">Set XY</button>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
        <button type="button" class="action" id="setAll">Set All</button>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
        <button type="button" class="action" id="getAll">Get All</button>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
    </div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
<div id="boxParent"></div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
<script type="text/javascript">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
// Get a new YUI instance 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
YUI({base:"../../build/", timeout: 10000}).use("node", "attribute", function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
    var boxParent = Y.one("#boxParent");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
    // Setup a custom class with attribute support
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
    function Box(cfg) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
        this._createNode(cfg);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
        // Attribute configuration
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
        var attrs = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
            "parent" : {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
                value: null
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
            "x" : {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
                setter: function(val, name) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
                    // Pass through x value to xy
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
                    this.set("xy", [parseInt(val), this.get("y")]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
                },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
                getter: function(val, name) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
                    // Get x value from xy
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
                    return this.get("xy")[0];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
            "y" : {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
                setter: function(val, name) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
                    // Pass through y value to xy
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
                    this.set("xy", [this.get("x"), parseInt(val)]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
                },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
                getter: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
                    // Get y value from xy
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
                    return this.get("xy")[1];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
            "xy" : {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
                // Actual stored xy co-ordinates
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
                value: [0, 0],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
                setter: function(val, name) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
                    // Constrain XY value to the parent element.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
                    // Returns the constrained xy value, which will
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
                    // be the final value stored.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   198
                    return this.constrain(val);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   199
                },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   200
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   201
                validator: function(val, name) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   202
                    // Ensure we only store a valid data value
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   203
                    return (Y.Lang.isArray(val) && val.length == 2 && Y.Lang.isNumber(val[0]) && Y.Lang.isNumber(val[1]));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   204
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   205
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   206
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   207
            "color" : {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   208
                value: "olive",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   209
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   210
                getter: function(val, name) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   211
                    // Always normalize the returned value to 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   212
                    // a hex color value,  even if the stored 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   213
                    // value is a keyword, or an rgb value.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   214
                    if (val) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   215
                        return Y.Color.toHex(val);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   216
                    } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   217
                        return null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   218
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   219
                },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   220
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   221
                validator: function(val, name) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   222
                    // Ensure we only store rgb, hex or keyword values.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   223
                    return (Y.Color.re_RGB.test(val) || Y.Color.re_hex.test(val) || Y.Color.KEYWORDS[val]); 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   224
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   225
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   226
        };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   227
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   228
        this.addAttrs(attrs, cfg);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   229
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   230
        this._sync();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   231
        this._bind();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   232
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   233
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   234
    Box.BUFFER = 5;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   235
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   236
    // Create the box node
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   237
    Box.prototype._createNode = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   238
        this._node = Y.Node.create('<div class="yui-box"><p>Positioned Box</p><p class="coord"></p><p class="color">None</p></div>');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   239
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   240
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   241
    // Update rendered state to match the attribute state
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   242
    Box.prototype._sync = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   243
        this._syncParent();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   244
        this._syncXY();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   245
        this._syncColor();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   246
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   247
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   248
    Box.prototype._syncParent = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   249
        this.get("parent").appendChild(this._node);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   250
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   251
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   252
    Box.prototype._syncXY = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   253
        this._node.setXY(this.get("xy"));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   254
        this._node.one("p.coord").set("innerHTML", "[" + this.get("x") + "," + this.get("y") + "]");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   255
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   256
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   257
    Box.prototype._syncColor = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   258
        this._node.setStyle("backgroundColor", this.get("color"));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   259
        this._node.one("p.color").set("innerHTML", this.get("color"));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   260
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   261
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   262
    // Bind listeners for attribute change events
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   263
    Box.prototype._bind = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   264
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   265
        // Reflect any changes in xy, to the rendered Node
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   266
        this.after("xyChange", this._syncXY);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   267
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   268
        // Reflect any changes in color, to the rendered Node
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   269
        // and output the color value received from get
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   270
        this.after("colorChange", this._syncColor);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   271
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   272
        // Append the rendered node to the parent provided
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   273
        this.after("parentChange", this._syncParent);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   274
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   275
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   276
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   277
    // Get min, max unconstrained values for X. Using Math.round to handle FF3's sub-pixel region values
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   278
    Box.prototype.getXConstraints = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   279
        var parentRegion = this.get("parent").get("region");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   280
        return [Math.round(parentRegion.left + Box.BUFFER), Math.round(parentRegion.right - this._node.get("offsetWidth") - Box.BUFFER)];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   281
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   282
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   283
    // Get min, max unconstrained values for Y.  Using Math.round to handle FF3's sub-pixel region values
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   284
    Box.prototype.getYConstraints = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   285
        var parentRegion = this.get("parent").get("region");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   286
        return [Math.round(parentRegion.top + Box.BUFFER), Math.round(parentRegion.bottom - this._node.get("offsetHeight") - Box.BUFFER)];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   287
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   288
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   289
    // Constrain the x,y value provided
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   290
    Box.prototype.constrain = function(val) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   291
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   292
        // If the X value places the box outside it's parent,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   293
        // modify it's value to place the box inside it's parent.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   294
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   295
        var xConstraints = this.getXConstraints();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   296
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   297
        if (val[0] < xConstraints[0]) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   298
            val[0] = xConstraints[0];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   299
        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   300
            if (val[0] > xConstraints[1]) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   301
                val[0] = xConstraints[1];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   302
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   303
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   304
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   305
        // If the Y value places the box outside it's parent,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   306
        // modify it's value to place the box inside it's parent.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   307
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   308
        var yConstraints = this.getYConstraints();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   309
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   310
        if (val[1] < yConstraints[0]) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   311
            val[1] = yConstraints[0];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   312
        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   313
            if (val[1] > yConstraints[1]) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   314
                val[1] = yConstraints[1];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   315
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   316
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   317
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   318
        return val;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   319
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   320
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   321
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   322
    Y.augment(Box, Y.Attribute);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   323
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   324
    // ------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   325
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   326
    // Create a new instance of Box
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   327
    var box = new Box({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   328
        parent : boxParent 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   329
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   330
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   331
    // Set references to form controls
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   332
    var xTxt = Y.one("#x");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   333
    var yTxt = Y.one("#y");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   334
    var colorTxt = Y.one("#color");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   335
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   336
    var xHint = Y.one("#xhint");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   337
    var yHint = Y.one("#yhint");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   338
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   339
    function getAll() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   340
        xTxt.set("value", box.get("x"));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   341
        yTxt.set("value", box.get("y"));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   342
        colorTxt.set("value", box.get("color"));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   343
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   344
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   345
    // Bind DOM events for Form Controls
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   346
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   347
    // Use event delegation for the action button clicks
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   348
    Y.on("delegate", function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   349
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   350
        // Get Node target from the event object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   351
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   352
        // We already know it's a button which has an action because
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   353
        // of our selector (button.action), so all we need to do is 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   354
        // route it based on the id.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   355
        var id = e.currentTarget.get("id");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   356
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   357
        switch (id) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   358
            case "setXY":
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   359
                box.set("xy", [parseInt(xTxt.get("value")), parseInt(yTxt.get("value"))]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   360
                break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   361
            case "setX":
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   362
                box.set("x", parseInt(xTxt.get("value")));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   363
                break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   364
            case "setY":
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   365
                box.set("y", parseInt(yTxt.get("value")));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   366
                break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   367
            case "setColor":
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   368
                box.set("color", Y.Lang.trim(colorTxt.get("value")));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   369
                break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   370
            case "setAll":
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   371
                box.set("xy", [parseInt(xTxt.get("value")), parseInt(yTxt.get("value"))]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   372
                box.set("color", Y.Lang.trim(colorTxt.get("value")));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   373
                break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   374
            case "getAll":
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   375
                getAll();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   376
                break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   377
            default:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   378
                break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   379
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   380
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   381
    }, "#attrs", "click", "button.action");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   382
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   383
    // Bind listeners to provide min, max unconstrained value hints for x, y
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   384
    // (focus/blur doesn't bubble, so bind individual listeners)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   385
    Y.on("focus", function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   386
        var minmax = box.getXConstraints();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   387
        xHint.set("innerHTML", "Valid values: " + minmax[0] + " to " + minmax[1]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   388
    }, xTxt);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   389
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   390
    Y.on("focus", function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   391
        var minmax = box.getYConstraints();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   392
        yHint.set("innerHTML", "Valid values: " + minmax[0] + " to " + minmax[1]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   393
    }, yTxt);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   394
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   395
    Y.on("blur", function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   396
        xHint.set("innerHTML", "");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   397
    }, xTxt);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   398
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   399
    Y.on("blur", function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   400
        yHint.set("innerHTML", "");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   401
    }, yTxt);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   402
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   403
    getAll();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   404
});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   405
</script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   406
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   407
<!--END SOURCE CODE FOR EXAMPLE =============================== -->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   408
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   409
</body>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   410
</html>