src/cm/media/js/lib/yui/yui_3.10.3/docs/widget/index.html
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 525 89ef5ed3c48b
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
<!DOCTYPE html>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
<html lang="en">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
<head>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
    <meta charset="utf-8">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
    <title>Widget</title>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=PT+Sans:400,700,400italic,700italic">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
    <link rel="stylesheet" href="../../build/cssgrids/cssgrids-min.css">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
    <link rel="stylesheet" href="../assets/css/main.css">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
    <link rel="stylesheet" href="../assets/vendor/prettify/prettify-min.css">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
    <link rel="shortcut icon" type="image/png" href="../assets/favicon.png">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
    <script src="../../build/yui/yui-min.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
</head>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
<body>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
<!--
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
<a href="https://github.com/yui/yui3"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub"></a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
-->
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
<div id="doc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
    <div id="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
        <h1><img src="http://yuilibrary.com/img/yui-logo.png"></h1>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
        <a href="#toc" class="jump">Jump to Table of Contents</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
            <h1>Widget</h1>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
    <div class="yui3-g">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
        <div class="yui3-u-3-4">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
            <div id="main">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
                <div class="content"><div class="intro">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
    <p><code>Widget</code> is the foundation class from which all YUI 3 widgets are derived. It provides the following pieces of core functionality on top of what <a href="../base/index.html">Base</a> already provides:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
    <ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
        <li>Adds the <code>render</code> lifecycle moment, to <a href="../base/index.html">Base's</a> <code>init</code> and <code>destroy</code> moments</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
        <li>Abstract rendering methods to promote a consistent MVC pattern across widgets</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
        <li>A common set of widget attributes</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
        <li>Consistent markup generation support</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
        <li>Consistent class-name generation support</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
        <li>Built-in progressive enhancement support</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
    </ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
<h2 id="responsibilities">What Widget Provides</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
<h3 id="structure">Class Structure And Responsibilities</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
<img src="../assets/widget/widget-class-diagram.png" alt="The widget class diagram" width="436" height="357">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
<p><code>Widget</code> provides the foundation class on which all YUI 3 widgets will be built.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
Although instantiable and usable by itself, it is designed to be extended to create widgets which address
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
specific user interaction patterns.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
<p>The <code>Widget</code> class extends <a href="http://yuilibrary.com/yui/docs/api/Base.html"><code>Base</code></a>. Therefore it provides
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
the same <code>Attribute</code>, <code>Event.Provider</code> and <code>Plugin.Host</code> support as <a href="../base/index.html#extendbase"><code>Base</code></a> does.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
<p>It adds the following core functionality:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
    <dt><strong>Basic Attributes</strong></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
    <dd>It introduces a common set of attributes that will be available on any widget.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
    For example, <code>boundingBox</code>, <code>contentBox</code>, <code>width</code>, <code>height</code>, <code>visible</code>, <code>focused</code> and <code>disabled</code>.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
    <dt><strong>Render Lifecycle Phase</strong></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
    <dd>It adds the <code>render</code> lifecycle method (and event) to the <code>init</code> and <code>destroy</code>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
    lifecycle methods provided by <code>Base</code>.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
    <dt><strong>Abstract Rendering Methods</strong></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
    <dd>It establishes abstract methods <code>renderUI</code>, <code>bindUI</code> and <code>syncUI</code> to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
    provide consistent entry points for rendering across all widgets.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
    <dt><strong>Consistent Progressive Enhancement</strong></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
    <dd>It provides a common entry point for <a href="http://en.wikipedia.org/wiki/Progressive_Enhancement">Progressive Enhancement</a> during widget initialization and also provides
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
    the infrastructure to hide progressively enhanced markup to avoid flashes of unstyled content.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
    <dt><strong>String Localization</strong></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
    <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
        The <code>strings</code> attribute provides a consistent API for string management in all Widgets.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
        Widget developers can define strings for their widget in an external language bundle when packaging their
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
        widgets as a YUI module, and use the Internationalization utility to pull in strings for a given locale
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
        as demonstrated in the <a href="../intl/intl-basic.html">Language Resource Bundles</a> example.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
    </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
<h3 id="attributes">Basic Attributes</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
<p>Widget establishes a common set of attributes which will be available in all YUI 3 widgets. The core attributes are discussed below:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
<table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
    <tr><th>Attribute</th><th>Description</th></tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
    <tr><td><code>boundingBox</code></td><td>The widget's outermost node, used for sizing and positioning; this element can also serve as a containing node for any decorator elements used for skinning.</td></tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
    <tr><td><code>contentBox</code></td><td>A node that is a direct descendant of a widget's bounding box and houses its content. This will generally be the node that establishes the look and feel for the widget.</td></tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
    <tr><td><code>srcNode</code></td><td>An existing node in the document provided by application developers when progressively enhancing existing markup to create the widget. By default, this resolves to the <code>contentBox</code>.</td></tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
    <tr><td><code>tabIndex</code></td><td>The tabIndex, applied to the bounding box.</td></tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
    <tr><td><code>focused</code></td><td>Flag, indicating if the widget currently has focus. <code>Widget</code> marks the bounding box with a "focused" class, but other than that the focus implementation is left to the specific widget class.</td></tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
    <tr><td><code>disabled</code></td><td>Flag, indicating if the widget is disabled. <code>Widget</code> marks the bounding box with a "disabled" class, but other than that the disabled implementation is left to the specific widget class.</td></tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
    <tr><td><code>visible</code></td><td>Flag, indicating whether or not the widget is visible. <code>Widget</code> marks the bounding box with a "hidden" class. The hidden implementation is left to the CSS delivered by the specific widget class (viz. whether or not the widget uses visibility, display or off screen positioning to actually hide the widget).</td></tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
    <tr><td><code>height</code></td><td>String with units, or a number, representing the height of the widget. If a number is provided, the default unit, defined by <code>Widget</code>'s <code>DEF_UNIT</code>, property is used. The height is applied to the bounding box.</td></tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
    <tr><td><code>width</code></td><td>String with units, or a number, representing the width of the widget. If a number is provided, the default unit, defined by <code>Widget</code>'s <code>DEF_UNIT</code>, property is used. The width is applied to the bounding box.</td></tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
    <tr><td><code>strings</code></td><td>The collection of strings used to label elements of the widget's UI. These should ideally be packaged separately from the Widget code, as discussed in the <a href="../intl/intl-basic.html">Language Resource Bundles</a> example.</td></tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
