src/cm/media/js/lib/yui/yui3-3.15.0/build/datatable-mutable/datatable-mutable-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-mutable', 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 mutation convenience methods such as `table.addRow(data)` to `Y.DataTable`. (or other built class).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
@module datatable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
@submodule datatable-mutable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
@since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
var toArray = Y.Array,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
    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
    isArray  = YLang.isArray,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
    isObject = YLang.isObject,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
    isNumber = YLang.isNumber,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
    arrayIndex = Y.Array.indexOf,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
    Mutable;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
_API docs for this extension are included in the DataTable class._
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
Class extension to add mutation convenience methods to `Y.DataTable` (or other
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
built class).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
Column mutation methods are paired with new custom events:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
 * addColumn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
 * removeColumn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
 * modifyColumn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
 * moveColumn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
Row mutation events are bubbled from the DataTable's `data` ModelList through
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
the DataTable instance.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
@class DataTable.Mutable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
@for DataTable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
@since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
Y.namespace('DataTable').Mutable = Mutable = function () {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
Mutable.ATTRS = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
    Controls whether `addRow`, `removeRow`, and `modifyRow` should trigger the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
    underlying Model's sync layer by default.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
    When `true`, it is unnecessary to pass the "sync" configuration property to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
    those methods to trigger per-operation sync.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
    @attribute autoSync
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
    @type {Boolean}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
    @default `false`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
    autoSync: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
        value: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
        validator: YLang.isBoolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
Y.mix(Mutable.prototype, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
    Adds the column configuration to the DataTable's `columns` configuration.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
    If the `index` parameter is supplied, it is injected at that index.  If the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
    table has nested headers, inject a subcolumn by passing an array of indexes
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
    to identify the new column's final location.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
    The `index` parameter is required if adding a nested column.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
    This method is a convienience method for fetching the DataTable's `columns`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
    attribute, updating it, and calling
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
    `table.set('columns', _updatedColumnsDefs_)`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
    For example:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
    <pre><code>// Becomes last column
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
    table.addColumn('name');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
    // Inserted after the current second column, moving the current third column
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
    // to index 4
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
    table.addColumn({ key: 'price', formatter: currencyFormatter }, 2 );
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
    // Insert a new column in a set of headers three rows deep.  The index array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
    // translates to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
    // [ 2, --  in the third column's children
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
    //   1, --  in the second child's children
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
    //   3 ] -- as the fourth child column
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
    table.addColumn({ key: 'age', sortable: true }, [ 2, 1, 3 ]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
    </code></pre>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
    @method addColumn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
    @param {Object|String} config The new column configuration object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
    @param {Number|Number[]} [index] the insertion index
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
    @return {DataTable}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
    @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
    addColumn: function (config, index) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
        if (isString(config)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
            config = { key: config };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
        if (config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
            if (arguments.length < 2 || (!isNumber(index) && !isArray(index))) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
                index = this.get('columns').length;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
            this.fire('addColumn', {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
                column: config,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
                index: index
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
        return this;
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
    Updates an existing column definition. Fires the `modifyColumn` event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
    For example:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
    <pre><code>// Add a formatter to the existing 'price' column definition
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
    table.modifyColumn('price', { formatter: currencyFormatter });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
    // Change the label on a header cell in a set of nested headers three rows
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
    // deep.  The index array translates to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
    // [ 2,  -- in the third column's children
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
    //   1,  -- the second child
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
    //   3 ] -- the fourth child column
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
    table.modifyColumn([2, 1, 3], { label: 'Experience' });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
    </code></pre>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
    @method modifyColumn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
    @param {String|Number|Number[]|Object} name The column key, name, index, or
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
                current configuration object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
    @param {Object} config The new column configuration properties
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
    @return {DataTable}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
    @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
    modifyColumn: function (name, config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
        if (isString(config)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
            config = { key: config };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
        if (isObject(config)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
            this.fire('modifyColumn', {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
                column: name,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
                newColumnDef: config
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
    Moves an existing column to a new location. Fires the `moveColumn` event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
    The destination index can be a number or array of numbers to place a column
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
    header in a nested header row.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
    @method moveColumn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
    @param {String|Number|Number[]|Object} name The column key, name, index, or
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
                current configuration object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
    @param {Number|Number[]} index The destination index of the column
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
    @return {DataTable}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
    @chainable
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
    moveColumn: function (name, index) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
        if (name !== undefined && (isNumber(index) || isArray(index))) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
            this.fire('moveColumn', {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
                column: name,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
                index: index
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
    Removes an existing column. Fires the `removeColumn` event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
    @method removeColumn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
    @param {String|Number|Number[]|Object} name The column key, name, index, or
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
                current configuration object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
    @return {DataTable}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
    @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
    removeColumn: function (name) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   191
        if (name !== undefined) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   192
            this.fire('removeColumn', {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   193
                column: name
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
        return this;
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
    Adds a new record to the DataTable's `data` ModelList.  Record data can be
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   202
    an object of field values or an instance of the DataTable's configured
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   203
    `recordType` class.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   204
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   205
    This relays all parameters to the `data` ModelList's `add` method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   206
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   207
    If a configuration object is passed as a second argument, and that object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   208
    has `sync: true` set, the underlying Model will be `save()`d.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   209
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   210
    If the DataTable's `autoSync` attribute is set to `true`, the additional
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   211
    argument is not needed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   212
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   213
    If syncing and the last argument is a function, that function will be used
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   214
    as a callback to the Model's `save()` method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   215
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   216
    @method addRow
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   217
    @param {Object} data The data or Model instance for the new record
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   218
    @param {Object} [config] Configuration to pass along
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   219
    @param {Function} [callback] Callback function for Model's `save()`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   220
      @param {Error|null} callback.err If an error occurred or validation
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   221
        failed, this parameter will contain the error. If the sync operation
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   222
        succeeded, _err_ will be `null`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   223
      @param {Any} callback.response The server's response. This value will
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   224
        be passed to the `parse()` method, which is expected to parse it and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   225
        return an attribute hash.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   226
    @return {DataTable}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   227
    @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   228
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   229
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   230
    addRow: function (data, config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   231
        // Allow autoSync: true + addRow({ data }, { sync: false })
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   232
        var sync = (config && ('sync' in config)) ?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   233
                config.sync :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   234
                this.get('autoSync'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   235
            models, model, i, len, args;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   236
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   237
        if (data && this.data) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   238
            models = this.data.add.apply(this.data, arguments);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   239
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   240
            if (sync) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   241
                models = toArray(models);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   242
                args   = toArray(arguments, 1, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   243
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   244
                for (i = 0, len = models.length; i < len; ++i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   245
                    model = models[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   246
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   247
                    if (model.isNew()) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   248
                        models[i].save.apply(models[i], args);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   249
                    }
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
        return this;
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
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   258
    Removes a record from the DataTable's `data` ModelList.  The record can be
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   259
    provided explicitly or targeted by it's `id` (see ModelList's `getById`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   260
    method), `clientId`, or index in the ModelList.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   261
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   262
    After locating the target Model, this relays the Model and all other passed
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   263
    arguments to the `data` ModelList's `remove` method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   264
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   265
    If a configuration object is passed as a second argument, and that object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   266
    has `sync: true` set, the underlying Model will be destroyed, passing
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   267
    `{ delete: true }` to trigger calling the Model's sync layer.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   268
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   269
    If the DataTable's `autoSync` attribute is set to `true`, the additional
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   270
    argument is not needed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   271
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   272
    If syncing and the last argument is a function, that function will be used
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   273
    as a callback to the Model's `destroy()` method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   274
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   275
    @method removeRow
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   276
    @param {Object|String|Number} id The Model instance or identifier
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   277
    @param {Object} [config] Configuration to pass along
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   278
    @param {Function} [callback] Callback function for Model's `save()`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   279
      @param {Error|null} callback.err If an error occurred or validation
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   280
        failed, this parameter will contain the error. If the sync operation
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   281
        succeeded, _err_ will be `null`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   282
      @param {Any} callback.response The server's response. This value will
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   283
        be passed to the `parse()` method, which is expected to parse it and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   284
        return an attribute hash.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   285
    @return {DataTable}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   286
    @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   287
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   288
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   289
    removeRow: function (id, config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   290
        var modelList = this.data,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   291
            // Allow autoSync: true + addRow({ data }, { sync: false })
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   292
            sync      = (config && ('sync' in config)) ?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   293
                            config.sync :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   294
                            this.get('autoSync'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   295
            models, model, i, len, args;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   296
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   297
        // TODO: support removing via DOM element. This should be relayed to View
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   298
        if (isObject(id) && id instanceof this.get('recordType')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   299
            model = id;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   300
        } else if (modelList && id !== undefined) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   301
            model = modelList.getById(id) ||
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   302
                    modelList.getByClientId(id) ||
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   303
                    modelList.item(id);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   304
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   305
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   306
        if (model) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   307
            args = toArray(arguments, 1, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   308
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   309
            models = modelList.remove.apply(modelList,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   310
                [model].concat(args));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   311
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   312
            if (sync) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   313
                if (!isObject(args[0])) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   314
                    args.unshift({});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   315
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   316
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   317
                args[0]['delete'] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   318
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   319
                models = toArray(models);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   320
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   321
                for (i = 0, len = models.length; i < len; ++i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   322
                    model = models[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   323
                    model.destroy.apply(model, args);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   324
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   325
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   326
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   327
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   328
        return this;
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
    Updates an existing record in the DataTable's `data` ModelList.  The record
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   333
    can be provided explicitly or targeted by it's `id` (see ModelList's
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   334
    `getById` method), `clientId`, or index in the ModelList.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   335
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   336
    After locating the target Model, this relays the all other passed
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   337
    arguments to the Model's `setAttrs` method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   338
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   339
    If a configuration object is passed as a second argument, and that object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   340
    has `sync: true` set, the underlying Model will be `save()`d.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   341
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   342
    If the DataTable's `autoSync` attribute is set to `true`, the additional
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   343
    argument is not needed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   344
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   345
    If syncing and the last argument is a function, that function will be used
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   346
    as a callback to the Model's `save()` method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   347
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   348
    @method modifyRow
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   349
    @param {Object|String|Number} id The Model instance or identifier
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   350
    @param {Object} data New data values for the Model
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   351
    @param {Object} [config] Configuration to pass along to `setAttrs()`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   352
    @param {Function} [callback] Callback function for Model's `save()`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   353
      @param {Error|null} callback.err If an error occurred or validation
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   354
        failed, this parameter will contain the error. If the sync operation
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   355
        succeeded, _err_ will be `null`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   356
      @param {Any} callback.response The server's response. This value will
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   357
        be passed to the `parse()` method, which is expected to parse it and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   358
        return an attribute hash.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   359
    @return {DataTable}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   360
    @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   361
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   362
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   363
    modifyRow: function (id, data, config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   364
        var modelList = this.data,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   365
            // Allow autoSync: true + addRow({ data }, { sync: false })
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   366
            sync      = (config && ('sync' in config)) ?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   367
                            config.sync :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   368
                            this.get('autoSync'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   369
            model, args;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   370
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   371
        if (isObject(id) && id instanceof this.get('recordType')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   372
            model = id;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   373
        } else if (modelList && id !== undefined) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   374
            model = modelList.getById(id) ||
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   375
                    modelList.getByClientId(id) ||
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   376
                    modelList.item(id);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   377
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   378
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   379
        if (model && isObject(data)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   380
            args = toArray(arguments, 1, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   381
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   382
            model.setAttrs.apply(model, args);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   383
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   384
            if (sync && !model.isNew()) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   385
                model.save.apply(model, args);
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   389
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   390
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   391
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   392
    // --------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   393
    // Protected properties and methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   394
    // --------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   395
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   396
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   397
    Default function for the `addColumn` event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   398
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   399
    Inserts the specified column at the provided index.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   400
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   401
    @method _defAddColumnFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   402
    @param {EventFacade} e The `addColumn` event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   403
        @param {Object} e.column The new column definition object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   404
        @param {Number|Number[]} e.index The array index to insert the new column
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   405
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   406
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   407
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   408
    _defAddColumnFn: function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   409
        var index   = toArray(e.index),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   410
            columns = this.get('columns'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   411
            cols    = columns,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   412
            i, len;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   413
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   414
        for (i = 0, len = index.length - 1; cols && i < len; ++i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   415
            cols = cols[index[i]] && cols[index[i]].children;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   416
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   417
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   418
        if (cols) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   419
            cols.splice(index[i], 0, e.column);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   420
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   421
            this.set('columns', columns, { originEvent: e });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   422
        } else { Y.log('addColumn index not findable', 'warn', 'datatable');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   423
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   424
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   425
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   426
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   427
    Default function for the `modifyColumn` event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   428
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   429
    Mixes the new column properties into the specified column definition.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   430
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   431
    @method _defModifyColumnFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   432
    @param {EventFacade} e The `modifyColumn` event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   433
        @param {Object|String|Number|Number[]} e.column The column definition object or identifier
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   434
        @param {Object} e.newColumnDef The properties to assign to the column
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   435
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   436
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   437
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   438
    _defModifyColumnFn: function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   439
        var columns = this.get('columns'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   440
            column  = this.getColumn(e.column);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   441
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   442
        if (column) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   443
            Y.mix(column, e.newColumnDef, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   444
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   445
            this.set('columns', columns, { originEvent: e });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   446
        } else { Y.log('Could not locate column index to modify column', 'warn', 'datatable');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   447
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   448
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   449
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   450
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   451
    Default function for the `moveColumn` event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   452
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   453
    Removes the specified column from its current location and inserts it at the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   454
    specified array index (may be an array of indexes for nested headers).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   455
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   456
    @method _defMoveColumnFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   457
    @param {EventFacade} e The `moveColumn` event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   458
        @param {Object|String|Number|Number[]} e.column The column definition object or identifier
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   459
        @param {Object} e.index The destination index to move to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   460
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   461
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   462
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   463
    _defMoveColumnFn: function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   464
        var columns = this.get('columns'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   465
            column  = this.getColumn(e.column),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   466
            toIndex = toArray(e.index),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   467
            fromCols, fromIndex, toCols, i, len;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   468
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   469
        if (column) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   470
            fromCols  = column._parent ? column._parent.children : columns;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   471
            fromIndex = arrayIndex(fromCols, column);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   472
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   473
            if (fromIndex > -1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   474
                toCols = columns;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   475
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   476
                for (i = 0, len = toIndex.length - 1; toCols && i < len; ++i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   477
                    toCols = toCols[toIndex[i]] && toCols[toIndex[i]].children;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   478
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   479
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   480
                if (toCols) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   481
                    len = toCols.length;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   482
                    fromCols.splice(fromIndex, 1);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   483
                    toIndex = toIndex[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   484
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   485
                    if (len > toCols.lenth) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   486
                        // spliced off the same array, so adjust destination
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   487
                        // index if necessary
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   488
                        if (fromIndex < toIndex) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   489
                            toIndex--;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   490
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   491
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   492
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   493
                    toCols.splice(toIndex, 0, column);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   494
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   495
                    this.set('columns', columns, { originEvent: e });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   496
                } else { Y.log('Column [' + e.column + '] could not be moved. Destination index invalid for moveColumn', 'warn', 'datatable');
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
        } else { Y.log('Column [' + e.column + '] not found for moveColumn', 'warn', 'datatable');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   500
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   501
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   502
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   503
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   504
    Default function for the `removeColumn` event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   505
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   506
    Splices the specified column from its containing columns array.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   507
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   508
    @method _defRemoveColumnFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   509
    @param {EventFacade} e The `removeColumn` event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   510
        @param {Object|String|Number|Number[]} e.column The column definition object or identifier
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   511
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   512
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   513
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   514
    _defRemoveColumnFn: function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   515
        var columns = this.get('columns'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   516
            column  = this.getColumn(e.column),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   517
            cols, index;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   518
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   519
        if (column) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   520
            cols = column._parent ? column._parent.children : columns;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   521
            index = Y.Array.indexOf(cols, column);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   522
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   523
            if (index > -1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   524
                cols.splice(index, 1);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   525
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   526
                this.set('columns', columns, { originEvent: e });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   527
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   528
        } else { Y.log('Could not locate column [' + e.column + '] for removeColumn', 'warn', 'datatable');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   529
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   530
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   531
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   532
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   533
    Publishes the events used by the mutation methods:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   534
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   535
     * addColumn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   536
     * removeColumn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   537
     * modifyColumn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   538
     * moveColumn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   539
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   540
    @method initializer
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   541
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   542
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   543
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   544
    initializer: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   545
        this.publish({
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   546
            addColumn:    { defaultFn: Y.bind('_defAddColumnFn', this) },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   547
            removeColumn: { defaultFn: Y.bind('_defRemoveColumnFn', this) },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   548
            moveColumn:   { defaultFn: Y.bind('_defMoveColumnFn', this) },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   549
            modifyColumn: { defaultFn: Y.bind('_defModifyColumnFn', this) }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   550
        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   551
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   552
});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   553
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   554
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   555
Adds an array of new records to the DataTable's `data` ModelList.  Record data
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   556
can be an array of objects containing field values or an array of instance of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   557
the DataTable's configured `recordType` class.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   558
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   559
This relays all parameters to the `data` ModelList's `add` method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   560
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   561
Technically, this is an alias to `addRow`, but please use the appropriately
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   562
named method for readability.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   563
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   564
If a configuration object is passed as a second argument, and that object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   565
has `sync: true` set, the underlying Models will be `save()`d.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   566
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   567
If the DataTable's `autoSync` attribute is set to `true`, the additional
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   568
argument is not needed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   569
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   570
If syncing and the last argument is a function, that function will be used
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   571
as a callback to each Model's `save()` method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   572
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   573
@method addRows
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   574
@param {Object[]} data The data or Model instances to add
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   575
@param {Object} [config] Configuration to pass along
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   576
@param {Function} [callback] Callback function for each Model's `save()`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   577
  @param {Error|null} callback.err If an error occurred or validation
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   578
    failed, this parameter will contain the error. If the sync operation
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   579
    succeeded, _err_ will be `null`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   580
  @param {Any} callback.response The server's response. This value will
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   581
    be passed to the `parse()` method, which is expected to parse it and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   582
    return an attribute hash.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   583
@return {DataTable}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   584
@chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   585
@since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   586
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   587
Mutable.prototype.addRows = Mutable.prototype.addRow;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   588
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   589
// Add feature APIs to public Y.DataTable class
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   590
if (YLang.isFunction(Y.DataTable)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   591
    Y.Base.mix(Y.DataTable, [Mutable]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   592
}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   593
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   594
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   595
Fired by the `addColumn` method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   596
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   597
@event addColumn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   598
@preventable _defAddColumnFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   599
@param {Object} column The new column definition object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   600
@param {Number|Number[]} index The array index to insert the new column
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   601
@since 3.5.0
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
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   605
Fired by the `removeColumn` method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   606
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   607
@event removeColumn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   608
@preventable _defRemoveColumnFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   609
@param {Object|String|Number|Number[]} column The column definition object or identifier
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   613
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   614
Fired by the `modifyColumn` method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   615
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   616
@event modifyColumn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   617
@preventable _defModifyColumnFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   618
@param {Object|String|Number|Number[]} column The column definition object or identifier
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   619
@param {Object} newColumnDef The properties to assign to the column
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   620
@since 3.5.0
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
Fired by the `moveColumn` method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   625
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   626
@event moveColumn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   627
@preventable _defMoveColumnFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   628
@param {Object|String|Number|Number[]} column The column definition object or identifier
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   629
@param {Object} index The destination index to move to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   630
@since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   631
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   632
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   633
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   634
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   635
}, '@VERSION@', {"requires": ["datatable-base"]});