mirror of
https://github.com/billz/raspap-webgui.git
synced 2023-10-10 13:37:24 +02:00
56 lines
2.0 KiB
JavaScript
56 lines
2.0 KiB
JavaScript
|
/**
|
||
|
* Due to the fact that DataTables moves DOM elements around (mainly `dt-tag tr`
|
||
|
* elements for sorting and filtering) it can at times be a little tricky to get
|
||
|
* the next row based on another, while taking into account pagination,
|
||
|
* filtering, sorting etc.
|
||
|
*
|
||
|
* This function is designed to address exactly this situation. It takes two
|
||
|
* parameters, the target node, and a boolean indicating if the adjacent row
|
||
|
* retrieved should be the next (`true`, or no value) or the previous (`false`).
|
||
|
*
|
||
|
* @name fnGetAdjacentTr
|
||
|
* @summary Get the adjacent `dt-tag tr` element for a row.
|
||
|
* @author [Allan Jardine](http://sprymedia.co.uk)
|
||
|
*
|
||
|
* @param {node} nTr `dt-tag tr` element to get the adjacent element of
|
||
|
* @param {boolean} [bNext=true] Get the next (`true`), or previous (`false`)
|
||
|
* `dt-tag tr` element.
|
||
|
* @returns {node} `dt-tag tr` element or null if not found.
|
||
|
*
|
||
|
* @example
|
||
|
* $(document).ready(function() {
|
||
|
* var table = $('#example').dataTable();
|
||
|
*
|
||
|
* var n1 = $('#example tbody tr').eq(2)[0];
|
||
|
* var next = table.fnGetAdjacentTr( n1 );
|
||
|
* var prev = table.fnGetAdjacentTr( n1, false );
|
||
|
* } );
|
||
|
*/
|
||
|
|
||
|
jQuery.fn.dataTableExt.oApi.fnGetAdjacentTr = function ( oSettings, nTr, bNext )
|
||
|
{
|
||
|
/* Find the node's position in the aoData store */
|
||
|
var iCurrent = oSettings.oApi._fnNodeToDataIndex( oSettings, nTr );
|
||
|
|
||
|
/* Convert that to a position in the display array */
|
||
|
var iDisplayIndex = $.inArray( iCurrent, oSettings.aiDisplay );
|
||
|
if ( iDisplayIndex == -1 )
|
||
|
{
|
||
|
/* Not in the current display */
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/* Move along the display array as needed */
|
||
|
iDisplayIndex += (typeof bNext=='undefined' || bNext) ? 1 : -1;
|
||
|
|
||
|
/* Check that it within bounds */
|
||
|
if ( iDisplayIndex < 0 || iDisplayIndex >= oSettings.aiDisplay.length )
|
||
|
{
|
||
|
/* There is no next/previous element */
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/* Return the target node from the aoData store */
|
||
|
return oSettings.aoData[ oSettings.aiDisplay[ iDisplayIndex ] ].nTr;
|
||
|
};
|