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