Вход Регистрация
Файл: datatables/media/src/core/core.constructor.js
Строк: 749
<?php
var i=0iLenjjLenkkLen;
var 
sId this.getAttribute'id' );
var 
bInitHandedOff false;
var 
bUsePassedData false;


/* Sanity check */
if ( this.nodeName.toLowerCase() != 'table' )
{
    
_fnLognull0"Attempted to initialise DataTables on a node which is not a "+
        
"table: "+this.nodeName );
    return;
}

/* Check to see if we are re-initialising a table */
for ( i=0iLen=DataTable.settings.length i<iLen i++ )
{
    
/* Base check on table node */
    
if ( DataTable.settings[i].nTable == this )
    {
        if ( 
oInit === undefined || oInit.bRetrieve )
        {
            return 
DataTable.settings[i].oInstance;
        }
        else if ( 
oInit.bDestroy )
        {
            
DataTable.settings[i].oInstance.fnDestroy();
            break;
        }
        else
        {
            
_fnLogDataTable.settings[i], 0"Cannot reinitialise DataTable.nn"+
                
"To retrieve the DataTables object for this table, pass no arguments or see "+
                
"the docs for bRetrieve and bDestroy" );
            return;
        }
    }
    
    
/* If the element we are initialising has the same ID as a table which was previously
     * initialised, but the table nodes don't match (from before) then we destroy the old
     * instance by simply deleting it. This is under the assumption that the table has been
     * destroyed by other methods. Anyone using non-id selectors will need to do this manually
     */
    
if ( DataTable.settings[i].sTableId == this.id )
    {
        
DataTable.settings.splicei);
        break;
    }
}

/* Ensure the table has an ID - required for accessibility */
if ( sId === null || sId === "" )
{
    
sId "DataTables_Table_"+(DataTable.ext._oExternConfig.iNextUnique++);
    
this.id sId;
}

/* Create the settings object for this table and set some of the default parameters */
var oSettings = $.extendtrue, {}, DataTable.models.oSettings, {
    
"nTable":        this,
    
"oApi":          _that.oApi,
    
"oInit":         oInit,
    
"sDestroyWidth": $(this).width(),
    
"sInstance":     sId,
    
"sTableId":      sId
} );
DataTable.settings.pushoSettings );

// Need to add the instance after the instance after the settings object has been added
// to the settings array, so we can self reference the table instance if more than one
oSettings.oInstance = (_that.length===1) ? _that : $(this).dataTable();

/* Setting up the initialisation object */
if ( !oInit )
{
    
oInit = {};
}

// Backwards compatibility, before we apply all the defaults
if ( oInit.oLanguage )
{
    
_fnLanguageCompatoInit.oLanguage );
}

oInit _fnExtend( $.extend(true, {}, DataTable.defaults), oInit );

