src/cm/media/js/lib/yui/yui3-3.15.0/build/datatable-scroll/datatable-scroll-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('datatable-scroll', 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
Adds the ability to make the table rows scrollable while preserving the header
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
placement.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
@module datatable-scroll
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
@for DataTable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
@since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
var YLang = Y.Lang,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
    isString = YLang.isString,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
    isNumber = YLang.isNumber,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
    isArray  = YLang.isArray,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
    Scrollable;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
// Returns the numeric value portion of the computed style, defaulting to 0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
function styleDim(node, style) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
    return parseInt(node.getComputedStyle(style), 10) || 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
_API docs for this extension are included in the DataTable class._
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
Adds the ability to make the table rows scrollable while preserving the header
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
placement.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
There are two types of scrolling, horizontal (x) and vertical (y).  Horizontal
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
scrolling is achieved by wrapping the entire table in a scrollable container.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
Vertical scrolling is achieved by splitting the table headers and data into two
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
separate tables, the latter of which is wrapped in a vertically scrolling
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
container.  In this case, column widths of header cells and data cells are kept
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
in sync programmatically.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
Since the split table synchronization can be costly at runtime, the split is only
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
done if the data in the table stretches beyond the configured `height` value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
To activate or deactivate scrolling, set the `scrollable` attribute to one of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
the following values:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
 * `false` - (default) Scrolling is disabled.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
 * `true` or 'xy' - If `height` is set, vertical scrolling will be activated, if
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
            `width` is set, horizontal scrolling will be activated.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
 * 'x' - Activate horizontal scrolling only. Requires the `width` attribute is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
         also set.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
 * 'y' - Activate vertical scrolling only. Requires the `height` attribute is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
         also set.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
@class DataTable.Scrollable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
@for DataTable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
@since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
Y.DataTable.Scrollable = Scrollable = function () {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
Scrollable.ATTRS = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
    Activates or deactivates scrolling in the table.  Acceptable values are:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
     * `false` - (default) Scrolling is disabled.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
     * `true` or 'xy' - If `height` is set, vertical scrolling will be
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
       activated, if `width` is set, horizontal scrolling will be activated.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
     * 'x' - Activate horizontal scrolling only. Requires the `width` attribute
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
       is also set.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
     * 'y' - Activate vertical scrolling only. Requires the `height` attribute
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
       is also set.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
    @attribute scrollable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
    @type {String|Boolean}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
    @value false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
    scrollable: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
        value: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
        setter: '_setScrollable'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
Y.mix(Scrollable.prototype, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
    Scrolls a given row or cell into view if the table is scrolling.  Pass the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
    `clientId` of a Model from the DataTable's `data` ModelList or its row
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
    index to scroll to a row or a [row index, column index] array to scroll to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
    a cell.  Alternately, to scroll to any element contained within the table's
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
    scrolling areas, pass its ID, or the Node itself (though you could just as
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
    well call `node.scrollIntoView()` yourself, but hey, whatever).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
    @method scrollTo
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
    @param {String|Number|Number[]|Node} id A row clientId, row index, cell
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
            coordinate array, id string, or Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
    @return {DataTable}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
    @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
    scrollTo: function (id) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
        var target;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
        if (id && this._tbodyNode && (this._yScrollNode || this._xScrollNode)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
            if (isArray(id)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
                target = this.getCell(id);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
            } else if (isNumber(id)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
                target = this.getRow(id);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
            } else if (isString(id)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
                target = this._tbodyNode.one('#' + id);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
            } else if (id instanceof Y.Node &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
                    // TODO: ancestor(yScrollNode, xScrollNode)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
                    id.ancestor('.yui3-datatable') === this.get('boundingBox')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
                target = id;
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
            if(target) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
                target.scrollIntoView();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
    //--------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
    // Protected properties and methods
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
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
    Template for the `<table>` that is used to fix the caption in place when
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
    the table is horizontally scrolling.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
    @property _CAPTION_TABLE_TEMPLATE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
    @type {String}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
    @value '<table class="{className}" role="presentation"></table>'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
    _CAPTION_TABLE_TEMPLATE: '<table class="{className}" role="presentation"></table>',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
    Template used to create sizable element liners around header content to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
    synchronize fixed header column widths.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
    @property _SCROLL_LINER_TEMPLATE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
    @type {String}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
    @value '<div class="{className}"></div>'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
    _SCROLL_LINER_TEMPLATE: '<div class="{className}"></div>',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
    Template for the virtual scrollbar needed in "y" and "xy" scrolling setups.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
    @property _SCROLLBAR_TEMPLATE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
    @type {String}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
    @value '<div class="{className}"><div></div></div>'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
    _SCROLLBAR_TEMPLATE: '<div class="{className}"><div></div></div>',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
    Template for the `<div>` that is used to contain the table when the table is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
    horizontally scrolling.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
    @property _X_SCROLLER_TEMPLATE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
    @type {String}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
    @value '<div class="{className}"></div>'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
    _X_SCROLLER_TEMPLATE: '<div class="{className}"></div>',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
    Template for the `<table>` used to contain the fixed column headers for
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
    vertically scrolling tables.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
    @property _Y_SCROLL_HEADER_TEMPLATE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
    @type {String}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
    @value '<table cellspacing="0" role="presentation" aria-hidden="true" class="{className}"></table>'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
    _Y_SCROLL_HEADER_TEMPLATE: '<table cellspacing="0" aria-hidden="true" class="{className}"></table>',
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
    Template for the `<div>` that is used to contain the rows when the table is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
    vertically scrolling.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
    @property _Y_SCROLLER_TEMPLATE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
    @type {String}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
    @value '<div class="{className}"><div class="{scrollerClassName}"></div></div>'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   191
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   192
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   193
    _Y_SCROLLER_TEMPLATE: '<div class="{className}"><div class="{scrollerClassName}"></div></div>',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   194
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   195
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   196
    Adds padding to the last cells in the fixed header for vertically scrolling
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
    tables.  This padding is equal in width to the scrollbar, so can't be
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   198
    relegated to a stylesheet.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   199
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   200
    @method _addScrollbarPadding
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   201
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   202
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   203
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   204
    _addScrollbarPadding: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   205
        var fixedHeader = this._yScrollHeader,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   206
            headerClass = '.' + this.getClassName('header'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   207
            scrollbarWidth, rows, header, i, len;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   208
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   209
        if (fixedHeader) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   210
            scrollbarWidth = Y.DOM.getScrollbarWidth() + 'px';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   211
            rows = fixedHeader.all('tr');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   212
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   213
            for (i = 0, len = rows.size(); i < len; i += +header.get('rowSpan')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   214
                header = rows.item(i).all(headerClass).pop();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   215
                header.setStyle('paddingRight', scrollbarWidth);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   216
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   217
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   218
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   219
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   220
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   221
    Reacts to changes in the `scrollable` attribute by updating the `_xScroll`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   222
    and `_yScroll` properties and syncing the scrolling structure accordingly.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   223
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   224
    @method _afterScrollableChange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   225
    @param {EventFacade} e The relevant change event (ignored)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   226
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   227
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   228
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   229
    _afterScrollableChange: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   230
        var scroller = this._xScrollNode;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   231
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   232
        if (this._xScroll && scroller) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   233
            if (this._yScroll && !this._yScrollNode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   234
                scroller.setStyle('paddingRight',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   235
                    Y.DOM.getScrollbarWidth() + 'px');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   236
            } else if (!this._yScroll && this._yScrollNode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   237
                scroller.setStyle('paddingRight', '');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   238
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   239
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   240
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   241
        this._syncScrollUI();
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
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   245
    Reacts to changes in the `caption` attribute by adding, removing, or
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   246
    syncing the caption table when the table is set to scroll.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   247
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   248
    @method _afterScrollCaptionChange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   249
    @param {EventFacade} e The relevant change event (ignored)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   250
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   251
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   252
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   253
    _afterScrollCaptionChange: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   254
        if (this._xScroll || this._yScroll) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   255
            this._syncScrollUI();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   256
        }
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
    Reacts to changes in the `columns` attribute of vertically scrolling tables
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   261
    by refreshing the fixed headers, scroll container, and virtual scrollbar
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   262
    position.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   263
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   264
    @method _afterScrollColumnsChange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   265
    @param {EventFacade} e The relevant change event (ignored)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   266
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   267
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   268
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   269
    _afterScrollColumnsChange: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   270
        if (this._xScroll || this._yScroll) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   271
            if (this._yScroll && this._yScrollHeader) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   272
                this._syncScrollHeaders();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   273
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   274
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   275
            this._syncScrollUI();
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   279
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   280
    Reacts to changes in vertically scrolling table's `data` ModelList by
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   281
    synchronizing the fixed column header widths and virtual scrollbar height.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   282
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   283
    @method _afterScrollDataChange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   284
    @param {EventFacade} e The relevant change event (ignored)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   285
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   286
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   287
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   288
    _afterScrollDataChange: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   289
        if (this._xScroll || this._yScroll) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   290
            this._syncScrollUI();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   291
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   292
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   293
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   294
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   295
    Reacts to changes in the `height` attribute of vertically scrolling tables
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   296
    by updating the height of the `<div>` wrapping the data table and the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   297
    virtual scrollbar.  If `scrollable` was set to "y" or "xy" but lacking a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   298
    declared `height` until the received change, `_syncScrollUI` is called to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   299
    create the fixed headers etc.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   300
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   301
    @method _afterScrollHeightChange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   302
    @param {EventFacade} e The relevant change event (ignored)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   303
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   304
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   305
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   306
    _afterScrollHeightChange: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   307
        if (this._yScroll) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   308
            this._syncScrollUI();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   309
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   310
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   311
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   312
    /* (not an API doc comment on purpose)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   313
    Reacts to the sort event (if the table is also sortable) by updating the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   314
    fixed header classes to match the data table's headers.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   315
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   316
    THIS IS A HACK that will be removed immediately after the 3.5.0 release.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   317
    If you're reading this and the current version is greater than 3.5.0, I
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   318
    should be publicly scolded.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   319
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   320
    _afterScrollSort: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   321
        var headers, headerClass;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   322
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   323
        if (this._yScroll && this._yScrollHeader) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   324
            headerClass = '.' + this.getClassName('header');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   325
            headers = this._theadNode.all(headerClass);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   326
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   327
            this._yScrollHeader.all(headerClass).each(function (header, i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   328
                header.set('className', headers.item(i).get('className'));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   329
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   330
        }
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
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   334
    Reacts to changes in the width of scrolling tables by expanding the width of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   335
    the `<div>` wrapping the data table for horizontally scrolling tables or
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   336
    upding the position of the virtual scrollbar for vertically scrolling
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   337
    tables.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   338
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   339
    @method _afterScrollWidthChange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   340
    @param {EventFacade} e The relevant change event (ignored)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   341
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   342
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   343
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   344
    _afterScrollWidthChange: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   345
        if (this._xScroll || this._yScroll) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   346
            this._syncScrollUI();
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   350
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   351
    Binds virtual scrollbar interaction to the `_yScrollNode`'s `scrollTop` and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   352
    vice versa.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   353
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   354
    @method _bindScrollbar
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   355
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   356
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   357
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   358
    _bindScrollbar: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   359
        var scrollbar = this._scrollbarNode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   360
            scroller  = this._yScrollNode;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   361
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   362
        if (scrollbar && scroller && !this._scrollbarEventHandle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   363
            this._scrollbarEventHandle = new Y.Event.Handle([
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   364
                scrollbar.on('scroll', this._syncScrollPosition, this),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   365
                scroller.on('scroll', this._syncScrollPosition, this)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   366
            ]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   367
        }
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
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   371
    Binds to the window resize event to update the vertical scrolling table
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   372
    headers and wrapper `<div>` dimensions.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   373
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   374
    @method _bindScrollResize
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   375
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   376
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   377
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   378
    _bindScrollResize: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   379
        if (!this._scrollResizeHandle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   380
            // TODO: sync header widths and scrollbar position.  If the height
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   381
            // of the headers has changed, update the scrollbar dims as well.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   382
            this._scrollResizeHandle = Y.on('resize',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   383
                this._syncScrollUI, null, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   384
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   385
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   386
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   387
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   388
    Attaches internal subscriptions to keep the scrolling structure up to date
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   389
    with changes in the table's `data`, `columns`, `caption`, or `height`.  The
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   390
    `width` is taken care of already.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   391
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   392
    This executes after the table's native `bindUI` method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   393
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   394
    @method _bindScrollUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   395
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   396
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   397
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   398
    _bindScrollUI: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   399
        this.after({
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   400
            columnsChange: Y.bind('_afterScrollColumnsChange', this),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   401
            heightChange : Y.bind('_afterScrollHeightChange', this),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   402
            widthChange  : Y.bind('_afterScrollWidthChange', this),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   403
            captionChange: Y.bind('_afterScrollCaptionChange', this),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   404
            scrollableChange: Y.bind('_afterScrollableChange', this),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   405
            // FIXME: this is a last minute hack to work around the fact that
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   406
            // DT doesn't use a tableView to render table content that can be
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   407
            // replaced with a scrolling table view.  This must be removed asap!
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   408
            sort         : Y.bind('_afterScrollSort', this)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   409
        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   410
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   411
        this.after(['dataChange', '*:add', '*:remove', '*:reset', '*:change'],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   412
            Y.bind('_afterScrollDataChange', this));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   413
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   414
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   415
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   416
    Clears the lock and timer used to manage synchronizing the scroll position
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   417
    between the vertical scroll container and the virtual scrollbar.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   418
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   419
    @method _clearScrollLock
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   420
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   421
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   422
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   423
    _clearScrollLock: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   424
        if (this._scrollLock) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   425
            this._scrollLock.cancel();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   426
            delete this._scrollLock;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   427
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   428
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   429
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   430
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   431
    Creates a virtual scrollbar from the `_SCROLLBAR_TEMPLATE`, assigning it to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   432
    the `_scrollbarNode` property.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   433
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   434
    @method _createScrollbar
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   435
    @return {Node} The created Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   436
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   437
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   438
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   439
    _createScrollbar: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   440
        var scrollbar = this._scrollbarNode;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   441
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   442
        if (!scrollbar) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   443
            scrollbar = this._scrollbarNode = Y.Node.create(
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   444
                Y.Lang.sub(this._SCROLLBAR_TEMPLATE, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   445
                    className: this.getClassName('scrollbar')
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   446
                }));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   447
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   448
            // IE 6-10 require the scrolled area to be visible (at least 1px)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   449
            // or they don't respond to clicking on the scrollbar rail or arrows
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   450
            scrollbar.setStyle('width', (Y.DOM.getScrollbarWidth() + 1) + 'px');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   451
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   452
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   453
        return scrollbar;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   454
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   455
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   456
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   457
    Creates a separate table to contain the caption when the table is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   458
    configured to scroll vertically or horizontally.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   459
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   460
    @method _createScrollCaptionTable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   461
    @return {Node} The created Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   462
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   463
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   464
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   465
    _createScrollCaptionTable: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   466
        if (!this._captionTable) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   467
            this._captionTable = Y.Node.create(
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   468
                Y.Lang.sub(this._CAPTION_TABLE_TEMPLATE, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   469
                    className: this.getClassName('caption', 'table')
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   470
                }));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   471
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   472
            this._captionTable.empty();
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
        return this._captionTable;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   476
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   477
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   478
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   479
    Populates the `_xScrollNode` property by creating the `<div>` Node described
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   480
    by the `_X_SCROLLER_TEMPLATE`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   481
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   482
    @method _createXScrollNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   483
    @return {Node} The created Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   484
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   485
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   486
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   487
    _createXScrollNode: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   488
        if (!this._xScrollNode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   489
            this._xScrollNode = Y.Node.create(
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   490
                Y.Lang.sub(this._X_SCROLLER_TEMPLATE, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   491
                    className: this.getClassName('x','scroller')
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   492
                }));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   493
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   494
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   495
        return this._xScrollNode;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   496
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   497
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   498
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   499
    Populates the `_yScrollHeader` property by creating the `<table>` Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   500
    described by the `_Y_SCROLL_HEADER_TEMPLATE`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   501
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   502
    @method _createYScrollHeader
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   503
    @return {Node} The created Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   504
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   505
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   506
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   507
    _createYScrollHeader: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   508
        var fixedHeader = this._yScrollHeader;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   509
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   510
        if (!fixedHeader) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   511
            fixedHeader = this._yScrollHeader = Y.Node.create(
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   512
                Y.Lang.sub(this._Y_SCROLL_HEADER_TEMPLATE, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   513
                    className: this.getClassName('scroll','columns')
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   514
                }));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   515
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   516
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   517
        return fixedHeader;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   518
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   519
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   520
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   521
    Populates the `_yScrollNode` property by creating the `<div>` Node described
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   522
    by the `_Y_SCROLLER_TEMPLATE`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   523
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   524
    @method _createYScrollNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   525
    @return {Node} The created Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   526
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   527
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   528
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   529
    _createYScrollNode: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   530
        var scrollerClass;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   531
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   532
        if (!this._yScrollNode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   533
            scrollerClass = this.getClassName('y', 'scroller');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   534
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   535
            this._yScrollContainer = Y.Node.create(
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   536
                Y.Lang.sub(this._Y_SCROLLER_TEMPLATE, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   537
                    className: this.getClassName('y','scroller','container'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   538
                    scrollerClassName: scrollerClass
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   539
                }));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   540
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   541
            this._yScrollNode = this._yScrollContainer
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   542
                .one('.' + scrollerClass);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   543
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   544
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   545
        return this._yScrollContainer;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   546
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   547
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   548
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   549
    Removes the nodes used to create horizontal and vertical scrolling and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   550
    rejoins the caption to the main table if needed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   551
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   552
    @method _disableScrolling
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   553
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   554
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   555
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   556
    _disableScrolling: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   557
        this._removeScrollCaptionTable();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   558
        this._disableXScrolling();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   559
        this._disableYScrolling();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   560
        this._unbindScrollResize();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   561
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   562
        this._uiSetWidth(this.get('width'));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   563
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   564
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   565
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   566
    Removes the nodes used to allow horizontal scrolling.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   567
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   568
    @method _disableXScrolling
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   569
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   570
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   571
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   572
    _disableXScrolling: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   573
        this._removeXScrollNode();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   574
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   575
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   576
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   577
    Removes the nodes used to allow vertical scrolling.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   578
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   579
    @method _disableYScrolling
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   580
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   581
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   582
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   583
    _disableYScrolling: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   584
        this._removeYScrollHeader();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   585
        this._removeYScrollNode();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   586
        this._removeYScrollContainer();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   587
        this._removeScrollbar();
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
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   591
    Cleans up external event subscriptions.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   592
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   593
    @method destructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   594
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   595
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   596
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   597
    destructor: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   598
        this._unbindScrollbar();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   599
        this._unbindScrollResize();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   600
        this._clearScrollLock();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   601
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   603
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   604
    Sets up event handlers and AOP advice methods to bind the DataTable's natural
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   605
    behaviors with the scrolling APIs and state.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   606
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   607
    @method initializer
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   608
    @param {Object} config The config object passed to the constructor (ignored)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   609
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   610
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   611
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   612
    initializer: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   613
        this._setScrollProperties();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   614
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   615
        this.after(['scrollableChange', 'heightChange', 'widthChange'],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   616
            this._setScrollProperties);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   617
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   618
        this.after('renderView', Y.bind('_syncScrollUI', this));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   619
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   620
        Y.Do.after(this._bindScrollUI, this, 'bindUI');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   621
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   622
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   623
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   624
    Removes the table used to house the caption when the table is scrolling.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   625
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   626
    @method _removeScrollCaptionTable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   627
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   628
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   629
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   630
    _removeScrollCaptionTable: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   631
        if (this._captionTable) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   632
            if (this._captionNode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   633
                this._tableNode.prepend(this._captionNode);
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
            this._captionTable.remove().destroy(true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   637
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   638
            delete this._captionTable;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   639
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   640
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   641
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   642
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   643
    Removes the `<div>` wrapper used to contain the data table when the table
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   644
    is horizontally scrolling.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   645
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   646
    @method _removeXScrollNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   647
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   648
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   649
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   650
    _removeXScrollNode: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   651
        var scroller = this._xScrollNode;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   652
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   653
        if (scroller) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   654
            scroller.replace(scroller.get('childNodes').toFrag());
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   655
            scroller.remove().destroy(true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   656
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   657
            delete this._xScrollNode;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   658
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   659
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   660
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   661
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   662
    Removes the `<div>` wrapper used to contain the data table and fixed header
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   663
    when the table is vertically scrolling.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   664
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   665
    @method _removeYScrollContainer
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   666
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   667
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   668
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   669
    _removeYScrollContainer: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   670
        var scroller = this._yScrollContainer;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   671
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   672
        if (scroller) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   673
            scroller.replace(scroller.get('childNodes').toFrag());
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   674
            scroller.remove().destroy(true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   675
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   676
            delete this._yScrollContainer;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   677
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   678
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   679
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   680
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   681
    Removes the `<table>` used to contain the fixed column headers when the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   682
    table is vertically scrolling.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   683
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   684
    @method _removeYScrollHeader
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   685
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   686
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   687
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   688
    _removeYScrollHeader: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   689
        if (this._yScrollHeader) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   690
            this._yScrollHeader.remove().destroy(true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   691
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   692
            delete this._yScrollHeader;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   693
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   694
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   695
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   696
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   697
    Removes the `<div>` wrapper used to contain the data table when the table
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   698
    is vertically scrolling.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   699
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   700
    @method _removeYScrollNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   701
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   702
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   703
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   704
    _removeYScrollNode: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   705
        var scroller = this._yScrollNode;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   706
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   707
        if (scroller) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   708
            scroller.replace(scroller.get('childNodes').toFrag());
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   709
            scroller.remove().destroy(true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   710
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   711
            delete this._yScrollNode;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   712
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   713
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   714
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   715
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   716
    Removes the virtual scrollbar used by scrolling tables.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   717
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   718
    @method _removeScrollbar
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   719
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   720
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   721
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   722
    _removeScrollbar: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   723
        if (this._scrollbarNode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   724
            this._scrollbarNode.remove().destroy(true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   725
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   726
            delete this._scrollbarNode;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   727
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   728
        if (this._scrollbarEventHandle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   729
            this._scrollbarEventHandle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   730
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   731
            delete this._scrollbarEventHandle;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   732
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   733
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   734
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   735
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   736
    Accepts (case insensitive) values "x", "y", "xy", `true`, and `false`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   737
    `true` is translated to "xy" and upper case values are converted to lower
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   738
    case.  All other values are invalid.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   739
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   740
    @method _setScrollable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   741
    @param {String|Boolean} val Incoming value for the `scrollable` attribute
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   742
    @return {String}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   743
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   744
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   745
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   746
    _setScrollable: function (val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   747
        if (val === true) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   748
            val = 'xy';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   749
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   750
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   751
        if (isString(val)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   752
            val = val.toLowerCase();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   753
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   754
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   755
        return (val === false || val === 'y' || val === 'x' || val === 'xy') ?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   756
            val :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   757
            Y.Attribute.INVALID_VALUE;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   758
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   759
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   760
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   761
    Assigns the `_xScroll` and `_yScroll` properties to true if an
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   762
    appropriate value is set in the `scrollable` attribute and the `height`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   763
    and/or `width` is set.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   764
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   765
    @method _setScrollProperties
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   766
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   767
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   768
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   769
    _setScrollProperties: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   770
        var scrollable = this.get('scrollable') || '',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   771
            width      = this.get('width'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   772
            height     = this.get('height');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   773
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   774
        this._xScroll = width  && scrollable.indexOf('x') > -1;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   775
        this._yScroll = height && scrollable.indexOf('y') > -1;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   776
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   777
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   778
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   779
    Keeps the virtual scrollbar and the scrolling `<div>` wrapper around the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   780
    data table in vertically scrolling tables in sync.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   781
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   782
    @method _syncScrollPosition
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   783
    @param {DOMEventFacade} e The scroll event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   784
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   785
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   786
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   787
    _syncScrollPosition: function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   788
        var scrollbar = this._scrollbarNode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   789
            scroller  = this._yScrollNode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   790
            source    = e.currentTarget,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   791
            other;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   792
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   793
        if (scrollbar && scroller) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   794
            if (this._scrollLock && this._scrollLock.source !== source) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   795
                return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   796
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   797
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   798
            this._clearScrollLock();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   799
            this._scrollLock = Y.later(300, this, this._clearScrollLock);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   800
            this._scrollLock.source = source;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   801
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   802
            other = (source === scrollbar) ? scroller : scrollbar;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   803
            other.set('scrollTop', source.get('scrollTop'));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   804
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   805
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   806
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   807
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   808
    Splits the caption from the data `<table>` if the table is configured to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   809
    scroll.  If not, rejoins the caption to the data `<table>` if it needs to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   810
    be.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   811
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   812
    @method _syncScrollCaptionUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   813
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   814
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   815
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   816
    _syncScrollCaptionUI: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   817
        var caption      = this._captionNode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   818
            table        = this._tableNode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   819
            captionTable = this._captionTable,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   820
            id;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   821
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   822
        if (caption) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   823
            id = caption.getAttribute('id');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   824
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   825
            if (!captionTable) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   826
                captionTable = this._createScrollCaptionTable();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   827
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   828
                this.get('contentBox').prepend(captionTable);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   829
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   830
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   831
            if (!caption.get('parentNode').compareTo(captionTable)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   832
                captionTable.empty().insert(caption);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   833
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   834
                if (!id) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   835
                    id = Y.stamp(caption);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   836
                    caption.setAttribute('id', id);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   837
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   838
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   839
                table.setAttribute('aria-describedby', id);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   840
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   841
        } else if (captionTable) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   842
            this._removeScrollCaptionTable();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   843
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   844
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   845
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   846
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   847
    Assigns widths to the fixed header columns to match the columns in the data
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   848
    table.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   849
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   850
    @method _syncScrollColumnWidths
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   851
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   852
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   853
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   854
    _syncScrollColumnWidths: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   855
        var widths = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   856
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   857
        if (this._theadNode && this._yScrollHeader) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   858
            // Capture dims and assign widths in two passes to avoid reflows for
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   859
            // each access of clientWidth/getComputedStyle
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   860
            this._theadNode.all('.' + this.getClassName('header'))
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   861
                .each(function (header) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   862
                    widths.push(
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   863
                        // FIXME: IE returns the col.style.width from
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   864
                        // getComputedStyle even if the column has been
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   865
                        // compressed below that width, so it must use
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   866
                        // clientWidth. FF requires getComputedStyle because it
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   867
                        // uses fractional widths that round up to an overall
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   868
                        // cell/table width 1px greater than the data table's
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   869
                        // cell/table width, resulting in misaligned columns or
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   870
                        // fixed header bleed through. I can't think of a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   871
                        // *reasonable* way to capture the correct width without
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   872
                        // a sniff.  Math.min(cW - p, getCS(w)) was imperfect
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   873
                        // and punished all browsers, anyway.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   874
                        (Y.UA.ie && Y.UA.ie < 8) ?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   875
                            (header.get('clientWidth') -
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   876
                             styleDim(header, 'paddingLeft') -
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   877
                             styleDim(header, 'paddingRight')) + 'px' :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   878
                            header.getComputedStyle('width'));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   879
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   880
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   881
            this._yScrollHeader.all('.' + this.getClassName('scroll', 'liner'))
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   882
                .each(function (liner, i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   883
                    liner.setStyle('width', widths[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   884
                });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   885
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   886
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   887
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   888
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   889
    Creates matching headers in the fixed header table for vertically scrolling
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   890
    tables and synchronizes the column widths.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   891
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   892
    @method _syncScrollHeaders
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   893
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   894
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   895
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   896
    _syncScrollHeaders: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   897
        var fixedHeader   = this._yScrollHeader,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   898
            linerTemplate = this._SCROLL_LINER_TEMPLATE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   899
            linerClass    = this.getClassName('scroll', 'liner'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   900
            headerClass   = this.getClassName('header'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   901
            headers       = this._theadNode.all('.' + headerClass);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   902
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   903
        if (this._theadNode && fixedHeader) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   904
            fixedHeader.empty().appendChild(
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   905
                this._theadNode.cloneNode(true));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   906
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   907
            // Prevent duplicate IDs and assign ARIA attributes to hide
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   908
            // from screen readers
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   909
            fixedHeader.all('[id]').removeAttribute('id');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   910
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   911
            fixedHeader.all('.' + headerClass).each(function (header, i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   912
                var liner = Y.Node.create(Y.Lang.sub(linerTemplate, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   913
                            className: linerClass
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   914
                        })),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   915
                    refHeader = headers.item(i);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   916
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   917
                // Can't assign via skin css because sort (and potentially
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   918
                // others) might override the padding values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   919
                liner.setStyle('padding',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   920
                    refHeader.getComputedStyle('paddingTop') + ' ' +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   921
                    refHeader.getComputedStyle('paddingRight') + ' ' +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   922
                    refHeader.getComputedStyle('paddingBottom') + ' ' +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   923
                    refHeader.getComputedStyle('paddingLeft'));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   924
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   925
                liner.appendChild(header.get('childNodes').toFrag());
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   926
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   927
                header.appendChild(liner);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   928
            }, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   929
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   930
            this._syncScrollColumnWidths();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   931
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   932
            this._addScrollbarPadding();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   933
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   934
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   935
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   936
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   937
    Wraps the table for X and Y scrolling, if necessary, if the `scrollable`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   938
    attribute is set.  Synchronizes dimensions and DOM placement of all
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   939
    scrolling related nodes.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   940
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   941
    @method _syncScrollUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   942
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   943
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   944
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   945
    _syncScrollUI: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   946
        var x = this._xScroll,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   947
            y = this._yScroll,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   948
            xScroller  = this._xScrollNode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   949
            yScroller  = this._yScrollNode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   950
            scrollLeft = xScroller && xScroller.get('scrollLeft'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   951
            scrollTop  = yScroller && yScroller.get('scrollTop');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   952
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   953
        this._uiSetScrollable();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   954
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   955
        // TODO: Probably should split this up into syncX, syncY, and syncXY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   956
        if (x || y) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   957
            if ((this.get('width') || '').slice(-1) === '%') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   958
                this._bindScrollResize();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   959
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   960
                this._unbindScrollResize();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   961
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   962
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   963
            this._syncScrollCaptionUI();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   964
        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   965
            this._disableScrolling();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   966
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   967
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   968
        if (this._yScrollHeader) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   969
            this._yScrollHeader.setStyle('display', 'none');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   970
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   971
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   972
        if (x) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   973
            if (!y) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   974
                this._disableYScrolling();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   975
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   976
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   977
            this._syncXScrollUI(y);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   978
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   979
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   980
        if (y) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   981
            if (!x) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   982
                this._disableXScrolling();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   983
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   984
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   985
            this._syncYScrollUI(x);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   986
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   987
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   988
        // Restore scroll position
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   989
        if (scrollLeft && this._xScrollNode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   990
            this._xScrollNode.set('scrollLeft', scrollLeft);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   991
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   992
        if (scrollTop && this._yScrollNode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   993
            this._yScrollNode.set('scrollTop', scrollTop);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   994
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   995
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   996
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   997
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   998
    Wraps the table in a scrolling `<div>` of the configured width for "x"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   999
    scrolling.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1000
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1001
    @method _syncXScrollUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1002
    @param {Boolean} xy True if the table is configured with scrollable ="xy"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1003
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1004
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1005
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1006
    _syncXScrollUI: function (xy) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1007
        var scroller     = this._xScrollNode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1008
            yScroller    = this._yScrollContainer,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1009
            table        = this._tableNode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1010
            width        = this.get('width'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1011
            bbWidth      = this.get('boundingBox').get('offsetWidth'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1012
            scrollbarWidth = Y.DOM.getScrollbarWidth(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1013
            borderWidth, tableWidth;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1014
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1015
        if (!scroller) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1016
            scroller = this._createXScrollNode();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1017
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1018
            // Not using table.wrap() because IE went all crazy, wrapping the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1019
            // table in the last td in the table itself.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1020
            (yScroller || table).replace(scroller).appendTo(scroller);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1021
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1022
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1023
        // Can't use offsetHeight - clientHeight because IE6 returns
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1024
        // clientHeight of 0 intially.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1025
        borderWidth = styleDim(scroller, 'borderLeftWidth') +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1026
                      styleDim(scroller, 'borderRightWidth');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1027
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1028
        scroller.setStyle('width', '');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1029
        this._uiSetDim('width', '');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1030
        if (xy && this._yScrollContainer) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1031
            this._yScrollContainer.setStyle('width', '');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1032
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1033
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1034
        // Lock the table's unconstrained width to avoid configured column
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1035
        // widths being ignored
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1036
        if (Y.UA.ie && Y.UA.ie < 8) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1037
            // Have to assign a style and trigger a reflow to allow the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1038
            // subsequent clearing of width + reflow to expand the table to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1039
            // natural width in IE 6
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1040
            table.setStyle('width', width);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1041
            table.get('offsetWidth');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1042
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1043
        table.setStyle('width', '');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1044
        tableWidth = table.get('offsetWidth');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1045
        table.setStyle('width', tableWidth + 'px');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1046
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1047
        this._uiSetDim('width', width);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1048
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1049
        // Can't use 100% width because the borders add additional width
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1050
        // TODO: Cache the border widths, though it won't prevent a reflow
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1051
        scroller.setStyle('width', (bbWidth - borderWidth) + 'px');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1052
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1053
        // expand the table to fill the assigned width if it doesn't
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1054
        // already overflow the configured width
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1055
        if ((scroller.get('offsetWidth') - borderWidth) > tableWidth) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1056
            // Assumes the wrapped table doesn't have borders
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1057
            if (xy) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1058
                table.setStyle('width', (scroller.get('offsetWidth') -
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1059
                     borderWidth - scrollbarWidth) + 'px');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1060
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1061
                table.setStyle('width', '100%');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1062
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1063
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1064
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1065
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1066
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1067
    Wraps the table in a scrolling `<div>` of the configured height (accounting
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1068
    for the caption if there is one) if "y" scrolling is enabled.  Otherwise,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1069
    unwraps the table if necessary.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1070
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1071
    @method _syncYScrollUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1072
    @param {Boolean} xy True if the table is configured with scrollable = "xy"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1073
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1074
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1075
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1076
    _syncYScrollUI: function (xy) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1077
        var yScroller    = this._yScrollContainer,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1078
            yScrollNode  = this._yScrollNode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1079
            xScroller    = this._xScrollNode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1080
            fixedHeader  = this._yScrollHeader,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1081
            scrollbar    = this._scrollbarNode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1082
            table        = this._tableNode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1083
            thead        = this._theadNode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1084
            captionTable = this._captionTable,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1085
            boundingBox  = this.get('boundingBox'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1086
            contentBox   = this.get('contentBox'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1087
            width        = this.get('width'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1088
            height       = boundingBox.get('offsetHeight'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1089
            scrollbarWidth = Y.DOM.getScrollbarWidth(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1090
            outerScroller;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1091
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1092
        if (captionTable && !xy) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1093
            captionTable.setStyle('width', width || '100%');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1094
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1095
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1096
        if (!yScroller) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1097
            yScroller = this._createYScrollNode();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1098
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1099
            yScrollNode = this._yScrollNode;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1100
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1101
            table.replace(yScroller).appendTo(yScrollNode);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1102
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1103
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1104
        outerScroller = xy ? xScroller : yScroller;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1105
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1106
        if (!xy) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1107
            table.setStyle('width', '');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1108
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1109
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1110
        // Set the scroller height
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1111
        if (xy) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1112
            // Account for the horizontal scrollbar in the overall height
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1113
            height -= scrollbarWidth;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1114
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1115
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1116
        yScrollNode.setStyle('height',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1117
            (height - outerScroller.get('offsetTop') -
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1118
            // because IE6 is returning clientHeight 0 initially
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1119
            styleDim(outerScroller, 'borderTopWidth') -
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1120
            styleDim(outerScroller, 'borderBottomWidth')) + 'px');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1121
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1122
        // Set the scroller width
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1123
        if (xy) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1124
            // For xy scrolling tables, the table should expand freely within
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1125
            // the x scroller
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1126
            yScroller.setStyle('width',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1127
                (table.get('offsetWidth') + scrollbarWidth) + 'px');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1128
        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1129
            this._uiSetYScrollWidth(width);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1130
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1131
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1132
        if (captionTable && !xy) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1133
            captionTable.setStyle('width', yScroller.get('offsetWidth') + 'px');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1134
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1135
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1136
        // Allow headerless scrolling
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1137
        if (thead && !fixedHeader) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1138
            fixedHeader = this._createYScrollHeader();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1139
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1140
            yScroller.prepend(fixedHeader);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1141
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1142
            this._syncScrollHeaders();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1143
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1144
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1145
        if (fixedHeader) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1146
            this._syncScrollColumnWidths();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1147
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1148
            fixedHeader.setStyle('display', '');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1149
            // This might need to come back if FF has issues
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1150
            //fixedHeader.setStyle('width', '100%');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1151
                //(yScroller.get('clientWidth') + scrollbarWidth) + 'px');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1152
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1153
            if (!scrollbar) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1154
                scrollbar = this._createScrollbar();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1155
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1156
                this._bindScrollbar();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1157
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1158
                contentBox.prepend(scrollbar);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1159
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1160
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1161
            this._uiSetScrollbarHeight();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1162
            this._uiSetScrollbarPosition(outerScroller);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1163
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1164
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1165
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1166
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1167
    Assigns the appropriate class to the `boundingBox` to identify the DataTable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1168
    as horizontally scrolling, vertically scrolling, or both (adds both classes).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1169
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1170
    Classes added are "yui3-datatable-scrollable-x" or "...-y"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1171
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1172
    @method _uiSetScrollable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1173
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1174
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1175
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1176
    _uiSetScrollable: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1177
        this.get('boundingBox')
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1178
            .toggleClass(this.getClassName('scrollable','x'), this._xScroll)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1179
            .toggleClass(this.getClassName('scrollable','y'), this._yScroll);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1180
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1181
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1182
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1183
    Updates the virtual scrollbar's height to avoid overlapping with the fixed
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1184
    headers.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1185
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1186
    @method _uiSetScrollbarHeight
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1187
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1188
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1189
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1190
    _uiSetScrollbarHeight: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1191
        var scrollbar   = this._scrollbarNode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1192
            scroller    = this._yScrollNode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1193
            fixedHeader = this._yScrollHeader;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1194
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1195
        if (scrollbar && scroller && fixedHeader) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1196
            scrollbar.get('firstChild').setStyle('height',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1197
                this._tbodyNode.get('scrollHeight') + 'px');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1198
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1199
            scrollbar.setStyle('height',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1200
                (parseFloat(scroller.getComputedStyle('height')) -
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1201
                 parseFloat(fixedHeader.getComputedStyle('height'))) + 'px');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1202
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1203
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1204
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1205
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1206
    Updates the virtual scrollbar's placement to avoid overlapping the fixed
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1207
    headers or the data table.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1208
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1209
    @method _uiSetScrollbarPosition
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1210
    @param {Node} scroller Reference node to position the scrollbar over
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1211
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1212
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1213
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1214
    _uiSetScrollbarPosition: function (scroller) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1215
        var scrollbar     = this._scrollbarNode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1216
            fixedHeader   = this._yScrollHeader;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1217
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1218
        if (scrollbar && scroller && fixedHeader) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1219
            scrollbar.setStyles({
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1220
                // Using getCS instead of offsetHeight because FF uses
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1221
                // fractional values, but reports ints to offsetHeight, so
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1222
                // offsetHeight is unreliable.  It is probably fine to use
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1223
                // offsetHeight in this case but this was left in place after
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1224
                // fixing an off-by-1px issue in FF 10- by fixing the caption
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1225
                // font style so FF picked it up.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1226
                top: (parseFloat(fixedHeader.getComputedStyle('height')) +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1227
                      styleDim(scroller, 'borderTopWidth') +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1228
                      scroller.get('offsetTop')) + 'px',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1229
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1230
                // Minus 1 because IE 6-10 require the scrolled area to be
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1231
                // visible by at least 1px or it won't respond to clicks on the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1232
                // scrollbar rail or endcap arrows.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1233
                left: (scroller.get('offsetWidth') -
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1234
                       Y.DOM.getScrollbarWidth() - 1 -
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1235
                       styleDim(scroller, 'borderRightWidth')) + 'px'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1236
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1237
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1238
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1239
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1240
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1241
    Assigns the width of the `<div>` wrapping the data table in vertically
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1242
    scrolling tables.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1243
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1244
    If the table can't compress to the specified width, the container is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1245
    expanded accordingly.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1246
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1247
    @method _uiSetYScrollWidth
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1248
    @param {String} width The CSS width to attempt to set
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1249
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1250
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1251
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1252
    _uiSetYScrollWidth: function (width) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1253
        var scroller = this._yScrollContainer,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1254
            table    = this._tableNode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1255
            tableWidth, borderWidth, scrollerWidth, scrollbarWidth;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1256
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1257
        if (scroller && table) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1258
            scrollbarWidth = Y.DOM.getScrollbarWidth();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1259
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1260
            if (width) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1261
                // Assumes no table border
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1262
                borderWidth = scroller.get('offsetWidth') -
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1263
                              scroller.get('clientWidth') +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1264
                              scrollbarWidth; // added back at the end
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1265
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1266
                // The table's rendered width might be greater than the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1267
                // configured width
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1268
                scroller.setStyle('width', width);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1269
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1270
                // Have to subtract the border width from the configured width
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1271
                // because the scroller's width will need to be reduced by the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1272
                // border width as well during the width reassignment below.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1273
                scrollerWidth = scroller.get('clientWidth') - borderWidth;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1274
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1275
                // Assumes no table borders
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1276
                table.setStyle('width', scrollerWidth + 'px');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1277
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1278
                tableWidth = table.get('offsetWidth');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1279
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1280
                // Expand the scroll node width if the table can't fit.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1281
                // Otherwise, reassign the scroller a pixel width that
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1282
                // accounts for the borders.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1283
                scroller.setStyle('width',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1284
                    (tableWidth + scrollbarWidth) + 'px');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1285
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1286
                // Allow the table to expand naturally
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1287
                table.setStyle('width', '');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1288
                scroller.setStyle('width', '');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1289
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1290
                scroller.setStyle('width',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1291
                    (table.get('offsetWidth') + scrollbarWidth) + 'px');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1292
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1293
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1294
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1295
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1296
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1297
    Detaches the scroll event subscriptions used to maintain scroll position
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1298
    parity between the scrollable `<div>` wrapper around the data table and the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1299
    virtual scrollbar for vertically scrolling tables.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1300
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1301
    @method _unbindScrollbar
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1302
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1303
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1304
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1305
    _unbindScrollbar: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1306
        if (this._scrollbarEventHandle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1307
            this._scrollbarEventHandle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1308
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1309
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1310
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1311
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1312
    Detaches the resize event subscription used to maintain column parity for
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1313
    vertically scrolling tables with percentage widths.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1314
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1315
    @method _unbindScrollResize
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1316
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1317
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1318
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1319
    _unbindScrollResize: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1320
        if (this._scrollResizeHandle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1321
            this._scrollResizeHandle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1322
            delete this._scrollResizeHandle;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1323
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1324
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1325
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1326
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1327
    Indicates horizontal table scrolling is enabled.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1328
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1329
    @property _xScroll
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1330
    @type {Boolean}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1331
    @default undefined (not initially set)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1332
    @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1333
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1334
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1335
    //_xScroll: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1336
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1337
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1338
    Indicates vertical table scrolling is enabled.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1339
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1340
    @property _yScroll
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1341
    @type {Boolean}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1342
    @default undefined (not initially set)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1343
    @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1344
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1345
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1346
    //_yScroll: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1347
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1348
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1349
    Fixed column header `<table>` Node for vertical scrolling tables.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1350
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1351
    @property _yScrollHeader
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1352
    @type {Node}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1353
    @default undefined (not initially set)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1354
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1355
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1356
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1357
    //_yScrollHeader: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1358
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1359
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1360
    Overflow Node used to contain the data rows in a vertically scrolling table.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1361
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1362
    @property _yScrollNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1363
    @type {Node}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1364
    @default undefined (not initially set)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1365
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1366
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1367
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1368
    //_yScrollNode: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1369
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1370
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1371
    Overflow Node used to contain the table headers and data in a horizontally
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1372
    scrolling table.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1373
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1374
    @property _xScrollNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1375
    @type {Node}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1376
    @default undefined (not initially set)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1377
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1378
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1379
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1380
    //_xScrollNode: null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1381
}, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1382
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1383
Y.Base.mix(Y.DataTable, [Scrollable]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1384
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1385
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1386
}, '@VERSION@', {"requires": ["datatable-base", "datatable-column-widths", "dom-screen"], "skinnable": true});