src/cm/media/js/lib/yui/yui3.0.0/examples/widget/widget-extend_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>Extending the base widget class</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
    .yui-spinner-hidden {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
        display:none;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
    .yui-spinner {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
        display:-moz-inline-stack;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
        display:inline-block;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
        zoom:1;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
        *display:inline;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
        vertical-align:middle;
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
    .yui-spinner-content {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
        padding:1px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
        position:relative;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
    .yui-spinner-value {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
        width:2em;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
        height:1.5em;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
        text-align:right;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
        margin-right:22px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
        vertical-align:top;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
        border:1px solid #000;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
        padding:2px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
    .yui-spinner-increment, .yui-spinner-decrement {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
        position:absolute;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
        height:1em;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
        width:22px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
        overflow:hidden;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
        text-indent:-10em;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
        border:1px solid #999;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
        margin:0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
        padding:0px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
    .yui-spinner-increment {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
        top:1px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
        *top:2px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
        right:1px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
        background:#ddd url(assets/arrows.png) no-repeat 50% 0px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
     .yui-spinner-decrement {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
        bottom:1px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
        *bottom:2px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
        right:1px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
        background:#ddd url(assets/arrows.png) no-repeat 50% -20px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
     }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
    #widget-extend-example {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
        padding:5px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
    #widget-extend-example .hint {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
        margin-top:10px;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
        font-size:85%;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
        color:#00a;
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
</style>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
<!--end custom header content for this example-->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
</head>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
<body class=" yui-skin-sam">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
<h1>Extending the base widget class</h1>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
<div class="exampleIntro">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
	This example shows how to extend the base <code>Widget</code> class to create a simple, re-usable spinner control. The <code>Spinner</code> class created in the example is not intended to be a fully featured spinner. It is used here as a concrete example, to convey some of the key concepts to keep in mind when extending the <code>Widget</code> class.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
<!--BEGIN SOURCE CODE FOR EXAMPLE =============================== -->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
<div id="widget-extend-example">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
    A basic spinner widget: <div id="numberField"><input type="text" class="yui-spinner-value" value="20" /></div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
    <p class="hint">Click the buttons, or the arrow up/down and page up/down keys on your keyboard to change the spinner's value</p>
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
<script type="text/javascript">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
YUI({base:"../../build/", timeout: 10000}).use("event-key", "widget", function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
    var Lang = Y.Lang,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
        Widget = Y.Widget,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
        Node = Y.Node;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
    /* Spinner class constructor */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
    function Spinner(config) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
        Spinner.superclass.constructor.apply(this, arguments);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
    /* 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
     * Required NAME static field, to identify the Widget class and 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
     * used as an event prefix, to generate class names etc. (set to the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
     * class name in camel case). 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
    Spinner.NAME = "spinner";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
    /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
     * The attribute configuration for the Spinner widget. Attributes can be
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
     * defined with default values, get/set functions and validator functions
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
     * as with any other class extending Base.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
    Spinner.ATTRS = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
        // The minimum value for the spinner.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
        min : {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
            value:0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
        // The maximum value for the spinner.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
        max : {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
            value:100
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
        // The current value of the spinner.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
        value : {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
            value:0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
            validator: function(val) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
                return this._validateValue(val);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
        // Amount to increment/decrement the spinner when the buttons or arrow up/down keys are pressed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
        minorStep : {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
            value:1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
        // Amount to increment/decrement the spinner when the page up/down keys are pressed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
        majorStep : {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
            value:10
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
        // The localizable strings for the spinner. This attribute is 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
        // defined by the base Widget class but has an empty value. The
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
        // spinner is simply providing a default value for the attribute.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
        strings: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
            value: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
                tooltip: "Press the arrow up/down keys for minor increments, page up/down for major increments.",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
                increment: "Increment",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
                decrement: "Decrement"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
    /* Static constant used to identify the classname applied to the spinners value field */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
    Spinner.INPUT_CLASS = Y.ClassNameManager.getClassName(Spinner.NAME, "value");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
    /* Static constants used to define the markup templates used to create Spinner DOM elements */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
    Spinner.INPUT_TEMPLATE = '<input type="text" class="' + Spinner.INPUT_CLASS + '">';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
    Spinner.BTN_TEMPLATE = '<button type="button"></button>';
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
     * The HTML_PARSER static constant is used by the Widget base class to populate 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
     * the configuration for the spinner instance from markup already on the page.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
     * The Spinner class attempts to set the value of the spinner widget if it
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
     * finds the appropriate input element on the page.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
    Spinner.HTML_PARSER = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
        value: function (contentBox) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
            var node = contentBox.one("." + Spinner.INPUT_CLASS);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
            return (node) ? parseInt(node.get("value")) : null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
    /* Spinner extends the base Widget class */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
    Y.extend(Spinner, Widget, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   198
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   199
        /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   200
         * initializer is part of the lifecycle introduced by 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   201
         * the Widget class. It is invoked during construction,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   202
         * and can be used to setup instance specific state.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   203
         * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   204
         * The Spinner class does not need to perform anything
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   205
         * specific in this method, but it is left in as an example.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   206
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   207
        initializer: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   208
            // Not doing anything special during initialization
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   209
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   210
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   211
        /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   212
         * destructor is part of the lifecycle introduced by 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   213
         * the Widget class. It is invoked during destruction,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   214
         * and can be used to cleanup instance specific state.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   215
         * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   216
         * The spinner cleans up any node references it's holding
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   217
         * onto. The Widget classes destructor will purge the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   218
         * widget's bounding box of event listeners, so spinner 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   219
         * only needs to clean up listeners it attaches outside of 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   220
         * the bounding box.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   221
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   222
        destructor : function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   223
            this._documentMouseUpHandle.detach();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   224
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   225
            this.inputNode = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   226
            this.incrementNode = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   227
            this.decrementNode = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   228
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   229
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   230
        /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   231
         * renderUI is part of the lifecycle introduced by the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   232
         * Widget class. Widget's renderer method invokes:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   233
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   234
         *     renderUI()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   235
         *     bindUI()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   236
         *     syncUI()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   237
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   238
         * renderUI is intended to be used by the Widget subclass
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   239
         * to create or insert new elements into the DOM. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   240
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   241
         * For spinner the method adds the input (if it's not already 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   242
         * present in the markup), and creates the inc/dec buttons
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   243
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   244
        renderUI : function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   245
            this._renderInput();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   246
            this._renderButtons();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   247
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   248
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   249
        /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   250
         * bindUI is intended to be used by the Widget subclass 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   251
         * to bind any event listeners which will drive the Widget UI.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   252
         * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   253
         * It will generally bind event listeners for attribute change
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   254
         * events, to update the state of the rendered UI in response 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   255
         * to attribute value changes, and also attach any DOM events,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   256
         * to activate the UI.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   257
         * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   258
         * For spinner, the method:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   259
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   260
         * - Sets up the attribute change listener for the "value" attribute
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   261
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   262
         * - Binds key listeners for the arrow/page keys
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   263
         * - Binds mouseup/down listeners on the boundingBox, document respectively.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   264
         * - Binds a simple change listener on the input box.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   265
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   266
        bindUI : function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   267
            this.after("valueChange", this._afterValueChange);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   268
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   269
            var boundingBox = this.get("boundingBox");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   270
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   271
            // Looking for a key event which will fire continously across browsers while the key is held down. 38, 40 = arrow up/down, 33, 34 = page up/down
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   272
            var keyEventSpec = (!Y.UA.opera) ? "down:" : "press:";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   273
            keyEventSpec += "38, 40, 33, 34";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   274
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   275
            Y.on("key", Y.bind(this._onDirectionKey, this), boundingBox, keyEventSpec);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   276
            Y.on("mousedown", Y.bind(this._onMouseDown, this), boundingBox);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   277
            this._documentMouseUpHandle = Y.on("mouseup", Y.bind(this._onDocMouseUp, this), boundingBox.get("ownerDocument"));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   278
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   279
            Y.on("change", Y.bind(this._onInputChange, this), this.inputNode);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   280
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   281
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   282
        /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   283
         * syncUI is intended to be used by the Widget subclass to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   284
         * update the UI to reflect the current state of the widget.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   285
         * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   286
         * For spinner, the method sets the value of the input field,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   287
         * to match the current state of the value attribute.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   288
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   289
        syncUI : function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   290
            this._uiSetValue(this.get("value"));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   291
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   292
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   293
        /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   294
         * Creates the input control for the spinner and adds it to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   295
         * the widget's content box, if not already in the markup.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   296
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   297
        _renderInput : function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   298
            var contentBox = this.get("contentBox"),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   299
                input = contentBox.one("." + Spinner.INPUT_CLASS),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   300
                strings = this.get("strings");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   301
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   302
            if (!input) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   303
                input = Node.create(Spinner.INPUT_TEMPLATE);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   304
                contentBox.appendChild(input);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   305
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   306
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   307
            input.set("title", strings.tooltip);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   308
            this.inputNode = input;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   309
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   310
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   311
        /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   312
         * Creates the button controls for the spinner and add them to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   313
         * the widget's content box, if not already in the markup.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   314
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   315
        _renderButtons : function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   316
            var contentBox = this.get("contentBox"),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   317
                strings = this.get("strings");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   318
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   319
            var inc = this._createButton(strings.increment, this.getClassName("increment"));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   320
            var dec = this._createButton(strings.decrement, this.getClassName("decrement"));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   321
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   322
            this.incrementNode = contentBox.appendChild(inc);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   323
            this.decrementNode = contentBox.appendChild(dec);
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
        /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   327
         * Utility method, to create a spinner button
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   328
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   329
        _createButton : function(text, className) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   330
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   331
            var btn = Y.Node.create(Spinner.BTN_TEMPLATE);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   332
            btn.set("innerHTML", text);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   333
            btn.set("title", text);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   334
            btn.addClass(className);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   335
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   336
            return btn;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   337
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   338
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   339
        /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   340
         * Bounding box mouse down handler. Will determine if the mouse down
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   341
         * is on one of the spinner buttons, and increment/decrement the value
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   342
         * accordingly.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   343
         * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   344
         * The method also sets up a timer, to support the user holding the mouse
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   345
         * down on the spinner buttons. The timer is cleared when a mouse up event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   346
         * is detected.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   347
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   348
        _onMouseDown : function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   349
            var node = e.target,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   350
                dir,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   351
                handled = false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   352
                currVal = this.get("value"),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   353
                minorStep = this.get("minorStep");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   354
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   355
            if (node.hasClass(this.getClassName("increment"))) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   356
                this.set("value", currVal + minorStep);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   357
                dir = 1;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   358
                handled = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   359
            } else if (node.hasClass(this.getClassName("decrement"))) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   360
                this.set("value", currVal - minorStep);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   361
                dir = -1;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   362
                handled = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   363
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   364
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   365
            if (handled) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   366
                this._setMouseDownTimers(dir, minorStep);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   367
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   368
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   369
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   370
        /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   371
         * Document mouse up handler. Clears the timers supporting
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   372
         * the "mouse held down" behavior.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   373
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   374
        _onDocMouseUp : function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   375
            this._clearMouseDownTimers();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   376
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   377
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   378
        /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   379
         * Bounding box Arrow up/down, Page up/down key listener.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   380
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   381
         * Increments/Decrement the spinner value, based on the key pressed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   382
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   383
        _onDirectionKey : function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   384
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   385
            e.preventDefault();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   386
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   387
            var currVal = this.get("value"),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   388
                newVal = currVal,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   389
                minorStep = this.get("minorStep"),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   390
                majorStep = this.get("majorStep");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   391
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   392
            switch (e.charCode) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   393
                case 38:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   394
                    newVal += minorStep;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   395
                    break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   396
                case 40:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   397
                    newVal -= minorStep;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   398
                    break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   399
                case 33:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   400
                    newVal += majorStep;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   401
                    newVal = Math.min(newVal, this.get("max"));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   402
                    break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   403
                case 34:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   404
                    newVal -= majorStep;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   405
                    newVal = Math.max(newVal, this.get("min"));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   406
                    break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   407
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   408
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   409
            if (newVal !== currVal) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   410
                this.set("value", newVal);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   411
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   412
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   413
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   414
        /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   415
         * Simple change handler, to make sure user does not input an invalid value
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   416
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   417
        _onInputChange : function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   418
            if (!this._validateValue(this.inputNode.get("value"))) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   419
                this.syncUI();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   420
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   421
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   422
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   423
        /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   424
         * Initiates mouse down timers, to increment slider, while mouse button
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   425
         * is held down
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   426
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   427
        _setMouseDownTimers : function(dir, step) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   428
            this._mouseDownTimer = Y.later(500, this, function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   429
                this._mousePressTimer = Y.later(100, this, function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   430
                    this.set("value", this.get("value") + (dir * step));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   431
                }, null, true)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   432
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   433
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   434
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   435
        /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   436
         * Clears timers used to support the "mouse held down" behavior
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   437
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   438
        _clearMouseDownTimers : function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   439
            if (this._mouseDownTimer) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   440
                this._mouseDownTimer.cancel();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   441
                this._mouseDownTimer = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   442
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   443
            if (this._mousePressTimer) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   444
                this._mousePressTimer.cancel();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   445
                this._mousePressTimer = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   446
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   447
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   448
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   449
        /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   450
         * value attribute change listener. Updates the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   451
         * value in the rendered input box, whenever the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   452
         * attribute value changes.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   453
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   454
        _afterValueChange : function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   455
            this._uiSetValue(e.newVal);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   456
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   457
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   458
        /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   459
         * Updates the value of the input box to reflect 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   460
         * the value passed in
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   461
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   462
        _uiSetValue : function(val) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   463
            this.inputNode.set("value", val);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   464
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   465
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   466
        /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   467
         * value attribute default validator. Verifies that
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   468
         * the value being set lies between the min/max value
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   469
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   470
        _validateValue: function(val) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   471
            var min = this.get("min"),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   472
                max = this.get("max");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   473
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   474
            return (Lang.isNumber(val) && val >= min && val <= max);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   475
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   476
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   477
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   478
    // Create a new Spinner instance, drawing it's 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   479
    // starting value from an input field already on the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   480
    // page (contained in the #numberField content box)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   481
    var spinner = new Spinner({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   482
        contentBox: "#numberField",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   483
        max:100,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   484
        min:0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   485
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   486
    spinner.render();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   487
    spinner.focus();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   488
});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   489
</script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   490
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   491
<!--END SOURCE CODE FOR EXAMPLE =============================== -->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   492
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   493
</body>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   494
</html>