// Map the initialisation options onto the settings object
_fnMapoSettings.oFeaturesoInit"bPaginate" );
_fnMapoSettings.oFeaturesoInit"bLengthChange" );
_fnMapoSettings.oFeaturesoInit"bFilter" );
_fnMapoSettings.oFeaturesoInit"bSort" );
_fnMapoSettings.oFeaturesoInit"bInfo" );
_fnMapoSettings.oFeaturesoInit"bProcessing" );
_fnMapoSettings.oFeaturesoInit"bAutoWidth" );
_fnMapoSettings.oFeaturesoInit"bSortClasses" );
_fnMapoSettings.oFeaturesoInit"bServerSide" );
_fnMapoSettings.oFeaturesoInit"bDeferRender" );
_fnMapoSettings.oScrolloInit"sScrollX""sX" );
_fnMapoSettings.oScrolloInit"sScrollXInner""sXInner" );
_fnMapoSettings.oScrolloInit"sScrollY""sY" );
_fnMapoSettings.oScrolloInit"bScrollCollapse""bCollapse" );
_fnMapoSettings.oScrolloInit"bScrollInfinite""bInfinite" );
_fnMapoSettings.oScrolloInit"iScrollLoadGap""iLoadGap" );
_fnMapoSettings.oScrolloInit"bScrollAutoCss""bAutoCss" );
_fnMapoSettingsoInit"asStripeClasses" );
_fnMapoSettingsoInit"asStripClasses""asStripeClasses" ); // legacy
_fnMapoSettingsoInit"fnServerData" );
_fnMapoSettingsoInit"fnFormatNumber" );
_fnMapoSettingsoInit"sServerMethod" );
_fnMapoSettingsoInit"aaSorting" );
_fnMapoSettingsoInit"aaSortingFixed" );
_fnMapoSettingsoInit"aLengthMenu" );
_fnMapoSettingsoInit"sPaginationType" );
_fnMapoSettingsoInit"sAjaxSource" );
_fnMapoSettingsoInit"sAjaxDataProp" );
_fnMapoSettingsoInit"iCookieDuration" );
_fnMapoSettingsoInit"sCookiePrefix" );
_fnMapoSettingsoInit"sDom" );
_fnMapoSettingsoInit"bSortCellsTop" );
_fnMapoSettingsoInit"iTabIndex" );
_fnMapoSettingsoInit"oSearch""oPreviousSearch" );
_fnMapoSettingsoInit"aoSearchCols""aoPreSearchCols" );
_fnMapoSettingsoInit"iDisplayLength""_iDisplayLength" );
_fnMapoSettingsoInit"bJQueryUI""bJUI" );
_fnMapoSettingsoInit"fnCookieCallback" );
_fnMapoSettingsoInit"fnStateLoad" );
_fnMapoSettingsoInit"fnStateSave" );
_fnMapoSettings.oLanguageoInit"fnInfoCallback" );

/* Callback functions which are array driven */
_fnCallbackRegoSettings'aoDrawCallback',       oInit.fnDrawCallback,      'user' );
_fnCallbackRegoSettings'aoServerParams',       oInit.fnServerParams,      'user' );
_fnCallbackRegoSettings'aoStateSaveParams',    oInit.fnStateSaveParams,   'user' );
_fnCallbackRegoSettings'aoStateLoadParams',    oInit.fnStateLoadParams,   'user' );
_fnCallbackRegoSettings'aoStateLoaded',        oInit.fnStateLoaded,       'user' );
_fnCallbackRegoSettings'aoRowCallback',        oInit.fnRowCallback,       'user' );
_fnCallbackRegoSettings'aoRowCreatedCallback'oInit.fnCreatedRow,        'user' );
_fnCallbackRegoSettings'aoHeaderCallback',     oInit.fnHeaderCallback,    'user' );
_fnCallbackRegoSettings'aoFooterCallback',     oInit.fnFooterCallback,    'user' );
_fnCallbackRegoSettings'aoInitComplete',       oInit.fnInitComplete,      'user' );
_fnCallbackRegoSettings'aoPreDrawCallback',    oInit.fnPreDrawCallback,   'user' );

if ( 
oSettings.oFeatures.bServerSide && oSettings.oFeatures.bSort &&
       
oSettings.oFeatures.bSortClasses )
{
    
/* Enable sort classes for server-side processing. Safe to do it here, since server-side
     * processing must be enabled by the developer
     */
    
_fnCallbackRegoSettings'aoDrawCallback'_fnSortingClasses'server_side_sort_classes' );
}
else if ( 
oSettings.oFeatures.bDeferRender )
{
    
_fnCallbackRegoSettings'aoDrawCallback'_fnSortingClasses'defer_sort_classes' );
}

if ( 
oInit.bJQueryUI )
{
    
/* Use the JUI classes object for display. You could clone the oStdClasses object if 
     * you want to have multiple tables with multiple independent classes 
     */
    
$.extendoSettings.oClassesDataTable.ext.oJUIClasses );
    
    if ( 
oInit.sDom === DataTable.defaults.sDom && DataTable.defaults.sDom === "lfrtip" )
    {
        
/* Set the DOM to use a layout suitable for jQuery UI's theming */
        
oSettings.sDom '<"H"lfr>t<"F"ip>';
    }
}
else
{
    $.
extendoSettings.oClassesDataTable.ext.oStdClasses );
}
$(
this).addClassoSettings.oClasses.sTable );

