src/cm/media/js/lib/yui/yui_3.10.3/build/datatable-column-widths/datatable-column-widths.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 525 89ef5ed3c48b
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
YUI 3.10.3 (build 2fb5187)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
Copyright 2013 Yahoo! Inc. All rights reserved.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
Licensed under the BSD License.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
http://yuilibrary.com/license/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
YUI.add('datatable-column-widths', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
Adds basic, programmatic column width support to DataTable via column
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
configuration property `width` and method `table.setColumnWidth(id, width);`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
@module datatable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
@submodule datatable-column-widths
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
var isNumber = Y.Lang.isNumber,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
    arrayIndex = Y.Array.indexOf;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
Y.Features.add('table', 'badColWidth', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
    test: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
        var body = Y.one('body'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
            node, broken;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
        if (body) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
            // In modern browsers, <col style="width:X"> will make columns,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
            // *including padding and borders* X wide. The cell content width
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
            // is reduced.  In old browsers and all Opera versions to date, the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
            // col's width style is passed to the cells, which causes cell
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
            // padding/border to bloat the rendered width.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
            node = body.insertBefore(
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
                '<table style="position:absolute;visibility:hidden;border:0 none">' +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
                    '<colgroup><col style="width:9px"></colgroup>' +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
                    '<tbody><tr>' +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
                        '<td style="' +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
                            'padding:0 4px;' +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
                            'font:normal 2px/2px arial;' +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
                            'border:0 none">' +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
                        '.' + // Just something to give the cell dimension
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
                    '</td></tr></tbody>' +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
                '</table>',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
                body.get('firstChild'));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
            broken = node.one('td').getComputedStyle('width') !== '1px';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
            node.remove(true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
        return broken;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
_API docs for this extension are included in the DataTable class._
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
Adds basic, programmatic column width support to DataTable. Note, this does not
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
add support for truncated columns.  Due to the way HTML tables render, column
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
width is more like a "recommended width".  Column content wider than the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
assigned width will cause the column to expand, despite the configured width.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
Similarly if the table is too narrow to fit the column with the configured
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
column width, the column width will be reduced.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
To set a column width, either add a `width` value to the column configuration
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
or call the `setColumnWidth(id, width)` method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
Note, assigning column widths is possible without this module, as each cell is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
decorated with a class appropriate for that column which you can statically
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
target in your site's CSS.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
To achieve absolute column widths, with content truncation, you can either:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
1. Use this module, configure *all* columns to have `width`s, then add
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
   `table-layout: fixed;` to your CSS for the appropriate `<table>`, or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
2. Wrap the contents of all cells in the column with a `<div>` (using a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
   `cellTemplate` or `formatter`), assign the div's style `width`, then assign
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
   the column `width` or add a CSS `width` to the column class created by
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
   DataTable.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
<pre><code>.yui3-datatable .yui3-datatable-col-foo {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
    padding: 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
    width: 125px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
.yui3-datatable .yui3-datatable-col-foo .yui3-datatable-liner {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
    overflow: hidden;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
    padding: 4px 10px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
    width: 125px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
</pre></code>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
<pre><code>var table = new Y.DataTable({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
    columns: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
        {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
            key: 'foo',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
            cellTemplate:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
                '&lt;td class="{className}">' +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
                    '&lt;div class="yui3-datatable-liner">{content}&lt;/div>' +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
                '&lt;/td>'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
        ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
    ],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
    ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
</code></pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
To add a liner to all columns, either provide a custom `bodyView` to the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
DataTable constructor or update the default `bodyView`'s `CELL_TEMPLATE` like
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
so:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
<pre><code>table.on('table:renderBody', function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
    e.view.CELL_TEMPLATE = e.view.CELL_TEMPLATE.replace(/\{content\}/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
            '&lt;div class="yui3-datatable-liner">{content}&lt;/div>');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
</code></pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
Keep in mind that DataTable skins apply cell `padding`, so assign your CSS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
`width`s accordingly or override the `padding` style for that column's `<td>`s
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
to 0, and add `padding` to the liner `<div>`'s styles as shown above.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
@class DataTable.ColumnWidths
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
@for DataTable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
function ColumnWidths() {}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
Y.mix(ColumnWidths.prototype, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
    The HTML template used to create the table's `<col>`s.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
    @property COL_TEMPLATE
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
    @type {HTML}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
    @default '<col/>'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
    COL_TEMPLATE: '<col/>',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
    The HTML template used to create the table's `<colgroup>`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
    @property COLGROUP_TEMPLATE
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
    @type {HTML}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
    @default '<colgroup/>'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
    COLGROUP_TEMPLATE: '<colgroup/>',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
    Assigns the style width of the `<col>` representing the column identifed by
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
    `id` and updates the column configuration.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
    Pass the empty string for `width` to return a column to auto sizing.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
    This does not trigger a `columnsChange` event today, but I can be convinced
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
    that it should.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
    @method setColumnWidth
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
    @param {Number|String|Object} id The column config object or key, name, or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
            index of a column in the host's `_displayColumns` array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
    @param {Number|String} width CSS width value. Numbers are treated as pixels
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
    @return {DataTable}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
    @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
    setColumnWidth: function (id, width) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
        var col = this.getColumn(id),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
            index = col && arrayIndex(this._displayColumns, col);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
        if (index > -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
            if (isNumber(width)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
                width += 'px';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
            col.width = width;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
            this._setColumnWidth(index, width);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
    //--------------------------------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
    // Protected properties and methods
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
    //--------------------------------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
    Renders the table's `<colgroup>` and populates the `_colgroupNode` property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
    @method _createColumnGroup
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
    _createColumnGroup: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
        return Y.Node.create(this.COLGROUP_TEMPLATE);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
    Hooks up to the rendering lifecycle to also render the `<colgroup>` and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
    subscribe to `columnChange` events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
    @method initializer
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
    initializer: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
        this.after(['renderView', 'columnsChange'], this._uiSetColumnWidths);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
    Sets a columns's `<col>` element width style. This is needed to get around
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
    browser rendering differences.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
    The colIndex corresponds to the item index of the `<col>` in the table's
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
    `<colgroup>`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
    To unset the width, pass a falsy value for the `width`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
    @method _setColumnWidth
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
    @param {Number} colIndex The display column index
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
    @param {Number|String} width The desired width
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
    // TODO: move this to a conditional module
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
    _setColumnWidth: function (colIndex, width) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
        // Opera (including Opera Next circa 1/13/2012) and IE7- pass on the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
        // width style to the cells directly, allowing padding and borders to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
        // expand the rendered width.  Chrome 16, Safari 5.1.1, and FF 3.6+ all
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
        // make the rendered width equal the col's style width, reducing the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
        // cells' calculated width.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
        var colgroup  = this._colgroupNode,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
            col       = colgroup && colgroup.all('col').item(colIndex),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
            cell, getCStyle;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
        if (col) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
            if (width && isNumber(width)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
                width += 'px';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
            col.setStyle('width', width);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
            // Adjust the width for browsers that make
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
            // td.style.width === col.style.width
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
            if  (width && Y.Features.test('table', 'badColWidth')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
                cell = this.getCell([0, colIndex]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
                if (cell) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
                    getCStyle = function (prop) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
                        return parseInt(cell.getComputedStyle(prop), 10)||0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
                    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
                    col.setStyle('width',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
                        // I hate this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
                        parseInt(width, 10) -
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
                        getCStyle('paddingLeft') -
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
                        getCStyle('paddingRight') -
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
                        getCStyle('borderLeftWidth') -
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
                        getCStyle('borderRightWidth') + 'px');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
    Populates the table's `<colgroup>` with a `<col>` per item in the `columns`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
    attribute without children.  It is assumed that these are the columns that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
    have data cells renderered for them.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
    @method _uiSetColumnWidths
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
    _uiSetColumnWidths: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
        if (!this.view) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
        var template = this.COL_TEMPLATE,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
            colgroup = this._colgroupNode,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
            columns  = this._displayColumns,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
            i, len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
        if (!colgroup) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
            colgroup = this._colgroupNode = this._createColumnGroup();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
            this._tableNode.insertBefore(
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
                colgroup,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
                this._tableNode.one('> thead, > tfoot, > tbody'));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
            colgroup.empty();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
        for (i = 0, len = columns.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
            colgroup.append(template);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
            this._setColumnWidth(i, columns[i].width);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
}, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
Y.DataTable.ColumnWidths = ColumnWidths;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
Y.Base.mix(Y.DataTable, [ColumnWidths]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
}, '3.10.3', {"requires": ["datatable-base"]});