src/cm/media/js/lib/yui/yui3-3.15.0/build/widget-position-align/widget-position-align-debug.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 602 e16a97fb364a
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     1
YUI.add('widget-position-align', function (Y, NAME) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     2
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     3
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     4
Provides extended/advanced XY positioning support for Widgets, through an
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
extension.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
It builds on top of the `widget-position` module, to provide alignment and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
centering support. Future releases aim to add constrained and fixed positioning
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
support.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
@module widget-position-align
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
var Lang = Y.Lang,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
    ALIGN        = 'align',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
    ALIGN_ON     = 'alignOn',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
    VISIBLE      = 'visible',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
    BOUNDING_BOX = 'boundingBox',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
    OFFSET_WIDTH    = 'offsetWidth',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
    OFFSET_HEIGHT   = 'offsetHeight',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
    REGION          = 'region',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
    VIEWPORT_REGION = 'viewportRegion';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
Widget extension, which can be used to add extended XY positioning support to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
the base Widget class, through the `Base.create` method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
**Note:** This extension requires that the `WidgetPosition` extension be added
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
to the Widget (before `WidgetPositionAlign`, if part of the same extension list
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
passed to `Base.build`).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
@class WidgetPositionAlign
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
@param {Object} config User configuration object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
@constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
function PositionAlign (config) {}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
PositionAlign.ATTRS = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
    The alignment configuration for this widget.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
    The `align` attribute is used to align a reference point on the widget, with
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
    the reference point on another `Node`, or the viewport. The object which
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
    `align` expects has the following properties:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
      * __`node`__: The `Node` to which the widget is to be aligned. If set to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
        `null`, or not provided, the widget is aligned to the viewport.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
      * __`points`__: A two element Array, defining the two points on the widget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
        and `Node`/viewport which are to be aligned. The first element is the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
        point on the widget, and the second element is the point on the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
        `Node`/viewport. Supported alignment points are defined as static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
        properties on `WidgetPositionAlign`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
    @example Aligns the top-right corner of the widget with the top-left corner
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
    of the viewport:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
        myWidget.set('align', {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
            points: [Y.WidgetPositionAlign.TR, Y.WidgetPositionAlign.TL]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
    @attribute align
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
    @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
    @default null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
    align: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
        value: null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
    A convenience Attribute, which can be used as a shortcut for the `align`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
    Attribute.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
    If set to `true`, the widget is centered in the viewport. If set to a `Node`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
    reference or valid selector String, the widget will be centered within the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
    `Node`. If set to `false`, no center positioning is applied.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
    @attribute centered
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
    @type Boolean|Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
    @default false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
    centered: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
        setter : '_setAlignCenter',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
        lazyAdd:false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
        value  :false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
    An Array of Objects corresponding to the `Node`s and events that will cause
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
    the alignment of this widget to be synced to the DOM.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
    The `alignOn` Attribute is expected to be an Array of Objects with the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
    following properties:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
      * __`eventName`__: The String event name to listen for.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
      * __`node`__: The optional `Node` that will fire the event, it can be a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
        `Node` reference or a selector String. This will default to the widget's
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
        `boundingBox`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
    @example Sync this widget's alignment on window resize:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
        myWidget.set('alignOn', [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
            {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
                node     : Y.one('win'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
                eventName: 'resize'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
        ]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
    @attribute alignOn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
    @type Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
    @default []
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
    alignOn: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
        value    : [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
        validator: Y.Lang.isArray
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
Constant used to specify the top-left corner for alignment
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
@property TL
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
@type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
@value 'tl'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
PositionAlign.TL = 'tl';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
Constant used to specify the top-right corner for alignment
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
@property TR
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
@type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
@value 'tr'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
PositionAlign.TR = 'tr';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
Constant used to specify the bottom-left corner for alignment
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
@property BL
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
@type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
@value 'bl'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
PositionAlign.BL = 'bl';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
Constant used to specify the bottom-right corner for alignment
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
@property BR
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
@type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
@value 'br'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
PositionAlign.BR = 'br';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
Constant used to specify the top edge-center point for alignment
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
@property TC
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
@type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
@value 'tc'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
PositionAlign.TC = 'tc';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
Constant used to specify the right edge, center point for alignment
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
@property RC
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
@type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
@value 'rc'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
PositionAlign.RC = 'rc';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
Constant used to specify the bottom edge, center point for alignment
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
@property BC
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
@type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
@value 'bc'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   191
PositionAlign.BC = 'bc';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   192
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   193
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   194
Constant used to specify the left edge, center point for alignment
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   195
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   196
@property LC
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
@type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   198
@value 'lc'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   199
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   200
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   201
PositionAlign.LC = 'lc';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   202
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   203
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   204
Constant used to specify the center of widget/node/viewport for alignment
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   205
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   206
@property CC
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   207
@type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   208
@value 'cc'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   209
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   210
*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   211
PositionAlign.CC = 'cc';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   212
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   213
PositionAlign.prototype = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   214
    // -- Protected Properties -------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   215
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   216
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   217
    initializer : function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   218
        if (!this._posNode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   219
            Y.error('WidgetPosition needs to be added to the Widget, ' +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   220
                'before WidgetPositionAlign is added');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   221
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   222
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   223
        Y.after(this._bindUIPosAlign, this, 'bindUI');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   224
        Y.after(this._syncUIPosAlign, this, 'syncUI');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   225
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   226
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   227
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   228
    Holds the alignment-syncing event handles.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   229
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   230
    @property _posAlignUIHandles
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   231
    @type Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   232
    @default null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   233
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   234
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   235
    _posAlignUIHandles: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   236
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   237
    // -- Lifecycle Methods ----------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   238
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   239
    destructor: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   240
        this._detachPosAlignUIHandles();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   241
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   242
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   243
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   244
    Bind event listeners responsible for updating the UI state in response to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   245
    the widget's position-align related state changes.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   246
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   247
    This method is invoked after `bindUI` has been invoked for the `Widget`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   248
    class using the AOP infrastructure.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   249
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   250
    @method _bindUIPosAlign
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   251
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   252
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   253
    _bindUIPosAlign: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   254
        this.after('alignChange', this._afterAlignChange);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   255
        this.after('alignOnChange', this._afterAlignOnChange);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   256
        this.after('visibleChange', this._syncUIPosAlign);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   257
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   258
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   259
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   260
    Synchronizes the current `align` Attribute value to the DOM.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   261
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   262
    This method is invoked after `syncUI` has been invoked for the `Widget`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   263
    class using the AOP infrastructure.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   264
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   265
    @method _syncUIPosAlign
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   266
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   267
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   268
    _syncUIPosAlign: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   269
        var align = this.get(ALIGN);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   270
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   271
        this._uiSetVisiblePosAlign(this.get(VISIBLE));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   272
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   273
        if (align) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   274
            this._uiSetAlign(align.node, align.points);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   275
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   276
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   277
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   278
    // -- Public Methods -------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   279
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   280
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   281
    Aligns this widget to the provided `Node` (or viewport) using the provided
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   282
    points. This method can be invoked with no arguments which will cause the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   283
    widget's current `align` Attribute value to be synced to the DOM.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   284
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   285
    @example Aligning to the top-left corner of the `<body>`:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   286
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   287
        myWidget.align('body',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   288
            [Y.WidgetPositionAlign.TL, Y.WidgetPositionAlign.TR]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   289
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   290
    @method align
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   291
    @param {Node|String|null} [node] A reference (or selector String) for the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   292
      `Node` which with the widget is to be aligned. If null is passed in, the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   293
      widget will be aligned with the viewport.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   294
    @param {Array[2]} [points] A two item array specifying the points on the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   295
      widget and `Node`/viewport which will to be aligned. The first entry is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   296
      the point on the widget, and the second entry is the point on the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   297
      `Node`/viewport. Valid point references are defined as static constants on
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   298
      the `WidgetPositionAlign` extension.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   299
    @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   300
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   301
    align: function (node, points) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   302
        if (arguments.length) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   303
            // Set the `align` Attribute.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   304
            this.set(ALIGN, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   305
                node  : node,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   306
                points: points
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   307
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   308
        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   309
            // Sync the current `align` Attribute value to the DOM.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   310
            this._syncUIPosAlign();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   311
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   312
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   313
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   314
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   315
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   316
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   317
    Centers the widget in the viewport, or if a `Node` is passed in, it will
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   318
    be centered to that `Node`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   319
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   320
    @method centered
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   321
    @param {Node|String} [node] A `Node` reference or selector String defining
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   322
      the `Node` which the widget should be centered. If a `Node` is not  passed
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   323
      in, then the widget will be centered to the viewport.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   324
    @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   325
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   326
    centered: function (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   327
        return this.align(node, [PositionAlign.CC, PositionAlign.CC]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   328
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   329
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   330
    // -- Protected Methods ----------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   331
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   332
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   333
    Default setter for `center` Attribute changes. Sets up the appropriate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   334
    value, and passes it through the to the align attribute.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   335
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   336
    @method _setAlignCenter
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   337
    @param {Boolean|Node} val The Attribute value being set.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   338
    @return {Boolean|Node} the value passed in.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   339
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   340
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   341
    _setAlignCenter: function (val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   342
        if (val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   343
            this.set(ALIGN, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   344
                node  : val === true ? null : val,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   345
                points: [PositionAlign.CC, PositionAlign.CC]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   346
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   347
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   348
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   349
        return val;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   350
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   351
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   352
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   353
    Updates the UI to reflect the `align` value passed in.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   354
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   355
    **Note:** See the `align` Attribute documentation, for the Object structure
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   356
    expected.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   357
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   358
    @method _uiSetAlign
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   359
    @param {Node|String|null} [node] The node to align to, or null to indicate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   360
      the viewport.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   361
    @param {Array} points The alignment points.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   362
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   363
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   364
    _uiSetAlign: function (node, points) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   365
        if ( ! Lang.isArray(points) || points.length !== 2) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   366
            Y.error('align: Invalid Points Arguments');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   367
            return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   368
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   369
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   370
        var nodeRegion = this._getRegion(node),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   371
            widgetPoint, nodePoint, xy;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   372
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   373
        if ( ! nodeRegion) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   374
            // No-op, nothing to align to.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   375
            return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   376
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   377
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   378
        widgetPoint = points[0];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   379
        nodePoint   = points[1];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   380
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   381
        // TODO: Optimize KWeight - Would lookup table help?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   382
        switch (nodePoint) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   383
        case PositionAlign.TL:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   384
            xy = [nodeRegion.left, nodeRegion.top];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   385
            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   386
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   387
        case PositionAlign.TR:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   388
            xy = [nodeRegion.right, nodeRegion.top];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   389
            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   390
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   391
        case PositionAlign.BL:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   392
            xy = [nodeRegion.left, nodeRegion.bottom];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   393
            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   394
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   395
        case PositionAlign.BR:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   396
            xy = [nodeRegion.right, nodeRegion.bottom];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   397
            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   398
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   399
        case PositionAlign.TC:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   400
            xy = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   401
                nodeRegion.left + Math.floor(nodeRegion.width / 2),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   402
                nodeRegion.top
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   403
            ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   404
            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   405
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   406
        case PositionAlign.BC:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   407
            xy = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   408
                nodeRegion.left + Math.floor(nodeRegion.width / 2),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   409
                nodeRegion.bottom
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   410
            ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   411
            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   412
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   413
        case PositionAlign.LC:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   414
            xy = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   415
                nodeRegion.left,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   416
                nodeRegion.top + Math.floor(nodeRegion.height / 2)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   417
            ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   418
            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   419
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   420
        case PositionAlign.RC:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   421
            xy = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   422
                nodeRegion.right,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   423
                nodeRegion.top + Math.floor(nodeRegion.height / 2)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   424
            ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   425
            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   426
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   427
        case PositionAlign.CC:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   428
            xy = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   429
                nodeRegion.left + Math.floor(nodeRegion.width / 2),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   430
                nodeRegion.top + Math.floor(nodeRegion.height / 2)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   431
            ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   432
            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   433
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   434
        default:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   435
            Y.log('align: Invalid Points Arguments', 'info',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   436
                'widget-position-align');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   437
            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   438
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   439
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   440
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   441
        if (xy) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   442
            this._doAlign(widgetPoint, xy[0], xy[1]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   443
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   444
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   445
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   446
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   447
    Attaches or detaches alignment-syncing event handlers based on the widget's
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   448
    `visible` Attribute state.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   449
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   450
    @method _uiSetVisiblePosAlign
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   451
    @param {Boolean} visible The current value of the widget's `visible`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   452
      Attribute.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   453
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   454
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   455
    _uiSetVisiblePosAlign: function (visible) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   456
        if (visible) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   457
            this._attachPosAlignUIHandles();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   458
        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   459
            this._detachPosAlignUIHandles();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   460
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   461
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   462
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   463
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   464
    Attaches the alignment-syncing event handlers.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   465
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   466
    @method _attachPosAlignUIHandles
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   467
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   468
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   469
    _attachPosAlignUIHandles: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   470
        if (this._posAlignUIHandles) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   471
            // No-op if we have already setup the event handlers.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   472
            return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   473
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   474
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   475
        var bb        = this.get(BOUNDING_BOX),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   476
            syncAlign = Y.bind(this._syncUIPosAlign, this),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   477
            handles   = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   478
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   479
        Y.Array.each(this.get(ALIGN_ON), function (o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   480
            var event = o.eventName,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   481
                node  = Y.one(o.node) || bb;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   482
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   483
            if (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   484
                handles.push(node.on(event, syncAlign));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   485
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   486
        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   487
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   488
        this._posAlignUIHandles = handles;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   489
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   490
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   491
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   492
    Detaches the alignment-syncing event handlers.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   493
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   494
    @method _detachPosAlignUIHandles
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   495
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   496
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   497
    _detachPosAlignUIHandles: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   498
        var handles = this._posAlignUIHandles;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   499
        if (handles) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   500
            new Y.EventHandle(handles).detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   501
            this._posAlignUIHandles = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   502
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   503
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   504
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   505
    // -- Private Methods ------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   506
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   507
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   508
    Helper method, used to align the given point on the widget, with the XY page
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   509
    coordinates provided.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   510
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   511
    @method _doAlign
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   512
    @param {String} widgetPoint Supported point constant
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   513
      (e.g. WidgetPositionAlign.TL)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   514
    @param {Number} x X page coordinate to align to.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   515
    @param {Number} y Y page coordinate to align to.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   516
    @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   517
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   518
    _doAlign: function (widgetPoint, x, y) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   519
        var widgetNode = this._posNode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   520
            xy;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   521
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   522
        switch (widgetPoint) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   523
        case PositionAlign.TL:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   524
            xy = [x, y];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   525
            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   526
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   527
        case PositionAlign.TR:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   528
            xy = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   529
                x - widgetNode.get(OFFSET_WIDTH),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   530
                y
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   531
            ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   532
            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   533
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   534
        case PositionAlign.BL:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   535
            xy = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   536
                x,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   537
                y - widgetNode.get(OFFSET_HEIGHT)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   538
            ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   539
            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   540
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   541
        case PositionAlign.BR:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   542
            xy = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   543
                x - widgetNode.get(OFFSET_WIDTH),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   544
                y - widgetNode.get(OFFSET_HEIGHT)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   545
            ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   546
            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   547
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   548
        case PositionAlign.TC:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   549
            xy = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   550
                x - (widgetNode.get(OFFSET_WIDTH) / 2),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   551
                y
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   552
            ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   553
            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   554
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   555
        case PositionAlign.BC:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   556
            xy = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   557
                x - (widgetNode.get(OFFSET_WIDTH) / 2),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   558
                y - widgetNode.get(OFFSET_HEIGHT)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   559
            ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   560
            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   561
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   562
        case PositionAlign.LC:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   563
            xy = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   564
                x,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   565
                y - (widgetNode.get(OFFSET_HEIGHT) / 2)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   566
            ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   567
            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   568
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   569
        case PositionAlign.RC:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   570
            xy = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   571
                x - widgetNode.get(OFFSET_WIDTH),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   572
                y - (widgetNode.get(OFFSET_HEIGHT) / 2)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   573
            ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   574
            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   575
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   576
        case PositionAlign.CC:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   577
            xy = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   578
                x - (widgetNode.get(OFFSET_WIDTH) / 2),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   579
                y - (widgetNode.get(OFFSET_HEIGHT) / 2)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   580
            ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   581
            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   582
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   583
        default:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   584
            Y.log('align: Invalid Points Argument', 'info',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   585
                'widget-position-align');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   586
            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   587
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   588
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   589
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   590
        if (xy) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   591
            this.move(xy);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   592
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   593
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   594
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   595
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   596
    Returns the region of the passed-in `Node`, or the viewport region if
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   597
    calling with passing in a `Node`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   598
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   599
    @method _getRegion
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   600
    @param {Node} [node] The node to get the region of.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   601
    @return {Object} The node's region.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   602
    @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   603
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   604
    _getRegion: function (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   605
        var nodeRegion;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   606
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   607
        if ( ! node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   608
            nodeRegion = this._posNode.get(VIEWPORT_REGION);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   609
        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   610
            node = Y.Node.one(node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   611
            if (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   612
                nodeRegion = node.get(REGION);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   613
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   614
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   615
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   616
        return nodeRegion;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   617
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   618
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   619
    // -- Protected Event Handlers ---------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   620
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   621
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   622
    Handles `alignChange` events by updating the UI in response to `align`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   623
    Attribute changes.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   624
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   625
    @method _afterAlignChange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   626
    @param {EventFacade} e
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   627
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   628
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   629
    _afterAlignChange: function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   630
        var align = e.newVal;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   631
        if (align) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   632
            this._uiSetAlign(align.node, align.points);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   633
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   634
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   635
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   636
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   637
    Handles `alignOnChange` events by updating the alignment-syncing event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   638
    handlers.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   639
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   640
    @method _afterAlignOnChange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   641
    @param {EventFacade} e
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   642
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   643
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   644
    _afterAlignOnChange: function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   645
        this._detachPosAlignUIHandles();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   646
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   647
        if (this.get(VISIBLE)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   648
            this._attachPosAlignUIHandles();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   649
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   650
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   651
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   652
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   653
Y.WidgetPositionAlign = PositionAlign;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   654
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   655
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   656
}, '@VERSION@', {"requires": ["widget-position"]});