/* Calculate the scroll bar width and cache it for use later on */
if ( oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "" )
{
    
oSettings.oScroll.iBarWidth _fnScrollBarWidth();
}

if ( 
oSettings.iInitDisplayStart === undefined )
{
    
/* Display start point, taking into account the save saving */
    
oSettings.iInitDisplayStart oInit.iDisplayStart;
    
oSettings._iDisplayStart oInit.iDisplayStart;
}

/* Must be done after everything which can be overridden by a cookie! */
if ( oInit.bStateSave )
{
    
oSettings.oFeatures.bStateSave true;
    
_fnLoadStateoSettingsoInit );
    
_fnCallbackRegoSettings'aoDrawCallback'_fnSaveState'state_save' );
}

if ( 
oInit.iDeferLoading !== null )
{
    
oSettings.bDeferLoading true;
    var 
tmp = $.isArrayoInit.iDeferLoading );
    
oSettings._iRecordsDisplay tmp oInit.iDeferLoading[0] : oInit.iDeferLoading;
    
oSettings._iRecordsTotal tmp oInit.iDeferLoading[1] : oInit.iDeferLoading;
}

if ( 
oInit.aaData !== null )
{
    
bUsePassedData true;
}

/* Language definitions */
if ( oInit.oLanguage.sUrl !== "" )
{
    
/* Get the language definitions from a file - because this Ajax call makes the language
     * get async to the remainder of this function we use bInitHandedOff to indicate that 
     * _fnInitialise will be fired by the returned Ajax handler, rather than the constructor
     */
    
oSettings.oLanguage.sUrl oInit.oLanguage.sUrl;
    $.
getJSONoSettings.oLanguage.sUrlnull, function( json ) {
        
_fnLanguageCompatjson );
        $.
extendtrueoSettings.oLanguageoInit.oLanguagejson );
        
_fnInitialiseoSettings );
    } );
    
bInitHandedOff true;
}
else
{
    $.
extendtrueoSettings.oLanguageoInit.oLanguage );
}


/*
 * Stripes
 */
if ( oInit.asStripeClasses === null )
{
    
oSettings.asStripeClasses =[
        
oSettings.oClasses.sStripeOdd,
        
oSettings.oClasses.sStripeEven
    
];
}

/* Remove row stripe classes if they are already on the table row */
iLen=oSettings.asStripeClasses.length;
oSettings.asDestroyStripes = [];
if (
iLen)
{
    var 
bStripeRemove false;
    var 
anRows = $(this).children('tbody').children('tr:lt(' iLen ')');
    for ( 
i=i<iLen i++ )
    {
        if ( 
anRows.hasClassoSettings.asStripeClasses[i] ) )
        {
            
bStripeRemove true;
            
            
/* Store the classes which we are about to remove so they can be re-added on destroy */
            
oSettings.asDestroyStripes.pushoSettings.asStripeClasses[i] );
        }
    }
    
    if ( 
bStripeRemove )
    {
        
anRows.removeClassoSettings.asStripeClasses.join(' ') );
    }
}

/*
 * Columns
 * See if we should load columns automatically or use defined ones
 */
var anThs = [];
var 
aoColumnsInit;
var 
nThead this.getElementsByTagName('thead');
if ( 
nThead.length !== )
{
    
_fnDetectHeaderoSettings.aoHeadernThead[0] );
    
anThs _fnGetUniqueThsoSettings );
}

/* If not given a column array, generate one with nulls */
if ( oInit.aoColumns === null )
{
    
aoColumnsInit = [];
    for ( 
i=0iLen=anThs.length i<iLen i++ )
    {
        
aoColumnsInit.pushnull );
    }
}
else
{
    
aoColumnsInit oInit.aoColumns;
}

