* Convert a `layout` object given by a user to the object structure needed * for the renderer. This is done twice, once for above and once for below * the table. Ordering must also be considered. * * @param {*} settings DataTables settings object * @param {*} layout Layout object to conver
(settings, layout, side)
| 3387 | * @returns Converted array structure - one item for each row. |
| 3388 | */ |
| 3389 | function _layoutArray(settings, layout, side) { |
| 3390 | var rows = [] |
| 3391 | |
| 3392 | // Split out into an array |
| 3393 | $.each(layout, function (pos, items) { |
| 3394 | if (items === null) { |
| 3395 | return |
| 3396 | } |
| 3397 | |
| 3398 | var parts = pos.match(/^([a-z]+)([0-9]*)([A-Za-z]*)$/) |
| 3399 | var rowNum = parts[2] ? parts[2] * 1 : 0 |
| 3400 | var align = parts[3] ? parts[3].toLowerCase() : "full" |
| 3401 | |
| 3402 | // Filter out the side we aren't interested in |
| 3403 | if (parts[1] !== side) { |
| 3404 | return |
| 3405 | } |
| 3406 | |
| 3407 | // Get or create the row we should attach to |
| 3408 | var row = _layoutGetRow(rows, rowNum, align) |
| 3409 | |
| 3410 | _layoutItems(row, align, items) |
| 3411 | }) |
| 3412 | |
| 3413 | // Order by item identifier |
| 3414 | rows.sort(function (a, b) { |
| 3415 | var order1 = a.rowNum |
| 3416 | var order2 = b.rowNum |
| 3417 | |
| 3418 | // If both in the same row, then the row with `full` comes first |
| 3419 | if (order1 === order2) { |
| 3420 | var ret = a.full && !b.full ? -1 : 1 |
| 3421 | |
| 3422 | return side === "bottom" ? ret * -1 : ret |
| 3423 | } |
| 3424 | |
| 3425 | return order2 - order1 |
| 3426 | }) |
| 3427 | |
| 3428 | // Invert for below the table |
| 3429 | if (side === "bottom") { |
| 3430 | rows.reverse() |
| 3431 | } |
| 3432 | |
| 3433 | for (var row = 0; row < rows.length; row++) { |
| 3434 | delete rows[row].rowNum |
| 3435 | |
| 3436 | _layoutResolve(settings, rows[row]) |
| 3437 | } |
| 3438 | |
| 3439 | return rows |
| 3440 | } |
| 3441 | |
| 3442 | /** |
| 3443 | * Convert the contents of a row's layout object to nodes that can be inserted |
no test coverage detected