<h3 id="rendering">Rendering Methods</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
<p><code>Widget</code> adds the <code>render</code> method/lifecycle phase to the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
<code>init</code> and <code>destroy</code> phases established by Base.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
The <code>render</code> method establishes the point at which the widget lays down its UI by adding elements to (or modifying existing elements in) the DOM and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
setting up listeners to activate that UI. Having a distinct rendering phase promotes widget classes that separate state and corresponding logic
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
from the way the widget UI is displayed. This separation tends to allow the widget's state to be safely modified and queried before it is displayed or rendered to the DOM.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
<p>Additionally, this separation of concerns leads to code being split into methods that manipulate the widget's state or handle core "app" logic versus methods which work with the DOM.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
Following this practice makes it easier to customize and test one area or the other.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
<h4 id="the-lifecycle-methods-init-destroy-render">The Lifecycle Methods: <code>init, destroy, render</code></h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
<p>As with <code>init</code> and <code>destroy</code>, the <code>render</code> method on <code>Widget</code> is final and delegates to the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
widget implementation's <code>renderer</code> method to perform the actual rendering work:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
    <dt><a href="http://yuilibrary.com/yui/docs/api/Base.html#method_init"><code>init</code></a> <em>(inherited from <code>Base</code>)</em>:</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
    <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
        The <code>init</code> method loops through the class hierarchy, top down (Base first, subclass last) and:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
        <ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
            <li>Configures attributes for each class, based on the class' <code>ATTRS</code> static property.</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
            <li>Then, invokes the <code>initializer</code> method for the class.</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
        </ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
        <p>The <code>init</code> method fires an <code>init</code> event, which can be prevented to stop initialization from proceeding.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
    </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
</dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
    <dt><a href="http://yuilibrary.com/yui/docs/api/Base.html#method_destroy"><code>destroy</code></a> <em>(inherited from <code>Base</code>)</em>:</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
    <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
        <p>Invokes the <code>destructor</code> method for all classes in the widget hierarchy, bottom up (subclass first, Base last).</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
        <p>The <code>destroy</code> method fires a <code>destroy</code> event, which can be prevented to stop destruction from proceeding.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
    </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
</dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
    <dt><a href="http://yuilibrary.com/yui/docs/api/Widget.html#method_render"><code>render</code></a>:</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
    <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
        <p>Invokes the <code>renderer</code> method for the Widget instance. Unlike the <code>initializer</code> and <code>destructor</code>, this method
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
        is not chained automatically for the widget's class hierarchy.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
        The <code>render</code> method accepts a <code>parentNode</code> argument, which can be used to specify an existing node in the document, where the widget should be appended, when rendered.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
        If the widget's contentBox or boundingBox don't already exist in the document, and the <code>parentNode</code> argument is not provided, the widget is inserted as the first child of the document's body element (we <em>insert</em> as the default behavior, to avoid IE6 "Operation Aborted" errors).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
        <p>The <code>render</code> method fires a <code>render</code> event, which can be prevented to stop rendering from proceeding.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
    </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
</dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
<h4 id="widgets-renderer-method">Widget's <code>renderer</code> Method</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
<p>Widget provides a <a href="http://yuilibrary.com/yui/docs/api/Widget.html#method_renderer"><code>renderer</code></a> method implementation, which for most simple widgets will not need to be over-ridden.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
This <code>renderer</code> method is shown below:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
<pre class="code prettyprint">renderer: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
    this.renderUI();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
    this.bindUI();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
    this.syncUI();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
The <code>renderUI</code>, <code>bindUI</code> and <code>syncUI</code> are abstract (empty) methods in the <code>Widget</code> class which attempt to establish a common pattern for widget development.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
The intended role of each of these methods is described below, and most widgets will simply implement these methods based on their expected roles:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
    <dt><a href="http://yuilibrary.com/yui/docs/api/Widget.html#method_renderUI"><code>renderUI</code></a></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
    <dd>This method is responsible for creating and adding the nodes which the widget needs into the document (or modifying existing nodes, in the case of progressive enhancement).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
    It is usually the point at which the DOM is first modified by the widget.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
</dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
    <dt><a href="http://yuilibrary.com/yui/docs/api/Widget.html#method_bindUI"><code>bindUI</code></a></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
    <dd>This method is responsible for attaching event listeners which bind the UI to the widget state.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
    These listeners are generally attribute change listeners &mdash; used to update the state of the UI in response to changes in the attribute's value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
    It also attaches DOM event listeners to the UI to map user interactions to the widget's API.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
</dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
    <dt><a href="http://yuilibrary.com/yui/docs/api/Widget.html#method_syncUI"><code>syncUI</code></a></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
    <dd>This method is responsible for setting the initial state of the UI based on the current state of the widget at the time of rendering.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
</dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
<h3 id="progressive">Progressive Enhancement</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
<p>The <code>Widget</code> class establishes a standard entry point for widgets that need to provide support for <a href="http://en.wikipedia.org/wiki/Progressive_Enhancement">Progressive Enhancement</a>; this entry point is provided in the form of an <code>HTML_PARSER</code> property on each class.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
<p><a href="http://yuilibrary.com/yui/docs/api/Widget.html#property_Widget.HTML_PARSER"><code>HTML_PARSER</code></a> is a static property, used to define a hash of selectors or functions that are responsible for (a) parsing content for the widget from existing DOM elements and (b) extracting attribute configuration values for use during initialization.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
<pre class="code prettyprint">MyWidget.HTML_PARSER = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
     &#x2F;&#x2F; Set attributes which are Node references
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
     &#x2F;&#x2F; using selector syntax (uses node.one())
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
     titleNode: &quot;span.yui3-title&quot;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
     &#x2F;&#x2F; Set attributes which are multiple Node references
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
     &#x2F;&#x2F; using selector syntax (uses node.all())
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
     itemNodes: [&quot;li.yui3-listitem&quot;],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
     &#x2F;&#x2F; Set attributes using a parse function. Execution context
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
     &#x2F;&#x2F; is set to the widget instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
     label: function(srcNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
        return srcNode.one(&quot;input.yui3-title&quot;).get(&quot;innerHTML&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
     },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
     xValue: function(srcNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
         return srcNode.one(&quot;input.yui3-slider-xvalue&quot;).get(&quot;value&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
     },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
     yValue: function(srcNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
         return srcNode.one(&quot;input.yui3-slider-yvalue&quot;).get(&quot;value&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
     }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
};</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
<p>The <code>HTML_PARSER</code> property is evaluated when the Widget class' <code>initializer</code> method is invoked (so Widget sub-classes receive the configuration
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
object passed into the constructor). The object is iterated, to create a filled out configuration object for the widget, based on the content the user points to using the <code>srcNode</code> attribute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
For example, the parser definition above may lead to the following object literal when evaluated:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
<pre class="code prettyprint">{
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
    titleNode: NodeRef,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
    itemNodes: NodeListRef (multiple nodes),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
    label: &quot;My Widget&quot;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
    xValue: &quot;10&quot;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
    yValue: &quot;20&quot;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
<p>This object is merged with the user configuration object passed into the constructor (markup can be thought of as alternate source/format for configuration data), with the configuration object passed to the widget constructor taking precedence if a value for an attribute is found in both places.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
<h4 id="hidingmarkup">Hiding Progressively Enhanced Markup</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
<p>In addition to providing a common entry point for progressively enhanced solutions through the <code>HTML_PARSER</code>, Widget also provides the CSS hooks you need to initially hide content which will be progressively enhanced.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
<ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
    <li> If JavaScript <em>is not</em> enabled the content provided by the markup for the widget, should be visible and accessible.</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
    <li> If JavaScript <em>is enabled</em>, the widget source markup should be hidden as early as possible, to avoid the user seeing the flash of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
    unstyled content while the widget's JavaScript and CSS components are delivered to the page and the widget is rendered.</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
    <li> Once the widget is fully rendered it should then be displayed.</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
</ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
<p>In order to make this happen:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
<ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
    <li> <p>The <a href="../yui/index.html">YUI</a> seed file will stamp the documentElement (the &lt;HTML&gt; element) with a class of <code>&#x27;yui3-js-enabled&#x27;</code>.</p></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
    <li> <p>Application developers can then add a class name representing the &quot;loading&quot; state, to the widget's content (e.g. <code>&#x27;yui3-widget-loading&#x27;</code>).</p><p>This class can be used in combination with the &quot;yui3-js-enabled&quot; class name to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
         create style rules to hide the widget content while its JavaScript is being loaded.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
         <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
<pre class="code prettyprint">.yui3-js-enabled .yui3-widget-loading {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
   display: none;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
.yui3-js-enabled .yui3-overlay-loading {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
   &#x2F;* Hide overlay markup offscreen *&#x2F;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
   position:absolute;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
   top:-1000em;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
   left:-1000em;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
         </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
         <p>As shown in the example above, there is support for use of both a generic widget and type-specific widget class name by default (&quot;yui3-widget-loading&quot; and &quot;yui3-tabview-loading&quot;).</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
    <li> <p>Widget's renderer will remove the &quot;loading&quot; class names from both the bounding box and content box once the widget is rendered, allowing the fully functional widget to be revealed.</p></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
<h3 id="markup">Rendered Markup</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
<p>The <code>Widget</code> class establishes a common markup format for all widgets, through its <a href="http://yuilibrary.com/yui/docs/api/Widget.html#attr_boundingBox"><code>boundingBox</code></a> and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
<a href="http://yuilibrary.com/yui/docs/api/Widget.html#attr_contentBox"><code>contentBox</code></a> attributes.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
    Most widgets will have a bounding box wrapping a content box. They are both <code>DIV</code>s by default but can be customized by overriding the <code>BOUNDING_TEMPLATE</code> and <code>CONTENT_TEMPLATE</code> prototype properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
    However, the widget developer can also specify the <code>CONTENT_TEMPLATE</code> to be null, if their widget implementation does not require a two-box structure. In this case, both the boundingBox and contentBox attributes will point to the same node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
    The widget will create either of the nodes if they are not provided in the constructor, and add them to the document when the widget's <code>render</code> method is called.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
    As mentioned previously, if the <code>render</code> method is passed a node reference, the widget's bounding box is appended to that node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
<h4 id="the-bounding-box">The Bounding Box</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
<p>The bounding box is the outermost element owned by the widget and is used for functional, rather than visual, purposes.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
<ul class="topiclist">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
    <li><p class="topic">A class name identifying the widget is added to the bounding box.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
        <p>The default format for the class name is "yui3-[widgetname]". For example, for Slider, the "yui3-slider" class name is added to the bounding box.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
    <li><p class="topic">Additionally, class names for all widget classes in the class hierarchy are also used to tag the bounding box.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
        <p>For example, for a MultiThumbSlider, which may extend Slider, the bounding box is marked with the classes "yui3-widget", "yui3-slider" and "yui3-multithumbslider" (this is the only place where we mark an element with class names for all widget classes in the hierarchy).</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
        <p class="topic">Class names used for state management by the widget instance are also applied to the bounding box.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
        <p>The general format is "yui3-[widgetname]-[state]". For example "yui3-slider-hidden", "yui3-slider-disabled".</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
        <p class="topic">The widget's width and height values are applied to the bounding box if set, as are top/left (xy) positioning values, for positioned widgets.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
        <p class="topic">The bounding box is not expected to have any visual properties (e.g. borders, padding, etc.) applied to it.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
        <p>However it will have CSS defining how the widget impacts the document flow. For example, the bounding box type ("display:inline", "display:inline-block", "display:block") and the positioning scheme ("position:absolute", "position:relative").</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
<h4 id="the-content-box">The Content Box</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
<p>The content box is a child of the bounding box. The widget will add the elements which make up its core UI inside the content box.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
<ul class="topiclist">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
        <p class="topic">The content box also has an identifying class name applied to it.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
        <p>The default format is "yui3-[widgetname]-content". For example "yui3-slider-content".</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
    <li><p class="topic">Visual treatment for the widget is applied to the content box (e.g. borders, padding, background-color, etc.).</p></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
        <p class="topic">For progressively enhanced solutions, generally the application developer will only provide what will be the content box on the page and pass it into the constructor as the <code>srcNode</code> (rather than the bounding box).</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
        <p>The bounding box will be added dynamically when the widget is instantiated. This maintains semantic value (the content box ends up containing existing content), and avoids unnecessary markup on the page up front.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
<h4 id="widget-markup-diagram">Widget Markup Diagram</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
<p>The following illustration demonstrates how the markup and class names for a widget's bounding box and content box come together.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
<img src="../assets/widget/widget-dom.png" height="357" width="524" alt="Illustration of the two-box DOM layout for a widget.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
<h4 id="why-two-nested-boxes">Why Two Nested Boxes?</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
<p>Providing nested boxes for all widgets provides benefits for CSS application, decorative element support and bounding box dimension handling. These are detailed below:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
<ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
    <li>The nested structure allows the bounding box to act as a container for any additional decorator elements which need to be added for the widget, for example, elements which support rounded-corners, shadows, or shimming. These can live as siblings of the content box, and can be positioned and sized more efficiently since they have a common parent container.</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
    <li>Additionally, due to the consistent structure across all widgets, generic plugins can be written to provide the above decorator support, which are re-usable across all widgets.</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
    <li>Having a box without border and padding applied (the bounding box) allows for consistent width and height application across browser box model differences.</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
<h3 id="CSS">Class Names and CSS</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
<p>In order to provide consistent class names for use across all widgets, the <code>Widget</code> class provides two methods which are simple wrappers for the <code>ClassNameManager</code> utility, and leverage the <code>NAME</code> property defined for widget classes.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
    <dt>Instance Method: <code>getClassName(arg1, arg2, arg3 ...)</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
    <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
        <p>This method can be used to create class names which begin with the configured prefix for the application ("yui3-" by default) and the name of the widget (the <code>NAME</code> property, lowercase). For example:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
<pre class="code prettyprint">&#x2F;&#x2F; A method on a Spinner widget instance,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
&#x2F;&#x2F; with Spinner.NAME = &quot;spinner&quot;;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
renderSpinnerButton: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
    &#x2F;&#x2F; generates the class name &quot;yui3-spinner-increment-major&quot;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
    var btnClassName = this.getClassName(&quot;increment&quot;, &quot;major&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
        <p><strong>Note:</strong> The <code>ClassNameManager.getClassName(arg1, arg2, arg3 ...)</code> method can be used as a replacement for the above method, when class names need to be generated in a static context, by passing in the widget implementation's <code>NAME</code> property as the first argument. For example:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
<pre class="code prettyprint">&#x2F;&#x2F; Generates the class name &quot;yui3-spinner-button&quot;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
Spinner.BUTTON_TEMPLATE = Y.ClassNameManager.getClassName(
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
                                        Spinner.NAME, &quot;button&quot;);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
    </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
    <dt>Static Method: <code>Widget.getClassName(arg1, arg2, arg3 ....)</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
    <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
        This static version of the method (invoked directly on the <code>Widget</code> class, as opposed to "<code>this</code>") can be used to create class names which begin with a "yui3-widget" prefix. This maybe useful for plugins, which need to ship with CSS which targets a fixed class name, regardless of the widget instance to which they are applied.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
        For example:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
<pre class="code prettyprint">&#x2F;&#x2F; generates the class name &quot;yui3-widget-shim&quot;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
Widget.getClassName(&quot;shim&quot;);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
    </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
</dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
<p>If, as a custom widget developer, you want to override the default prefix (<code>yui3-[widgetname]</code>), you can define a static <code>CSS_PREFIX</code> property on your
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
widget's constructor function and CSS classnames will be prefixed with the value you set <code>CSS_PREFIX</code> to.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
<pre class="code prettyprint">&#x2F;&#x2F; Define a custom css prefix
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
MyWidget.CSS_PREFIX = &quot;myapp-common&quot;;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
&#x2F;&#x2F; Inside your widget code:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
_renderUI : function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
    &#x2F;&#x2F; Generates the class name &quot;myapp-common-selected&quot;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
    &#x2F;&#x2F; instead of &quot;yui3-mywidget-selected&quot;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
    var selectedClassName = this.getClassName(&quot;selected&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
<h4 id="css-implications">CSS Implications</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
<p>As a best practice, Widget avoids using the <code>style</code> attribute to control state such as "visible", "disabled" or "focused". Instead it marks the bounding box with class names which reflect the state:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
<table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
        <th>Attribute/State</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
        <th>CSS Class Applied</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
        <td>visible</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
        <td>yui3-[widgetname]-hidden</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
        <td>disabled</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
        <td>yui3-[widgetname]-disabled</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
        <td>focused</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
        <td>yui3-[widgetname]-focused</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
<p>In the above definitions, "[widgetname]" is the name of the widget (e.g. "menu", "overlay", "slider").
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
The widget name is combined with the state identifier so that different widgets can customize the way they handle visibility differently, and still work with IE6,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
where multiple class name rules, like <code>.yui3-menu.yui3-hidden</code> are not well supported. For example:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
<pre class="code prettyprint">&#x2F;* Hide by positioning off-screen *&#x2F;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
.yui3-menu-hidden {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
    top:-10000em;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
    left:-10000em;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
&#x2F;* Hide by flipping visibility *&#x2F;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
.yui3-overlay-hidden {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
    visibility:hidden;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
&#x2F;* Hide by flipping display *&#x2F;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
.yui3-slider-hidden {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
    display:none;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
However, providing an IE6-compatible format requires each widget to ship with the CSS rules defined for each of its states.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
Of the state-based rules above, all widgets will definitely end up providing a "yui3-[widgetname]-hidden" implementation to control visibility.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
Whether or not CSS rules for the other two states are provided is usually a function of whether or not the widget needs special UI handled for the "disabled" and "focused" states.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
<h3 id="uievents">Default UI Events</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
Widget publishes and fires custom events for any DOM events (<code>&quot;click&quot;</code>, <code>&quot;mouseover&quot;</code> etc.) which get fired inside its bounding box.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
Like all other Widget custom events, these events are prefixed with the widget's name (e.g. 'menuitem:click') and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
the default context of the event listener will be the widget that fired the event (as opposed to the Node firing the DOM event).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
These events provide application developers the ability to listen for UI events as part of the logical widget API, without having to be concerned with the DOM elements which make up the widget's UI.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
<p>Since these are events that many Widget instances are going to want to publish and fire, Widget does this by default to ensure that these events are fired in a performant, consistent way across Widget implementations.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
<ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
        Widget developers don't have to explicitly publish a given UI event in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
        order for Widget consumers to listen for them.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   469
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   470
        For performance, these events are only created when someone is listening, and the actual firing of these events is facilitated by a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   471
        single, delegated DOM event listener.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   472
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   473
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   474
    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   475
        <p>Widget developers can still choose to publish any given UI event in order to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   476
        explicitly control some aspect of the event.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   477
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   478
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   479
        The most likely use case is the desire to provide the default implementation/handler for a given
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   480
        event. For example: a developer might want to publish a <code>&quot;click&quot;</code> event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   481
        for a Menu widget with the goal of providing the default click
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   482
        behavior/function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   483
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   484
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   485
    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   486
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   487
        The set of DOM events published by widget is defined by the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   488
        UI_EVENTS prototype property.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   489
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   490
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   491
        This property defaults to <a href="http://yuilibrary.com/yui/docs/api/Node.html#property_DOM_EVENTS"><code>Node.DOM_EVENTS</code></a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   492
        Widget developers can use this property to pare down or extend the number of events that are published and fired automatically.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   493
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   494
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   495
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   496
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   497
<h2 id="creatingwidgets">Developing Your Own Widgets</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   498
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   499
<p>To create your own widget, you'll create a class which extends <code>Widget</code> and implements the properties and methods shown in the diagram below:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   500
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   501
<p><img src="../assets/widget/widget-template-diagram.png" alt="Illustration of the code template for a custom widget, showing the ATTRS property and initializer, destructor, renderUI, bindUI and syncUI methods" width="446" height="412"></p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   502
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   503
<p>The best place to start is by defining the attributes which make up your widget (the <code>ATTRS</code> static property). These will help define the state and API which your widget exposes to the application developer.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   504
You can then implement the <code>initializer</code>, <code>destructor</code>, <code>renderUI</code>, <code>bindUI</code> and <code>syncUI</code> methods, based on the responsibilities defined for them above,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   505
along with the methods which support the attribute state handling and API.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   506
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   507
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   508
The <a href="widget-extend.html">"Extending The Widget Class"</a> example walks you through the step-by-step process involved in implementing a Spinner widget using this template structure. The example along with the template file should provide a good jumping off point for developing your own widgets.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   509
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   510
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   511
<p>Additionally, the template structure shown above is captured in this <a href="../assets/widget/mywidget.js.txt">"MyWidget" template file</a>, which you can use as a starting point to develop your own widgets.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   512
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   513
<h2 id="pluginsandextensions">Plugins And Extensions</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   514
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   515
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   516
In addition to being able to subclass any given Widget class to provide custom widget implementations, YUI 3 also provides two additional code reuse mechanisms which can be used to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   517
package and reuse code to provide new widgets features, without being bound to a static all-or-nothing class hierarchy.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   518
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   519
These code reuse mechanisms are known as <a href="../base/#plugins"><em>Plugins</em></a> and <a href="../base/#extensions"><em>Extensions</em></a> and support for both of them is provided through Base.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   520
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   521
<p>Generally widget developers should aim to provide the core set of features or functionality for any widget by sub-classing <code>Widget</code> or an existing class derived from <code>Widget</code> using <code>Y.extend</code>.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   522
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   523
<p>Additional incremental features or functionality should be packaged into extensions or plugins so they can be reused across classes (in the case of extensions), or instances (in the case of plugins).</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   524
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   525
<h3 id="pluginorextension">Plugin or Extension?</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   526
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   527
<p>The question about whether a given piece of incremental functionality should be a Plugin or an Extension comes up frequently, and it's a design decision widget developers need to consider based on use cases for their widget.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   528
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   529
<p>As mentioned above, both Plugins and Extensions provide a mechanism to write and deliver atomic, incremental pieces of functionality which add to the core implementation. Where they differ is discussed below:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   530
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   531
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   532
    <dt>Extensions - A Class Level Concept</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   533
    <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   534
        <ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   535
            <li><p>Extensions provide features which can be mixed and matched at the <strong>class</strong> level.</p></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   536
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   537
            <li><p>Extensions are used by <strong>widget developers</strong> to create new widget <strong>classes</strong> which share the extension functionality.</p></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   538
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   539
            <li><p>If it contains functionality which is not optional for the class, it's an extension.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   540
                <p>Something baked into the class, but implemented so that it can also be re-used to build other classes.</p></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   541
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   542
            <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   543
                <p><a href="widget-parentchild-listbox.html">WidgetParent, WidgetChild</a> and <a href="widget-tooltip.html">WidgetPosition, WidgetStack</a> are good examples of extensions.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   544
                <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   545
                A <code>Tree</code> widget class always needs Parent/Child support. However, so does a <code>Menu</code> widget class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   546
                We want to reuse the Parent/Child support across both classes, without forcing them to extend a shared base class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   547
                Additionally, the Parent/Child functionality is a required for both classes; it is not optional.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   548
                </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   549
            </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   550
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   551
            <li><p>Extensions are applied to a <strong>class</strong> using the static <code>Base.build</code> method (or the <code>Base.create</code> or <code>Base.mix</code> sugar methods which sit on top of <code>Base.build</code>).</p></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   552
        </ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   553
    </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   554
    <dt>Plugins - An Instance Level Concept</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   555
    <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   556
        <ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   557
            <li><p>Plugins provide features which can be mixed and matched at the <strong>instance</strong> level.</p></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   558
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   559
            <li><p>Plugins are used by <strong>application developers</strong> to apply features to certain <strong>instances</strong> of a widget.</p></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   560
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   561
            <li><p>If it contains functionality which is not required for <em>all</em> instances of the class, it's a plugin.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   562
                <p>A feature which you may only want to apply to one instance, out of the ten instances of your widget on a page, is a plugin.</p></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   563
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   564
            <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   565
                <p>The <a href="../overlay/overlay-anim-plugin.html">Animation</a> and <a href="../overlay/overlay-io-plugin.html">IO</a> plugin examples are good use cases.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   566
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   567
                <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   568
                You don't want to have to bake Animation or IO support into a class (potentially resulting in the need to ship <code>MyAnimatedWidget</code>, <code>MyIOEnabledWidget</code>, <code>MyAnimatedAndIOEnabledWidget</code> and <code>MyWidget</code> classes).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   569
                The functionality is optional and can be plugged into just the <em>instances</em> of the single <code>MyWidget</code> class which need them.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   570
                </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   571
            </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   572
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   573
            <li><p>Plugins are applied to an <strong>instance</strong> using the instance's <code>plug</code> method.</p></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   574
        </ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   575
    </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   576
</dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   577
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   578
<h3 id="extensions">Widget Extensions</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   579
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   580
<p>As you start to develop widgets in YUI 3, there are a number of extensions packaged as part of the library which you can use with <code>Base.build</code> (or <code>Base.create, Base.mix</code>) to add functionality to your custom widget classes:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   581
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   582
<table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   583
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   584
        <th width="30%">Extension</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   585
        <th>Functionality</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   586
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   587
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   588
        <td>widget-position</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   589
        <td>Adds XY positioning support to the class.</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   590
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   591
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   592
        <td>widget-position-align</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   593
        <td>Adds XY aligned positioning support to the class.</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   594
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   595
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   596
        <td>widget-position-constrain</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   597
        <td>Adds constrained XY positioning support to the class.</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   598
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   599
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   600
        <td>widget-stack</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   601
        <td>Adds stacking (zIndex) support to the class.</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   602
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   603
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   604
        <td>widget-stdmod</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   605
        <td>Adds Standard Module (header, body, footer) support to the class.</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   606
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   607
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   608
        <td>widget-parent</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   609
        <td>Adds support to allow the widget to contain, manage and select child widgets.</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   610
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   611
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   612
        <td>widget-child</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   613
        <td>Adds support to allow the widget to be contained within a widget parent.</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   614
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   615
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   616
        <td>widget-buttons</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   617
        <td>Adds header/body/footer buttons support for Widgets that use the <code>WidgetStdMod</code> extension.</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   618
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   619
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   620
        <td>widget-autohide</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   621
        <td>Adds support to hide the widget when certain DOM events occur.</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   622
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   623
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   624
        <td>widget-modality</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   625
        <td>Adds support for modality to widgets.</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   626
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   627
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   628
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   629
<p>The functionality provided by the <code>widget-parent</code> and <code>widget-child</code> extensions, allowing widget developers to build nested widgets, is worth discussing in a little more detail:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   630
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   631
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   632
        <dt>widget-parent</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   633
        <dd>Adds support to allow the widget to contain, manage and select child widgets:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   634
            <ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   635
                <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   636
                    <p>It provides a consistent API for creating parent/child relationships:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   637
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   638
<pre class="code prettyprint">parent.add(child, n);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   639
parent.remove(n);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   640
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   641
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   642
                </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   643
                <li><p>These can be single level relationships (e.g. Tabs in a TabList, or Buttons in a Toolbar) or nested hierarchical relationships (e.g. Menus and MenuItems, or Trees and TreeNodes).</p></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   644
                <li><p>Parents are automatically set up as event targets for their children's events, allowing you to leverage custom event bubbling to listen for events higher up in the hierarchy.</p></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   645
                <li><p>Parents automatically render their children when rendered.</p></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   646
                <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   647
                    <p>Widget Parent augments the <a href="http://yuilibrary.com/yui/docs/api/ArrayList.html">ArrayList API</a>, providing a full range of iteration and traversal methods for it's children:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   648
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   649
<pre class="code prettyprint">parent.each(function(child) {...});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   650
parent.item(n);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   651
parent.indexOf(child);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   652
parent.size();</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   653
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   654
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   655
                </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   656
                <li><p>It also provides selection support, including support for non-binary selection states (all, none, some).</p></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   657
                <li><p>Finally, it provides a sugar layer to simplify adding children to the parent during construction, by supporting an object literal format to initialize children.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   658
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   659
<pre class="code prettyprint">var tabview = new Y.TabView({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   660
    children: [{
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   661
        label: &#x27;foo&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   662
        content: &#x27;&lt;p&gt;foo content&lt;&#x2F;p&gt;&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   663
    }, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   664
        label: &#x27;bar&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   665
        content: &#x27;&lt;p&gt;bar content&lt;&#x2F;p&gt;&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   666
    }]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   667
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   668
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   669
                </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   670
            </ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   671
        </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   672
        <dt>widget-child</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   673
        <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   674
            <p>Adds support to allow the widget to be contained within a widget parent.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   675
            <p>Used together with widget-parent, allows you to support hierarchical parent/child structures. As with Widget Parent, it provides a consistent API for child widgets to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   676
            interact with their siblings and parents, e.g., <code>child.next()</code>, <code>child.previous()</code> and <code>child.ancestor()</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   677
            </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   678
        </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   679
</dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   680
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   681
<p>Below are some examples showing how you can use some of these extensions:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   682
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   683
<ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   684
    <li>Using Extensions: <a href="widget-build.html">Building Custom Widget Classes</a></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   685
    <li>Widget-Position, Widget-Stack: <a href="widget-tooltip.html">A Simple Tooltip Widget</a></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   686
    <li>Widget-Parent, Widget-Child: <a href="widget-parentchild-listbox.html">A Hierarchical ListBox Widget</a></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   687
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   688
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   689
<p>You can also look at some of the bundled widgets which are built using extensions:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   690
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   691
<ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   692
    <li><a href="../overlay/index.html">Overlay</a><p>Uses widget-position, widget-position-align, widget-position-constrain, widget-stack, widget-stdmod</p></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   693
    <li><a href="../tabview/index.html">TabView</a><p>Uses widget-parent, widget-child</p></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   694
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   695
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   696
<p>The <a href="../assets/widget/../base/myextension.js.txt">"MyExtension" template file</a> provides a starting point for you to create your own extensions.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   697
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   698
<h3 id="plugins">Widget Plugins</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   699
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   700
<p>The YUI 3 library ships with a couple of Widget plugins for the 3.1.0 release, and also provides examples which show how you can create your own plugins:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   701
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   702
<ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   703
    <li><a href="http://yuilibrary.com/yui/docs/api/Plugin.WidgetAnim.html">Widget Animation Plugin</a> (api documentation)</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   704
    <li><a href="http://yuilibrary.com/yui/docs/api/Plugin.Drag.html">Widget (and Node) Drag/Drop Plugin</a> (api documentation)</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   705
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   706
    <li><a href="widget-plugin.html">Creating Widget Plugins</a> (example)</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   707
    <li><a href="../overlay/overlay-io-plugin.html">Creating An Overlay IO Plugin</a> (example)</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   708
    <li><a href="../overlay/overlay-anim-plugin.html">Creating An Overlay Animation Plugin</a> (example)</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   709
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   710
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   711
<p>Additionally, the YUI Gallery is another source for plugins which provide additional functionality for YUI Widgets, such as the <a href="http://yuilibrary.com/gallery/show/overlay-modal">Modal Overlay Plugin</a> and the <a href="http://yuilibrary.com/gallery/show/widget-io">Widget IO Plugin</a>.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   712
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   713
<p>The <a href="../assets/widget/../plugin/myplugin.js.txt">"MyPlugin" template file</a> provides a starting point for you to create your own plugins.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   714
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   715
            </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   716
        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   717
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   718
        <div class="yui3-u-1-4">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   719
            <div class="sidebar">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   720
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   721
                    <div id="toc" class="sidebox">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   722
                        <div class="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   723
                            <h2 class="no-toc">Table of Contents</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   724
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   725
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   726
                        <div class="bd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   727
                            <ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   728
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   729
<a href="#responsibilities">What Widget Provides</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   730
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   731
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   732
<a href="#structure">Class Structure And Responsibilities</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   733
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   734
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   735
<a href="#attributes">Basic Attributes</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   736
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   737
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   738
<a href="#rendering">Rendering Methods</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   739
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   740
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   741
<a href="#the-lifecycle-methods-init-destroy-render">The Lifecycle Methods: <code>init, destroy, render</code></a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   742
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   743
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   744
<a href="#widgets-renderer-method">Widget's <code>renderer</code> Method</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   745
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   746
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   747
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   748
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   749
<a href="#progressive">Progressive Enhancement</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   750
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   751
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   752
<a href="#hidingmarkup">Hiding Progressively Enhanced Markup</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   753
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   754
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   755
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   756
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   757
<a href="#markup">Rendered Markup</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   758
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   759
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   760
<a href="#the-bounding-box">The Bounding Box</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   761
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   762
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   763
<a href="#the-content-box">The Content Box</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   764
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   765
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   766
<a href="#widget-markup-diagram">Widget Markup Diagram</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   767
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   768
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   769
<a href="#why-two-nested-boxes">Why Two Nested Boxes?</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   770
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   771
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   772
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   773
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   774
<a href="#CSS">Class Names and CSS</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   775
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   776
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   777
<a href="#css-implications">CSS Implications</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   778
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   779
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   780
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   781
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   782
<a href="#uievents">Default UI Events</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   783
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   784
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   785
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   786
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   787
<a href="#creatingwidgets">Developing Your Own Widgets</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   788
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   789
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   790
<a href="#pluginsandextensions">Plugins And Extensions</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   791
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   792
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   793
<a href="#pluginorextension">Plugin or Extension?</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   794
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   795
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   796
<a href="#extensions">Widget Extensions</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   797
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   798
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   799
<a href="#plugins">Widget Plugins</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   800
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   801
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   802
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   803
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   804
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   805
                    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   806
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   807
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   808
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   809
                    <div class="sidebox">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   810
                        <div class="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   811
                            <h2 class="no-toc">Examples</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   812
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   813
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   814
                        <div class="bd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   815
                            <ul class="examples">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   816
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   817
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   818
                                        <li data-description="Shows how to extend the base widget class, to create your own Widgets.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   819
                                            <a href="widget-extend.html">Extending the Base Widget Class</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   820
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   821
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   822
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   823
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   824
                                        <li data-description="Shows how to use Base.create and mix/match extensions to create custom Widget classes.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   825
                                            <a href="widget-build.html">Creating Custom Widget Classes With Extensions</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   826
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   827
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   828
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   829
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   830
                                        <li data-description="Shows how to create an IO plugin for Widget.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   831
                                            <a href="widget-plugin.html">Creating a Widget Plugin</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   832
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   833
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   834
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   835
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   836
                                        <li data-description="Shows how to extend the Widget class, and add WidgetPosition and WidgetStack to create a Tooltip widget class.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   837
                                            <a href="widget-tooltip.html">Creating a Simple Tooltip Widget With Extensions</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   838
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   839
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   840
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   841
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   842
                                        <li data-description="Shows how to extend the Widget class, and add WidgetParent and WidgetChild to create a simple ListBox widget.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   843
                                            <a href="widget-parentchild-listbox.html">Creating a Hierarchical ListBox Widget</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   844
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   845
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   846
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   847
                            </ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   848
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   849
                    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   850
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   851
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   852
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   853
            </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   854
        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   855
    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   856
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   857
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   858
<script src="../assets/vendor/prettify/prettify-min.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   859
<script>prettyPrint();</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   860
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   861
<script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   862
YUI.Env.Tests = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   863
    examples: [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   864
    project: '../assets',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   865
    assets: '../assets/widget',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   866
    name: 'widget',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   867
    title: 'Widget',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   868
    newWindow: '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   869
    auto:  false 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   870
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   871
YUI.Env.Tests.examples.push('widget-extend');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   872
YUI.Env.Tests.examples.push('widget-build');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   873
YUI.Env.Tests.examples.push('widget-plugin');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   874
YUI.Env.Tests.examples.push('widget-tooltip');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   875
YUI.Env.Tests.examples.push('widget-parentchild-listbox');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   876
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   877
</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   878
<script src="../assets/yui/test-runner.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   879
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   880
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   881
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   882
</body>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   883
</html>