Вход Регистрация
Файл: datatables/media/src/core/core.length.js
Строк: 198
<?php
/**
 * Generate the node required for user display length changing
 *  @param {object} oSettings dataTables settings object
 *  @returns {node} Display length feature node
 *  @memberof DataTable#oApi
 */
function _fnFeatureHtmlLength ( oSettings )
{
    if ( 
oSettings.oScroll.bInfinite )
    {
        return 
null;
    }
    
    
/* This can be overruled by not using the _MENU_ var/macro in the language variable */
    
var sName = 'name="'+oSettings.sTableId+'_length"';
    var 
sStdMenu = '<select size="1" '+sName+'>';
    var 
i, iLen;
    var 
aLengthMenu = oSettings.aLengthMenu;
    
    if ( 
aLengthMenu.length == 2 && typeof aLengthMenu[0] === 'object' && 
            
typeof aLengthMenu[1] === 'object' )
    {
        for ( 
i=0, iLen=aLengthMenu[0].length ; i<iLen ; i++ )
        {
            
sStdMenu += '<option value="'+aLengthMenu[0][i]+'">'+aLengthMenu[1][i]+'</option>';
        }
    }
    else
    {
        for ( 
i=0, iLen=aLengthMenu.length ; i<iLen ; i++ )
        {
            
sStdMenu += '<option value="'+aLengthMenu[i]+'">'+aLengthMenu[i]+'</option>';
        }
    }
    
sStdMenu += '</select>';
    
    var 
nLength = document.createElement( 'div' );
    if ( !
oSettings.aanFeatures.l )
    {
        
nLength.id = oSettings.sTableId+'_length';
    }
    
nLength.className = oSettings.oClasses.sLength;
    
nLength.innerHTML = '<label>'+oSettings.oLanguage.sLengthMenu.replace( '_MENU_', sStdMenu )+'</label>';
    
    
/*
     * Set the length to the current display length - thanks to Andrea Pavlovic for this fix,
     * and Stefan Skopnik for fixing the fix!
     */
    
$('select option[value="'+oSettings._iDisplayLength+'"]', nLength).attr("selected", true);
    
    $(
'select', nLength).bind( 'change.DT', function(e) {
        var 
iVal = $(this).val();
        
        
/* Update all other length options for the new display */
        
var n = oSettings.aanFeatures.l;
        for ( 
i=0, iLen=n.length ; i<iLen ; i++ )
        {
            if ( 
n[i] != this.parentNode )
            {
                $(
'select', n[i]).val( iVal );
            }
        }
        
        
/* Redraw the table */
        
oSettings._iDisplayLength = parseInt(iVal, 10);
        
_fnCalculateEnd( oSettings );
        
        
/* If we have space to show extra rows (backing up from the end point - then do so */
        
if ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() )
        {
            
oSettings._iDisplayStart = oSettings.fnDisplayEnd() - oSettings._iDisplayLength;
            if ( 
oSettings._iDisplayStart < 0 )
            {
                
oSettings._iDisplayStart = 0;
            }
        }
        
        if ( 
oSettings._iDisplayLength == -1 )
        {
            
oSettings._iDisplayStart = 0;
        }
        
        
_fnDraw( oSettings );
    } );


    $(
'select', nLength).attr('aria-controls', oSettings.sTableId);
    
    return 
nLength;
}


/**
 * Recalculate the end point based on the start point
 *  @param {object} oSettings dataTables settings object
 *  @memberof DataTable#oApi
 */
function _fnCalculateEnd( oSettings )
{
    if ( 
oSettings.oFeatures.bPaginate === false )
    {
        
oSettings._iDisplayEnd = oSettings.aiDisplay.length;
    }
    else
    {
        
/* Set the end point of the display - based on how many elements there are
         * still to display
         */
        
if ( oSettings._iDisplayStart + oSettings._iDisplayLength > oSettings.aiDisplay.length ||
               
oSettings._iDisplayLength == -1 )
        {
            
oSettings._iDisplayEnd = oSettings.aiDisplay.length;
        }
        else
        {
            
oSettings._iDisplayEnd = oSettings._iDisplayStart + oSettings._iDisplayLength;
        }
    }
}
?>
Онлайн: 3
Реклама