/* Add the columns */
for ( i=0iLen=aoColumnsInit.length i<iLen i++ )
{
    
/* Short cut - use the loop to check if we have column visibility state to restore */
    
if ( oInit.saved_aoColumns !== undefined && oInit.saved_aoColumns.length == iLen )
    {
        if ( 
aoColumnsInit[i] === null )
        {
            
aoColumnsInit[i] = {};
        }
        
aoColumnsInit[i].bVisible oInit.saved_aoColumns[i].bVisible;
    }
    
    
_fnAddColumnoSettingsanThs anThs[i] : null );
}

/* Apply the column definitions */
_fnApplyColumnDefsoSettingsoInit.aoColumnDefsaoColumnsInit, function (iColoDef) {
    
_fnColumnOptionsoSettingsiColoDef );
} );


/*
 * Sorting
 * Check the aaSorting array
 */
for ( i=0iLen=oSettings.aaSorting.length i<iLen i++ )
{
    if ( 
oSettings.aaSorting[i][0] >= oSettings.aoColumns.length )
    {
        
oSettings.aaSorting[i][0] = 0;
    }
    var 
oColumn oSettings.aoColumnsoSettings.aaSorting[i][0] ];
    
    
/* Add a default sorting index */
    
if ( oSettings.aaSorting[i][2] === undefined )
    {
        
oSettings.aaSorting[i][2] = 0;
    }
    
    
/* If aaSorting is not defined, then we use the first indicator in asSorting */
    
if ( oInit.aaSorting === undefined && oSettings.saved_aaSorting === undefined )
    {
        
oSettings.aaSorting[i][1] = oColumn.asSorting[0];
    }
    
    
/* Set the current sorting index based on aoColumns.asSorting */
    
for ( j=0jLen=oColumn.asSorting.length j<jLen j++ )
    {
        if ( 
oSettings.aaSorting[i][1] == oColumn.asSorting[j] )
        {
            
oSettings.aaSorting[i][2] = j;
            break;
        }
    }
}
    
/* Do a first pass on the sorting classes (allows any size changes to be taken into
 * account, and also will apply sorting disabled classes if disabled
 */
_fnSortingClassesoSettings );


/*
 * Final init
 * Cache the header, body and footer as required, creating them if needed
 */

/* Browser support detection */
_fnBrowserDetectoSettings );

// Work around for Webkit bug 83867 - store the caption-side before removing from doc
var captions = $(this).children('caption').each( function () {
    
this._captionSide = $(this).css('caption-side');
} );

var 
thead = $(this).children('thead');
if ( 
thead.length === )
{
    
thead = [ document.createElement'thead' ) ];
    
this.appendChildthead[0] );
}
oSettings.nTHead thead[0];

var 
tbody = $(this).children('tbody');
if ( 
tbody.length === )
{
    
tbody = [ document.createElement'tbody' ) ];
    
this.appendChildtbody[0] );
}
oSettings.nTBody tbody[0];
oSettings.nTBody.setAttribute"role""alert" );
oSettings.nTBody.setAttribute"aria-live""polite" );
oSettings.nTBody.setAttribute"aria-relevant""all" );

var 
tfoot = $(this).children('tfoot');
if ( 
tfoot.length === && captions.length && (oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "") )
{
    
// If we are a scrolling table, and no footer has been given, then we need to create
    // a tfoot element for the caption element to be appended to
    
tfoot = [ document.createElement'tfoot' ) ];
    
this.appendChildtfoot[0] );
}

if ( 
tfoot.length )
{
    
oSettings.nTFoot tfoot[0];
    
_fnDetectHeaderoSettings.aoFooteroSettings.nTFoot );
}

/* Check if there is data passing into the constructor */
if ( bUsePassedData )
{
    for ( 
i=i<oInit.aaData.length i++ )
    {
        
_fnAddDataoSettingsoInit.aaData] );
    }
}
else
{
    
/* Grab the data from the page */
    
_fnGatherDataoSettings );
}

/* Copy the data index array */
oSettings.aiDisplay oSettings.aiDisplayMaster.slice();

/* Initialisation complete - table can be drawn */
oSettings.bInitialised true;

/* Check if we need to initialise the table (it might not have been handed off to the
 * language processor)
 */
if ( bInitHandedOff === false )
{
    
_fnInitialiseoSettings );
}
?>
Онлайн: 0
Реклама